Spawn TrChO

KOC All In One Throne Room & Champion Hall

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(У мене вже є менеджер скриптів, дайте мені встановити його!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name        Spawn TrChO
// @namespace   Spawn
// @icon			https://images2.imgbox.com/e8/e9/CU2F5936_o.jpg
// @homepage        https://greasyfork.org/en/scripts/408041-spawn-trcho
// @description     KOC All In One Throne Room & Champion Hall
// @version     4.1.4
// @delay       2000
// @priority    -10
// @include			*.rycamelot.com/*main_src.php*
// @include			*.beta.rycamelot.com/*main_src.php*
// @include			*apps.facebook.com/kingdomsofcamelot/*
// @include			*.rockyou.com/rya/*
// @include			*koc-cdn.popreach.com*
// @resource    jqcss http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css
// @resource    champion_uniques  https://koc-cdn.popreach.com/fb/e2/src/pb/resource/champion_uniques.js
// @require     https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
// @require     https://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js
// @connect			*
// @connect			greasyfork.org
// @grant       unsafeWindow
// @grant       GM_getValue
// @grant       GM_setValue
// @grant       GM_addStyle
// @grant       GM_xmlhttpRequest
// @grant       GM_log
// @grant       GM_registerMenuCommand
// @grant       GM_getResourceText
// @grant       GM_getResourceURL
// @contributionURL https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=CB2MLZCP8FPE8
// @copyright       Copyright 2013-2020 KSA CodeSphere - Non-commercial use only. No modifications permitted.
// @license			 	http://creativecommons.org/licenses/by/4.0/
// ==/UserScript==
//	*********************************************************************************************************
//	*	                In Hounour Of Mark Branscombe(TCO)& Phil Cazz (MadMaxx)                             *
//	*	                That Paved The Way For Organizers Like This Thanks Guys !!!                         *
//	*	            "Parts of this script use code created by Mark Branscombe & used with his               *
//	*                 explicit permission. We thank you for your generosity Mark Branscombe"                *
//	*	                                            							                            *
//	*                                                														*
//	*********************************************************************************************************



var STrChOVersion = '4.1.4';
GM_addStyle("._10.uiLayer._4-hy._3qw {display: none;}"); 
String.prototype.capitalizeFirstLetter = function() {
    return this.charAt(0).toUpperCase() + this.slice(1);
};
String.prototype.startsWith = function(starter) {
    return this.substring(0,starter.length) == starter;
};
String.prototype.endsWith = function(ender) {
    return this.substring(this.length-ender.length) == ender;
};

var ResetAll = false;
var DEBUG_TRACE = false;

var JSON;if(!JSON){JSON={};}(function(){"use strict";function f(n){return n<10?'0'+n:n;}if(typeof Date.prototype.toJSON!=='function'){Date.prototype.toJSON=function(key){return isFinite(this.valueOf())?this.getUTCFullYear()+'-'+f(this.getUTCMonth()+1)+'-'+f(this.getUTCDate())+'T'+f(this.getUTCHours())+':'+f(this.getUTCMinutes())+':'+f(this.getUTCSeconds())+'Z':null;};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(key){return this.valueOf();};}var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'},rep;function quote(string){escapable.lastIndex=0;return escapable.test(string)?'"'+string.replace(escapable,function(a){var c=meta[a];return typeof c==='string'?c:'\\u'+('0000'+a.charCodeAt(0).toString(16)).slice(-4);})+'"':'"'+string+'"';}function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value==='object'&&typeof value.toJSON==='function'){value=value.toJSON(key);}if(typeof rep==='function'){value=rep.call(holder,key,value);}switch(typeof value){case'string':return quote(value);case'number':return isFinite(value)?String(value):'null';case'boolean':case'null':return String(value);case'object':if(!value){return'null';}gap+=indent;partial=[];if(Object.prototype.toString.apply(value)==='[object Array]'){length=value.length;for(i=0;i<length;i+=1){partial[i]=str(i,value)||'null';}v=partial.length===0?'[]':gap?'[\n'+gap+partial.join(',\n'+gap)+'\n'+mind+']':'['+partial.join(',')+']';gap=mind;return v;}if(rep&&typeof rep==='object'){length=rep.length;for(i=0;i<length;i+=1){k=rep[i];if(typeof k==='string'){v=str(k,value);if(v){partial.push(quote(k)+(gap?': ':':')+v);}}}}else{for(k in value){if(Object.hasOwnProperty.call(value,k)){v=str(k,value);if(v){partial.push(quote(k)+(gap?': ':':')+v);}}}}v=partial.length===0?'{}':gap?'{\n'+gap+partial.join(',\n'+gap)+'\n'+mind+'}':'{'+partial.join(',')+'}';gap=mind;return v;}}if(typeof JSON.stringify!=='function'){JSON.stringify=function(value,replacer,space){var i;gap='';indent='';if(typeof space==='number'){for(i=0;i<space;i+=1){indent+=' ';}}else if(typeof space==='string'){indent=space;}rep=replacer;if(replacer&&typeof replacer!=='function'&&(typeof replacer!=='object'||typeof replacer.length!=='number')){throw new Error('JSON.stringify');}return str('',{'':value});};}if(typeof JSON.parse!=='function'){JSON.parse=function(text,reviver){var j;function walk(holder,key){var k,v,value=holder[key];if(value&&typeof value==='object'){for(k in value){if(Object.hasOwnProperty.call(value,k)){v=walk(value,k);if(v!==undefined){value[k]=v;}else{delete value[k];}}}}return reviver.call(holder,key,value);}text=String(text);cx.lastIndex=0;if(cx.test(text)){text=text.replace(cx,function(a){return'\\u'+('0000'+a.charCodeAt(0).toString(16)).slice(-4);});}if(/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,'@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,']').replace(/(?:^|:|,)(?:\s*\[)+/g,''))){j=eval('('+text+')');return typeof reviver==='function'?walk({'':j},''):j;}throw new SyntaxError('JSON.parse');};}}());
var JSON2 = JSON;

var uW = unsafeWindow;
var Seed = uW.seed;
var CM = uW.cm;
var ThroneTemplates = CM.FETemplates.Throne;
var ajfx = uW.g_ajaxparams;

var IMGURL = uW.stimgUrl + "img/";
var STrChORightArrow = IMGURL + "autoAttack/across_arrow.png";
var STrChODownArrow = IMGURL + "autoAttack/down_arrow.png";
var STrChOPlus = IMGURL + "throne/modal/set_buy.png";  //https://rycamelot1-a.akamaihd.net/fb/e2/src/img/throne/modal/set_buy.png

var STrChOBreakBuffer = 50000;

var Cities = {};
var Tabs = {};
var mainPop;

var dlgHeight = 600;
var dlgHeightOffset = 30;
var dlgWidth = 735;
var dlgWidthOffset = 12;
var dlgWidthMenu = 75;

var http =  window.location.protocol+"\/\/";
var gameurl=http+"rycamelot1-a.akamaihd.net/fb/e2/src/";
var URL_CASTLE_BUTTON = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAXCAYAAADk3wSdAAAACXBIWXMAAAsSAAALEgHS3X78AAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAA+NJREFUeNqclc9uFEcQxn9d3TuzeG3DLiaIOAcT2wdjgeESKeIQ5ZIokXmPXCLlTSLllEeBByCEIBMrlyzkAFxZC7P2zt/+Uznseo0NkZKUNFOlUvXXX898VW2++uaeLvR6ZFkHKxZjDP/VVJWYIm3rKYsC9/G1a/zw/XdYew5QlaSzkGlgZm9jeG9zVSWlyI8//Yzb2Fin9R6J6UyhqqKq8xjOAhljPlAf2dhYx93Y2iLGSErKgwcPMMagquzu7s7yifv3788Bdnd3SSmdyZ/Up6Tc2NrCbW6u09QlqrC4uIiIAZRLl5aoqgrvPRcvLiEipJTo95epqooQAktLixhjiDGxtLRE01Rsbq7jrly5wsHoNQCDwQDnLKqRXq+HCHjvWFkZYK0lxtN8CIHLlweIOEIILCwsAMryxT6uKAoWFhYQEfr9PnneIaVAnneAnCyzrKxMNwshzvJdYowMBgOsdbStJ89zVCNFUeB+3/+Du59/hjGG5eVlut0MSOzv7xFjwFphMFjGuSmj/f0nhKBY26Hf72OMpWkasmy67vGTX3EPf3nEl1/cxRjhwoUL9Hrd2bEzYmzpdIQ8z+ag3W6O94q1GVmWE6MiIlhrca7Dw18e4YbDZ3N5iAhZluGcpdvNUPVYq2SZxVohhA6dTk6MBmM6GCN4H6nrBmMM1sJw+Az34uUrYowYo6SUAHDO4ZwDHNYmrAVjmDGClASwhKB4H+cSC0F58fIV7vDwDW3rMcYQQiDGBCjGCCJ21j1p5hVjLCKGlGbtGSMhBEIIeN9yePgGZ8VSliUiQtM01HVDltnZ4oRIQlVnJxFSOvEJ7yNN09I0DW3bUlU1VixudXWVsixQhaqq6HY7OAcpOUQUa6eA01Y0pGSIceqbJlCWBVVV0TQNZVmwurqK297eYjweI2IpioIsc4hAShnWKnDynI6UlIQQlKYJFEVBURTUdc1kMmF7ewt35/YOR0dHiFjK8hQ0xhYRUD0dGO8OkBihrj2TyRS0qiqOjyfcub2D27l1k7+e/4mIZTR6TdPUlGWPTse9w/C8TcHrumUyKRiPj3n79i2j0YidWzdxa9fX+O3xIwDG4zGqibZtEJH5yHsPcqZr7wNFUXJ8PKEsCyaTY9aur+G6eT7XZwhhJi/5V6AxRrwPM51Odd7Nc9zo4ICUprLxPlDXDarM5+SHhvQJaEqJtm3x3qM6bYDRwQFuOHyOs1NWG59e56OrV+n1FqeXiCrnyZ78K2PkTL4oS1KMDIfPcXt7T/nk2mVSShgRjo6OKMvilKHqWUGdu0ZOLISIiGFv7ynm62/v/dOn+19mDPw9AD29Ua4OIbBVAAAAAElFTkSuQmCC";
var URL_CASTLE_BUTTON_SELECT = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAXCAYAAADk3wSdAAAACXBIWXMAAAsSAAALEgHS3X78AAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAABABJREFUeNqklT1vHGUQx3/Py+7e3tpOYmOBOSQc2S4cK3HSIKEUiIYAUj4GiAaJGiihBlFBPkC+AqGiIYl4cUA0XEKRpEmRWDn77nb39nn2eYbiLmc7QIEYaVajnZn/zOyO/qPeeueqdIuCNE0w2qCU4r+KiBBiwDlPVZbYl9fW+OjDDzDmOUARosxMpoaaPZXib8VFhBgDX3z1NXZzcwPnPTrEE4EigojMbTgJpJT6h/jA5uYG9tz2NiEEYhQ+uXZjHvT5+2/PwT699h3PWv3svStzwI+/+fZEPETObW9jt7Y2aCYVIs/GmyZnmT3W1dGYnU5y1Omx8Y0xGGPZ2trArq6usv/k8cnxFBRFPk84vdTFak0b4/z90fgKEPI8Rylh5YVVbFmWdLtdtNYopQHIMztLno7/6toy1mjaECmKzgxIkXdSJk0LKIqiACJlWWJ//e13Lr/+2rxy3kl4cXmRL69/z0I3o9tJONtbJrEG3wau3/iFsvaMK8dLK6d4PBhRTzx5ngORH279jL156zZvvnEZpTRKwZmlguXTC6yc6rJUZCwWKd08mYOWtWdUeobjhiRJ8CEyaQ5I0xSRwM1bt7H9/t15l9YaFrsdloqc04tdzix1WFpIKXJLmmgaF+lmgTRxGG1ogzCuGqyd7rjWin7/Lvb+g4eEEFBKyBJLllryLKHIUxa6GUtFSpEbkkSTpWB0SxSF95Fx5aY5iSWEAETuP3iIHQye4pyfV9JaYY0iMYrUKhKrSBNNYhWI4OzUZ/VUzSzHOQdEBoOnWKMNVVVN/z6AxGMaUBJREtEolIDiyC8SAUEBVVUBEaMNttfrUVUlIhBCxHtP0zica3BO4xw0JhBajW+FpmlpGkfjGpxr8M4TQmQ8HgORXq+H3dnZ5vDwEK0Nznvq2lHWNaNSk1pBgmdSW6zVtG2kblpGVctoXFNWE6pJg/Oe0WiESGBnZxt76eIuw+EQrQ114xnXNYcjTaIjsXWUnZQsNRilCCI0LlBOHINRw8GwZlzV1I1jNBoSY+DSxV3s7oXz/HnvD7Q2eO85GFZoCbhJzcGhJU8NidVYrWij4NtI7QLVpOWgdByMG7xvefToESDsXjiPXT+7zk8/3gYgxsioakACk4kmSzTZDFBriBHaKLg2MvFC2QTGk5YYhcFggDGa9bPr2E6WEWOckTGEKAyrFudnK2Vma6MgytTfBmhmwGFGj1MMoZNl2Cf7+8QYp9wpM2ARyiZSOYXVoNVUp0WhjTDDmst0+TVP9vex/f49rNGICFfPLyInzskR+59gfEBpzTH6BaXRCvr9e9i9vTu8srYy/wTP3x1E5oXUjLH/7Tgao9nbu4O68u7V55v5X6IU/DUA3uQnItzRr3oAAAAASUVORK5CYII=";
var success_image = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3AgNBDgX+Hd0CAAACkZJREFUWMOtl3uMHdV9x7+/c2buzJ373rvvtb3exYuNDfYaMIkgkNYCFIdScB+CVm4UIWiTIKs0FVSplAqaBiUWbYXSh1CcREkr2lRKrZgoJThYLQWMIY6pjV+7fqx37fU+7t7nPO48zvn1j12btYG0fzDSkWbmjH6f3/m9h/AxXjw+DhoZAY+PL39NH/U5jYx85ObHAadfoQBfUeLjtcAYALosUyzBFxczL4EZRFfujQ8VNLsb1PMoeHb3tVv0oYdhE/BvAhQDDAJIgBYVYGYiIkK+JA6ceF0MWKVwVfcKtaQQyf8HnABIAMayZQIwwWyASIINAdEWICawKcFSAjBYJVInWoh1a2/Y33jl4ef/+e9uOHb4xKltD+wI4baAJWFXH/F9+GXwZXhqCWyAWQIgEBgsEpBOIEIF2VJgAVCOEBNTYTAj+3IPf3f+G1/6p3/44UzhTPHJnV98tI25SwKA+oACy059GZwCsw0gDSANIhuABZIGQEtCOAFTBOKIKYohg4RYKO4e7mnmW3/2l6e+8Dt7/uLlX95Tu/eJF/Z+7zguXGDWimnJm8Zysy8LGhOADWaHOcqQsIts9g6w6ByE2bGCjOwACAYnURXaryCuXxJxZZJUWIMwYwwMrflP77++/Df//c2b3/nH9974HO94Ytcru0/i9GliZk2LQbho8Wt8LpfgaWbOEUd5ZEc3atF/H6ziraTP9qE97iCuSbACkwWkVkZk3+hqlT4l3LP/EWbY+uvJ3Y98/+1/7fP2qEOfLz385Ne/9tWjcKOIQTERxwAxAH0lDZfgYgnuAJwHRCdnNm/V5urHBU+sUtMvQM2OEderoMAHtAIMA7CyEB0DMIYegp/7dPup9x5RP9y/L2O/lr30lY2P/cnjO3e8jbZosbICYjMGQV2Bj4wsxQCDmFgSk8VAhoiLiRzcAhJfRvXF3uDk9+GPTeL0RIDDFxOMuYQIAj22wK19FawfrqARuPyNeJe958dH0HPeCf/8tkde+KM/3T6FWtVkYYIow0hyGiw16EohgqFndoOJiSBMgNJEXIyVU2pWjj6WSTd64+M/wuShi/y374Z0yFYIugF7kJAyJURi4hXXwrrAxOFjh+n4wTrK1RR23f+78lPXdwlEbo6p3SJDSmaficFQhcUEWqqaBhETWMgk4VQcJ7l0Pp8be+2lB4dvHrnZO/Yyzr0zx398XFG8iZHrIHQ6EqmUgZRhwmQLuayDt+bmMLm/jlQd+IM1a/me0aIRq/rO6dNnj3f3FWogmIZhCKYAlHQxrb7rSuk2AIJmLWfnG+lm0y/H/rmhjrL5W62Jw7ww1aRdk4rkbUCulIKdk7DTApZpwDIspMnGa+dmMfGzOrgFdIQONgyVCe1ZTtmZ4vmTr25Plz77Aqswk8vYrmkFIczqYvSPjCylIYHaYSLn5pvZpuuWUZ28rTige4TU+EUtxsJaRld/CrYjIC1C2rFgWyk4lMKrv5zG+L4auAlYvsTarR3Y17iAmysOFTMBEFa2jB058VLvYFeDhDZLliOWesWyGFAartc2kiSxDSnSbb+15uhpP7WfGfb6TbjRIJRzOQz2F9BdBCbrb6MR+jjwbgWn9tXANYB94IZPlJFeyXhvrIKTF4vYPNiDsNXq8uKplUFPfsK2zJRWaRLi6nZiRLGiSqVlhlFkmwIpt97q6x7Iov/wDJ79zpsIshoJAUoA/Wvy+Pz2h3DLiINnf/I8kspiQvV2OejfYqHuBWgjwuGLC9jQ3wnfi7NNv97ZFSe2F0RmSWmZEle3HyNRilpeIJJESdMUorHg5YbXFLD11k68qAowmDBzJsB8JcD8/zTx9SPfhkwDZrRYM2VMWPepAiinEDZiKJ1guhEgijQ8P6F6HGS11jIMI8la07X9TxhSIopiUlozEalarQ3PjRDGhDiMYQ8DN95fwvobOyAjgsWAEQCsAB0C/QNZdG1OwQ1DhGGMOFIQzGi3GW5ToR0xhCAthODF5nV18xOCiP0gUk3XB6QIqy1uNioe2LBQikw0FiKEMsLqbRnctKUMERKQAEgA8oCN9xXg6jZarQhtTyH2NQYyeXhujHo9VjDthmEYkWkaioj0td1XaGaO4kS5XhhL0wgi2JOXLjSRsIFNHR1waxG8Zgg3bGPwM2msHS2CPSDxgOs25iAGFKqVNrxqjHZdId2WuK5cRr3iYqGauFZH57QhRdswRGRIyR9QgDVzqZiNAPKI2LN6uo9NnmuGrZrHd16/Dk5LoDUfoTEfoO75WHWvhcG1GZhtQtctJiqVAM25GMGCQljTGM33omxnMDvR4LmWMX395pEJaRieachIpIwPWiDtWOjrKSaWlXJdL/Juv3v08PiMnpw6MUu92Sz/9rrNaC9oNC/FWLgQoFb3Ud4iMXCTjdCIUb8Ywp+NES5olBIHf3jHJ7k24+L8WI3D3hVv3H7r6mkhhJ9x7BBgDYCXj3oCkjiftZN83vFct+3eccvgVGH0hj0HDs4kp35xhn7/rl/nZx5+EiVagYUJH3NnfXjtCM4GRmM2RO18gGge+OR1n8a/PfU0ty62cPTAJE4E6bOPPr7tpTCIXCmFl8+lYyitL09dVyafp7+yHZlcGm0/RLXuk5WS4p5fWz/z04PnCxPvXVyfNOdpw8AK3n73Q3Td0B2oVpuYn51H24tRTHVj6033Y+dnv4DPdPXiyMuv0pv7jtHxKi9s27H1mw/8xuiR6kKrkcukXcs2I9bQRMAzz+29espl/nfUxqbkkRMXHGIurBnuzi9UWqueeXbvl8Tcpfs2rusRfUNl7h8eoKGNd6J71TqwFvCac7h44iDGDr2D6Ykanxmfo/GWWrj3wdufe+KLd/88jpNKorhRLmU9IoqZmUXvYx8cs9XMtyE683TwlXfNS7N1Z6CvlO3rKRTqzaDv6V0/2VE9PbVtZdHs6u3OUqlkIZNLIYk1Aj9GoxZiZs7HdM2PgnT25P0PfuK7Tz1+92uNZlCPE9Uo5h3fNI0YgLo8eS13wfsjWeMHmJmap5/tP2r5fphZv7Y/vWao2wFzx4t7Do2+9dbYXa1KY1RFcb9g7TBDxppjlrKWLWTHhq8feOOh7Vtev/Outefr861WnGg3n7N9y05F0Kw/DP6+C5Y23HN/j3/Zc1CMnZmxchk7fcumVamucs4xDMqFYVLw/Cg/N98qzle8YhTFZqHguEODXZU1w90LpYLTJEIrUdozDcN30qlQSpEwL0b+tab/yD+dd/Z+FT/6+SExuKJDpm3TZGbbsmTasc10PmunOss52dmRg22nWEqhACRac6SZQ9OQQS6TjiApgWbFzPqjwFea0fKH5//q97DlN7+GqXef0xk7pf0wSl5/ayy6MF1tt7zA15qtXNaW/b1FvXpllyrk0yqbsVQuk45LRScRpqGhtGKlmYhY9D72oWb/lRb48Q924oHPfWtxVuW9OPDTN1EqZumNg2N08vSMUEqLVSs6sGnDKu4qZzmfc/RAbxFSCmZmEBFfBv5fcAD4X6XxV1xnuaXKAAAAAElFTkSuQmCC";
var up_img ="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAaCAYAAACkVDyJAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3AgRBjoxAQevPgAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAAEWUlEQVRIx+2Vb2iVZRTAf+d53/tv2929m3d3a9NN55AMFG0RKhUF9aEEoX0I0rCS0HS0UkEpMJAUSxti/sn6VH0QpI/Wl0CyIhkhzbJ/rsScOXX/t7vt/nvf5/ThbrNlxjKDgg6c5zwHnvf83nOew3ng3y7xTd9M9Vu+++dgZVu/ntxHVny7puHLDgEo3/b9tGOYm8py65nW7KAe6H/f2wZAKDjtb2VagI3tDO5dDEBsy1ePusYceTAQCx9ntDtvWDm0ff7xW5rhJGxze4P1dXdtIhx+bFVc68rdJCqvlG8/Ww0wY2fHrStp2abTRb6vr5VFgw0mXsS+tkGZnXA0UeIstSo7AETM3weWtpwCwPP956IRpymSLKUrrdqdsgyM5plf6RIJytMzdv64qfelBhK7zt08sLT5C4bfuIvSllNLAg6vxqpipEMh9RUZyihXBjxxjdX6hIuItCZ2nVvW++JcKnaf/+vA6LNtDB+8m+iGtkqsfhSbUYxUxjXrqQjg+Up/yuNCb17qywzJYgcfjib3nK/s2TKHRGvn9IHRdSdJHV5CfF1bkbUcjZeGorHbq7U/h8h4X6sqmZzSl/Lp6M7RONPVsogzM+9zINnaGendXDt9YOqtZQDkle3RkLkv0VinPeqKg045p1YZSVv6hj0uDuTkzmqHSNA0+aprq/d0SsXezumXtHjtyRWO+s11S+ulN1gkonbqAVVQxVplcMzSM+wzmvV1QaVjRHg977KoZ2MtFfsu3hhY8tRnBbvm81rx7L76hdWRnni5qur1f6SFDLHg+4XSXh7yJeKq1sUdF5Fjyf2/FPc8P4vkwUvXA4tXf8LIO/dS8uSnAdQeSlaXzs7NrVbPyB9OI51Y1KJWyXlKX8rj6rAnc2Ki0ZDUoBy97d2r0t1cQ/LQld9nqBPrnnA4sDzWOEfHgkFBb1Bz1UkYqqhV0lnL1SGf/jFfFle6qshyO2p3AHRvqKLq8JUCsPiJE4y+dz9Fq08843t2/bx75tIfLcHaPxm2EyXV394njKQtXYMeIxmPpTUuGV+bKw9fbipMbnMtXnjlx4sckQ8al8yq6byjHuspiCAKNptHszlsOo/N5NFMDm8oTa5rABNywTWI62BcB1xDKOSSLAswOxHQtBeQH4b0zKjVpr71lT8ZgKLHj5fHI+6rax+oqnnk4XpFIRwQwi6EXAgHDCF3QmXShh0IOxBxhIgz7ruCAcaylpGMlRcWFuu8EXdBIuW8/NCRgSLZf+xn4yMtCnv7UnnO5gK0pwTHCGIERFBrwSr443dmFc37+GMZTMBBnEKGGAOOQZyCLYk4LCoP037Skhs2DI7qKrezNysVsWDu9IWRSx+e7k97KmCkEMQx1/auAWOuBXcM4rpgDSCFl0IFUQEVUOgfhYvpLDrT4PXYIhzjuF39WT+Tt292dKXfTuctgYAD45lhxlVMwR9XnXi5dWrXCjKlycw424mAJMBT9flf/vPyKztX7pN6V2XmAAAAAElFTkSuQmCC";
var up_glow="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAaCAYAAACkVDyJAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3AgRBwMPzyBVGAAABfBJREFUSMe1lNtvnMUZxn/PzPftrk9ZO7HBtkzWSYhjp9RxfABKoZQLKspNpV70phf9F/q3cNmL/gNVL1ArVJFW6YGqUEqECjQnh9QHkpBkE68Pa+96v3l6YWOSEipA6ivNjGakeZ553mfeVzwiXl5d5dzYGGFphVdjEWNW6rN9TPas4RjSrvAm0GOrhPxvoQuWPpbZuNCoFyuT334UNNmjDs+NjQHwaiCErNQFHgHPWLyImRCkkGs77VIBImbRGEktYGmy61Cz/s7b6ZnhEc7Xag9hh/8me2zjBgAvrC4Ts5gLHyF5CvQ0ZgZxkuDJpT+0Zo2nJCaAGcTT2KcRQ93lvPTs8IjO12rMXrv2vwlv940ytv4Jh7OYQxqwdRI0jz0DeiIrh0OLf2xWP/hFs7r8TqsacvokjcmaQZ7HPmno7y3l+fjFy1w4cYInr138IuEzly4dHM7thEx2H+io7LNJnpN0LGT03vpwJ7v9z1b48XOH+PSj3VC/3omIHqBG0qzts7LHReqdOdIbBy6+z+KJKX6wtPQ54eiVK7wzOQnAK6srQUWqGA0D08YLQqcQA1t3O3HxT1uMDVT8k5/2a6QSff3dtlqbKQJV8IRgHpjGjKTk7u9XBwXwZq3Gd68vogNZ713gpcP9qnZVysmMCM8Zv4x5XmK82KXy0W8b6txCQ0f76c0KhmKHCysdl49nOvVi2ba3gWXEW0LnbL0r+War3Wn9rlYzQHhh39TTzunrKmdJ9AufSPYc5gwwikJl9b2tsL3UUfdw1Te3ze2NxP2tXb41mmvtWsEnH3aIpVAGRmzO2J4DT2AGyqUsn75yWbz7D+Lya68x88FFxh6rxiyGvmCfsP2s4HnglIKqjdVWdun1BoO1w97u7tJuu6DdKiiaLYb6I+U8+tpiR9XhoK5DIZP3ykVBO0hrBG0ciqF9vLDj+M3LHO3pDWWpW/CEzRzoe8B0iBpsbRb5hV/W1T/YS350UJvbBSoKinZBa2OHQuLU4yWtt8TKUtLQsaBYUi5TtmXwlkwjxLi1U650wmjK1QVlwRBmCvtp8FMKGuq0XPrwV3X1lHNXp0a51wbtu26bnbapbxRcud1mbiyjO4nFvxekXXKkQeGnZBaA09hDvcHl8FisZFj9wJPAgtAZSSOYyrXzDXVu7TI0X9MdZ0T8UM06mc3tRH29w8r9NrOj0c0b6NbVJJuK9/0E5sETQH9wcp9NDZi1PWs8DvTeudTUzbcb1L5z3HdL3cjp4Q5hg01KZq2ZuLNesNUq9NTj0dffN837DpK60R42cBZUCwSGJaZtLwATkqo7jU688pu6xidHfKf/sGx/seF6TyEJimIvtTcbBV2ZVTsUuPiWKQpHSVXbJ23mbU8H7CmbBaTTko6kjvNLr99Vb97l9slRdYIe2fX92eSEk2l3TH2jw6frHY71i1JHvvq2ZJNJOgKcBhYCaF74DPZoLKty9Y162Lja8sCzx9UslcA8OuwDMmyczHYr8Wmj4F6zYHYkU/0TWPmXggIVpFHEmbDnG+NZJfYs/7kRlv+65smXTupeXy8pgfgywv2U+kE/YXM7cWOtw+ZOh+fGMi9fhburUgjuAdWCpAkFVe9/3Iwfv3lX8wtj3BgexMWXSXsgEgfq9vw0nSLR2ErcWi+QC80N5L59Jaq5oSC7GgyDu5tFfuP39/Wzs0N+9YfHhaGSi0oG5QwqeaCcfTZ0sFYiVCJ0RdEV9/eZCECzldjcSfx8ukdHl3KvvZ/JSXkmOz+2IV6ZGuL2xi7v/WWJbCOgoL0ql8CJmEws0oGSEonU30XII8oCxAgxQAxof6y1Ar++vEO9ntS6mHOv28qAnQ6Of7u1mZ2/3FBhmSARhEJAUQcgKEAUIdsHHihB2H9cDBAEQXt3gtgOcG69ZU9J7SOBvuikH91YXQaGbEr7jevhf6KHlq8Z+vxLG1u0MqNN4V5JhbHM/6i7rx0P3JIt1MokLwL3wNmePH8zMV+J3Z3M0huYbsT/i+hBypTJPidClr553r6ynQL/B2jU9jxyr6MUAAAAAElFTkSuQmCC";
var down_img = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAaCAYAAACkVDyJAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3AgRBwUywRK+jwAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAAEi0lEQVRIx+1WXWwUVRT+zrl3drfbdne73e2Wv1WQYDQxwd9UjIiJ0ScfJDEENGp8ofwIgcpviGI0Gk2AaFIEYvwBwyMPRsJTI1FDkYithRCUtkChS7vd0t1u9292Zo4P0xYLrVQTEk38kpk7dyZzvnO+79yZC/yP/zropV0dCFcb1Hohqzp6czAMBSgGMYM0A0wgViBNADNIsftc3bgG0/icePSeIrBSECawwXDyBGuAbD0z7FXRoGflYM7afiFZKFgCwBGAxB0BgBxAGBABREDj6f45dYLcVM1YGLsAWCn4MURbdTziFRvkeXR+YNa8WAV+Mw20ZQmKCcTkBnIc923bgThuIlK2YeeLYFaj1bkKQAlICaAIVRXAwrAXbSccmMOMdE5sAgD/8pZwwO85vPzx6HOxJffKvksgD4+mKYCYNpyiCadQhlM0IcUyrEwe5d7rYK8GaTV6MGAokFLw+xXitQaaHgrL7mNFumI7h+KzVeO4KL4V3y1URN8+3DBnVs/98+BYAhC5ypbKkNIYYRlSNGFlCjATQ2CvBjSDtAJrBWiG16tRV2Pg7oghBcug8xk5k3Nk6eCqWCcDQOXLx1E8/HS7KOw8dfKKObMvBVIkt205dr2jMfmZoBUjWMmoDygRUvTTQDlTEnvn4KpYZ/3+JBgAcl8vQeUrx5E/uOQzpfnT33/sQjg7AmZgSlbCqMcuKYjADFRVMGaGNKp8Gq29FnyKmvsbZxxx7XHAEyK4503FYvlo5vRF8pumTOhETOxKEI83FjGhwsuIBRXCfiVt/RYR5ChX8g4AqNvbh77G+huEuYNPoeq1HzDy1eIyiFcnE8OXPF0J0o7IFAWOVueSejShtlojFtByMSOULUkvCMuuvRqTuuZeJFfXj7swjpEvn3THz5/oEc3ruzsShWj6OhHR1JIyoBShtlphRlBJwSK6nLYtiDyffGN2LvrxFSTXzJpg+6TIHVj0jU2q+XJrt0TMvAjxJJISmAkhPyMaUKj0KjrTbzsieNOw0B7d04OB9XNu6bNbUL3yBADAILydLTnfp05fpihZYt9kKDGhqoJRG9CYU+ORXxI2CqZzRBEdSGyKy8CG+KSNfQuy+xehuvEk0vsb8sxYlh4uZTPnExT2QMYcJSL4PK6UC+o8OH3VoqGCfdVQWJtsihciu3qmXEmTIruvAYE1p5Dd29APpmczgzlIf5q8mkQAaEUIV2vcFTGke8hBMmdDAcuSm+b2Rz+6iFRT/O8RAsBw82MIrPsZw588crJsY2umL4OKUokUQYI+Qn2NFsth6k5ZEJGm1LZ7TkQ+6MLA5rn4i+U7PdRsbPeXHedQOORbGp0dRKW2EVWWtF+zaTAvX6R3Lng98n4nUtvn3/bjNC0M7V6YV4q2DGXNTiedx/qGkFxK2ZQasVuZZAcAiDi3/wFPhyy0oQ3pPQ8CAIKbf31BMx9+xgj6WpBLlhkrMu/c13JHtgc1WzrcBLac2cWLz+bD2869BQDh97qmHYP/CXH6wweavCFaG35RvwsAKJl3bhMU2nh24nzduX/3ru0PInfZcM1Vy/MAAAAASUVORK5CYII=";
var down_glow = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAaCAYAAACkVDyJAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3AgRBwUJcBlXqwAABehJREFUSMe1lklvXNcRhb9z3+uBzeasgZpFkaIkRxEUO7EUOIktwPZCSOBFkI13+QX5K/kFAbLIJousjSSADASWE5OiLEbWQJkSW2JIiaRMtjh193vvnixI04jhYRGogAIuChf31KlTVbh6b3F+VIQ0CjAvzwQyTi29Y7sGCPFSzRBT2VeBQUz6VS4vC488tTUmPAwqG8svD89C7VS4DnTZLoOkrzPU/0Nbe2BYtggp0Dv8LKYvPlkP1+43KSwTJIJQCCgRJAElARQgESENEHZjIaCwc4cgCPrfeJBdBHWWgk7+qCinQDVFyU+H64x2V3w/S3VzPZAEgXbcjhANRcTREI2znPiiTSglKA2QJDugSUCJUWLqXXCxv6Kp65H2UqB0IYbUUvaoJ5b/fneZq0N1XrsyysQchPCV1O4UxFaHuJ0RWx3cysibW2Rr24RKitJk1wOUEpQk1GoJ/RXx6zNVGvdbfnEp0+CFwqlgpVRPyoffHij98Q8LOt8qmVdOqZUZJGSIWcR5JOaRmBvnkTw3nQJCAchIJmjnXEmgVgnUq4HfT2/68YmokxdzKzgLtmcc3Rw4VStOvbvPkxPzHH66sqPd91lgJ6mgL/UiTQJ93YHh3gQr8Y3VTAfGC9d6HC01g6QpwVzeKjaP/6IvHn+jX/euPfDg+gYhfMfyETsgYk/rEKDeFTjcn1Kvplyfz3X8NOw7aseoTXAjgCeNbiEtFG23Tl8dij2nK1r950PXOp1vnwcJtNuJuyy7KoGDfQmDtYSpxdxDR+DYK46OtLAXMLcC0l2JCew7tp+HVNnZ9/Z5I9tW+cGC0+hvnzCxB1pOxVBPysHelEdrppNapy/bErnt58AdYCIQeWozLWkCmLHdrPalxfivhjx3b1H7176wpG8vaYAkEUM9CYf6ErZzufEicu5nIklU2G5KeiAxKWk6KGhdogFM7eipOWBj/9maD13uo/HxQ+3rbGGFbyipCEH01wL7exO6K4lvPys0clHUBhRtb+Gdt4Gb4EZYKlo58hrwOTBhfMv2IqI1eqXP6XCJ5cmG9yun+PrWC6LeFRjqTTk2UGZqoVDtMB4+HSzREixK3AImQTPAWlgImbehbVhG3EX6BHTb0ctpRZ3zvxnyZjtT8+4Cg2WwvyQoquWdUo4fKHNjPmcrmLHXE0KJDHvF6LbFBHAHaXkjqh3mDp1haXk9ZtHbSAtB/Bs8AczEwmuVepJfeH+A1aUN/GzNlVQYSBMx2JNyYl+Jh19EL20WnHszdaVbBdFNwwMFbkhhmqD/FHm2VVpdi8nPZ2f55Ow45fd/68HersJSRzubsyoYwPRW+0plpWjl7qbq9bIzo77UHOo2SZLy2bNcx18v++B4GmPuTcOs4DrWdZn7QLOxuVV8tLFJ+o/RUQDuKOPgdjvv66quRTQbRL/xIKYHx/LR17qrzcVcW0+bOnS8n3oaGEhKTD3J3D+a6sj5lKIT2+zqJnTD1gzyaruTZ9PjZ/zlcuLwzAy89irXRk65lRedgJeBO0ITwGdGy0lZ+dhbddqliNe2/LvL/TxaKpz3Syd/XDKmI1gR3BaawP6MEFeC3f7gxAkDvPHo8x3AhfFxLt27B8AHR49FJ6El/BSYFpowvo9Z7d6XFmNvdjO/2tKf/7TmxVahkZ+UXamHAmiCZgyTwDRiMQRtfdhcMcC7jQYfjYyxN1z/Ont2r91vVGNuaR382NLNYN2w/SjmbAyfr+YHLlTiX66/4OAPSnFoJC0wm0CD4ClJNy3NmbDx6fONYvXcRcZm7/LXEycA9j5Oe3ZgfYH5nsOMzD/OBpN0VfID7F6kAezuvO0jY2/VVCHV0UtlxwxsLyA+lTWJ9ECwtt7JsrlzZ3h1dpap3T753q/KL588CaGU1ISP2b4MXMGMS4qhxHbMqNok4M+BDxXCx5jGVifb+ujpYrw0fIhru8y+E/Cd+Xn+dvQoofGEq0mRJGm5x/aI7FcNI0iZ8AbQbauMPCc0ZemhzPpU83nx5OwPv5HEfwESfwMmXNBW3wAAAABJRU5ErkJggg==";
var gbtn_img = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAKOWlDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAEjHnZZ3VFTXFofPvXd6oc0wAlKG3rvAANJ7k15FYZgZYCgDDjM0sSGiAhFFRJoiSFDEgNFQJFZEsRAUVLAHJAgoMRhFVCxvRtaLrqy89/Ly++Osb+2z97n77L3PWhcAkqcvl5cGSwGQyhPwgzyc6RGRUXTsAIABHmCAKQBMVka6X7B7CBDJy82FniFyAl8EAfB6WLwCcNPQM4BOB/+fpFnpfIHomAARm7M5GSwRF4g4JUuQLrbPipgalyxmGCVmvihBEcuJOWGRDT77LLKjmNmpPLaIxTmns1PZYu4V8bZMIUfEiK+ICzO5nCwR3xKxRoowlSviN+LYVA4zAwAUSWwXcFiJIjYRMYkfEuQi4uUA4EgJX3HcVyzgZAvEl3JJS8/hcxMSBXQdli7d1NqaQffkZKVwBALDACYrmcln013SUtOZvBwAFu/8WTLi2tJFRbY0tba0NDQzMv2qUP91829K3NtFehn4uWcQrf+L7a/80hoAYMyJarPziy2uCoDOLQDI3fti0zgAgKSobx3Xv7oPTTwviQJBuo2xcVZWlhGXwzISF/QP/U+Hv6GvvmckPu6P8tBdOfFMYYqALq4bKy0lTcinZ6QzWRy64Z+H+B8H/nUeBkGceA6fwxNFhImmjMtLELWbx+YKuGk8Opf3n5r4D8P+pMW5FonS+BFQY4yA1HUqQH7tBygKESDR+8Vd/6NvvvgwIH554SqTi3P/7zf9Z8Gl4iWDm/A5ziUohM4S8jMX98TPEqABAUgCKpAHykAd6ABDYAasgC1wBG7AG/iDEBAJVgMWSASpgA+yQB7YBApBMdgJ9oBqUAcaQTNoBcdBJzgFzoNL4Bq4AW6D+2AUTIBnYBa8BgsQBGEhMkSB5CEVSBPSh8wgBmQPuUG+UBAUCcVCCRAPEkJ50GaoGCqDqqF6qBn6HjoJnYeuQIPQXWgMmoZ+h97BCEyCqbASrAUbwwzYCfaBQ+BVcAK8Bs6FC+AdcCXcAB+FO+Dz8DX4NjwKP4PnEIAQERqiihgiDMQF8UeikHiEj6xHipAKpAFpRbqRPuQmMorMIG9RGBQFRUcZomxRnqhQFAu1BrUeVYKqRh1GdaB6UTdRY6hZ1Ec0Ga2I1kfboL3QEegEdBa6EF2BbkK3oy+ib6Mn0K8xGAwNo42xwnhiIjFJmLWYEsw+TBvmHGYQM46Zw2Kx8lh9rB3WH8vECrCF2CrsUexZ7BB2AvsGR8Sp4Mxw7rgoHA+Xj6vAHcGdwQ3hJnELeCm8Jt4G749n43PwpfhGfDf+On4Cv0CQJmgT7AghhCTCJkIloZVwkfCA8JJIJKoRrYmBRC5xI7GSeIx4mThGfEuSIemRXEjRJCFpB+kQ6RzpLuklmUzWIjuSo8gC8g5yM/kC+RH5jQRFwkjCS4ItsUGiRqJDYkjiuSReUlPSSXK1ZK5kheQJyeuSM1J4KS0pFymm1HqpGqmTUiNSc9IUaVNpf+lU6RLpI9JXpKdksDJaMm4ybJkCmYMyF2TGKQhFneJCYVE2UxopFykTVAxVm+pFTaIWU7+jDlBnZWVkl8mGyWbL1sielh2lITQtmhcthVZKO04bpr1borTEaQlnyfYlrUuGlszLLZVzlOPIFcm1yd2WeydPl3eTT5bfJd8p/1ABpaCnEKiQpbBf4aLCzFLqUtulrKVFS48vvacIK+opBimuVTyo2K84p6Ss5KGUrlSldEFpRpmm7KicpFyufEZ5WoWiYq/CVSlXOavylC5Ld6Kn0CvpvfRZVUVVT1Whar3qgOqCmrZaqFq+WpvaQ3WCOkM9Xr1cvUd9VkNFw08jT6NF454mXpOhmai5V7NPc15LWytca6tWp9aUtpy2l3audov2Ax2yjoPOGp0GnVu6GF2GbrLuPt0berCehV6iXo3edX1Y31Kfq79Pf9AAbWBtwDNoMBgxJBk6GWYathiOGdGMfI3yjTqNnhtrGEcZ7zLuM/5oYmGSYtJoct9UxtTbNN+02/R3Mz0zllmN2S1zsrm7+QbzLvMXy/SXcZbtX3bHgmLhZ7HVosfig6WVJd+y1XLaSsMq1qrWaoRBZQQwShiXrdHWztYbrE9Zv7WxtBHYHLf5zdbQNtn2iO3Ucu3lnOWNy8ft1OyYdvV2o/Z0+1j7A/ajDqoOTIcGh8eO6o5sxybHSSddpySno07PnU2c+c7tzvMuNi7rXM65Iq4erkWuA24ybqFu1W6P3NXcE9xb3Gc9LDzWepzzRHv6eO7yHPFS8mJ5NXvNelt5r/Pu9SH5BPtU+zz21fPl+3b7wX7efrv9HqzQXMFb0ekP/L38d/s/DNAOWBPwYyAmMCCwJvBJkGlQXlBfMCU4JvhI8OsQ55DSkPuhOqHC0J4wybDosOaw+XDX8LLw0QjjiHUR1yIVIrmRXVHYqLCopqi5lW4r96yciLaILoweXqW9KnvVldUKq1NWn46RjGHGnIhFx4bHHol9z/RnNjDn4rziauNmWS6svaxnbEd2OXuaY8cp40zG28WXxU8l2CXsTphOdEisSJzhunCruS+SPJPqkuaT/ZMPJX9KCU9pS8Wlxqae5Mnwknm9acpp2WmD6frphemja2zW7Fkzy/fhN2VAGasyugRU0c9Uv1BHuEU4lmmfWZP5Jiss60S2dDYvuz9HL2d7zmSue+63a1FrWWt78lTzNuWNrXNaV78eWh+3vmeD+oaCDRMbPTYe3kTYlLzpp3yT/LL8V5vDN3cXKBVsLBjf4rGlpVCikF84stV2a9021DbutoHt5turtn8sYhddLTYprih+X8IqufqN6TeV33zaEb9joNSydP9OzE7ezuFdDrsOl0mX5ZaN7/bb3VFOLy8qf7UnZs+VimUVdXsJe4V7Ryt9K7uqNKp2Vr2vTqy+XeNc01arWLu9dn4fe9/Qfsf9rXVKdcV17w5wD9yp96jvaNBqqDiIOZh58EljWGPft4xvm5sUmoqbPhziHRo9HHS4t9mqufmI4pHSFrhF2DJ9NProje9cv+tqNWytb6O1FR8Dx4THnn4f+/3wcZ/jPScYJ1p/0Pyhtp3SXtQBdeR0zHYmdo52RXYNnvQ+2dNt293+o9GPh06pnqo5LXu69AzhTMGZT2dzz86dSz83cz7h/HhPTM/9CxEXbvUG9g5c9Ll4+ZL7pQt9Tn1nL9tdPnXF5srJq4yrndcsr3X0W/S3/2TxU/uA5UDHdavrXTesb3QPLh88M+QwdP6m681Lt7xuXbu94vbgcOjwnZHokdE77DtTd1PuvriXeW/h/sYH6AdFD6UeVjxSfNTws+7PbaOWo6fHXMf6Hwc/vj/OGn/2S8Yv7ycKnpCfVEyqTDZPmU2dmnafvvF05dOJZ+nPFmYKf5X+tfa5zvMffnP8rX82YnbiBf/Fp99LXsq/PPRq2aueuYC5R69TXy/MF72Rf3P4LeNt37vwd5MLWe+x7ys/6H7o/ujz8cGn1E+f/gUDmPP8usTo0wAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wIEQMpM4gtTWsAAAd9SURBVFjDnZddbBzVFcd/987Mzn7Mrje7trNxHD5CI0ETRMqOqVpDBRJp+xIeKKKoERIIISRK6AO8IpEHVImHClEJtUE8IKoS9QGRlgKlrRSRFBppEAKcREhAPhw7NsHr9X7N7Hzs7cPO1JMlhrQr/XV1Z+45//85e+aeewVX+HMcRwNuNU3zzkwmU9c0bbsQoiqE0JRS7SiKzgdB8Innee8qpd6ybXv1SvyKKyAuG4axv1AoPJLP57cahoEQG5tFUUSv1/Nd132t1+s9a9v2h/+XAMdxhKZpDxeLxV8Xi8WKlBKlIAwDTp8+zfz8PGtrLQAsq0CtVuPaa6/FsiyEECilcF1XtVqtV/r9/hO2bX91xQIcxxkzTfOVcrm8N5PJMBgMOHnyFIfffJ13PniHZX+ZMBtSKBaQUuJ5HnhQlVVmb5hl7x17mZmZwTRNBoMBrVbrQqfTubderx/7VgGO49Sy2ezfy+XyLikl58+f57cv/pY3TryBMZXhezt3s3VqK0bOwI1cBgwwpYmMJM1Gk7lP51g6s8Ts1CyP/vxRbrrpJoQQdLvdfqvV+kW9Xn9tQwFx5MfGxsq7hIAjR47w9ItPs1xaZvsN1zGwIs54Z+iIDmQAPTYcAAHogc7WzDTjjHPh9CLyouTxnzzOz+66B9PM0O32gk6nfVe9Xn/7awIcxxG6rh8eGxvbK4Tg8F8Oc+DVA3hTHuYWk1VzFUpAAcgBxtcF0Ad6QBty3RxmK0u0GPLY7GM8eN+DmKZJp9NZc123btv256RcIIR4OJfL7VVKceTIEQ68eoDVyVUYh95YDzYxFJAHsrEALQ4hEeDHAgrgrrm4wkX6kuf/9Twlq8Q9e+8hm82O+b7/suM4P7Jte6Aln5qu6382zWxufn6eJ3/zJIvVRdgCTAITQJWhiLFYSDHORj7OSBYwY2GJOAlKKIIw4MSnJ7h5y81MTm5GSnFVEASfHzx48GMJoJTabxhGJQh8fv/y7/gi+wWMs45KjE0xyt+ASgrV2H4ClowlXvrbSzSbTaSUCCGechxHao7jaEKIP+i6Xjp58iTP/fU53JoLtZHI01HnUlFnUvWgr0eOTNVHBIRwbv4cM1tm2LJ5CqVUVSn1bwncqpTaGgQBb//zbZpWcz3NCakVI0l5PpX63MizfGp9MeWnBL7l8+YHb9LrdeNNLbxXj6LoToBer8fRk0dR42pjsmwq6iTSpAj11Jw4ah9wY1+xKOe8Q7PZpFKpoJTaI8MwrEdRxNmzZ7kYXlwnShOaMWkmlXIjlfpkTL/PpOyz69k61znHSnOFIAgYDAbTMoqi7UEQsLCwgKu7lycxRqo7/T8n0FJI14RxqSiVUcxfnMf3fYIgQA/DsNrv+7TbbUI9XDccLajLkab30dF12gj09XHNXcPzPJRS6FEUaZ7nEkURCvX1TiFGiMQGLU2l3onLIGU7UANc10VKiYwPE2QyGXSlDwtqI6jUmICRubqMXXTpPG/mhwErhQTOh2FIsVikQGG4paYRjiDtUI2QJGuiy9gF69v1ZGmSMAwRQiB1Xf8kDEPK5TIVWQGPIfrxZ5Qg5eASx1GKMBHsp5pTP+XPg03GJiqFCmEYomlaV1qW9a5SCk3TuHHqRujEDSUNL4VRUaPzZJ0bI/HRHeKWq26h3+8TRRG6rr8npZRv5fN5PwxDdn9nN2P+GLSGLZU2Q0Gd2EHaaUKSHnsjhJ0UWkPccf0d+L7PYDCgVCq9Lm3bXrUs67UwDJmcnGSmOgNNhlhLIS2omxq7I/NOvC4mZI3/+qtP1KkVa4RhiGVZvUwmc0gCVKvVZ3O5nBoMBtx+4+1MB9PwFbACNIDVGImw1gZI3ifrGzFWwFwzuf8H99PtdomiiGq1etC27YYEsG37w1qt9koURRSLRe7edTdW04IvgYsMxSSCVlLCLofkfWKzPMQjP3wEPdQJw5BqtdoolUrPkGqaVCqVJzZv3nwhiiKu3nI1+767j8JKAW1Zg6V1R3zJurAEybPlFJZALknEBcEDux/g+ur1+L6PaZpMT0/vT47pl+xrx48fv3Vubu4fKysrplKKC40LHDpxiFahhTFh0M60GRQG33wm7ELOy5HpZAiWAx76/kPsKO/A8zwMw2DXrl0v7Nmz55cbbqzHjh27e25u7lCj0TAAwijk6OmjHL94nMnpSaxxi67o0lEdfOUzQGEInbzIU5QlonbE8vwS1+Su4T77PpSrCMMwIf/TxMTEPtu2w2+8mLz//vs/PXXq1KGFhYWx+MBKKEI+WvyIj7/8GF8PGB8fp1goIqXA9Twaqyu4bZedm3cyu32Wklai3W4DUCgU2Llz5wvVavVXafJvu5pdd+bMmZc/++yzWc/zhg1PSnK5HEIXNNwGvaAHArJGlkq+gmVYrK2t0e/3k5M227Zta+zYsWP/bbfd9sf/+XLqOI70PG/f2bNnn1pYWNjR6/Wu6CataRq1Wq23bdu2g+Pj489sdC+8ottxIkQp9ePFxcV7m83mnl6vN93tdvF9f9jTdZ1cLodlWd1CofDe1NTU67lc7pBt241v8/0fLROqDglVp4YAAAAASUVORK5CYII=";
var remove_img = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAABo6AAAaOgG4MgkwAAAAB3RJTUUH3AgSBikNXTI9xQAABK5JREFUaN7t2F2IXHcZx/HPMzM7m81usktC1JJELSSNWEEvOilSbNGLBuldfaFe9KZUrBdKLwIKCiJK9UpBqGClvQoFi60v6I2geOGF3dHYqqmGtKWGqmvK7izZNd3dmTmPF+fM7pZEyE52t6XMDw7nzGH+L9/ze57/GyONNNJII4000khvX7WHKDO7je3HdsLMlhU2kzuT+4I7cDMauJScxc9qPI1Oi3xLgLTRwlmix7HkU8GXY8y+xiRjB6hNlY0UK3QX6C2Xz8mTwWNBu8WVWZx8M0AGDbcZTx4oeLgx7pbpD7H/I3LiVpqHRH0vkfT/S/c1ufoSy7Ni8SyvL1gKztT4bosLNwITNwIxy2TwaMF9kzcZP/IFOdmisU+ooSv1hD76UiH0KJblystcekbMtWWD55OHTvLssDBxA2E1jh8U3D99WBz/HrWZsqNZyOgJBXpUILJPbNwzCzH/tLzwK8Z4AZ9ulffdAaly4vPJd6bfqXnihyIDqzL6pQPZIwYgxdUw68B7xMJP5Yu/FXiqxudaLA7y73rVGCa5exwveHhqxvjxr8pcwirRF4OOvgFikyvxRqDIvjxwmzj8H/75N59InsGPdtyRWSRfqdd889j9cvqkyF7pRG7qqGKTE90NkM3X5v+vdeSLvxbLS87X+ECrxN8ZRyryJr40fZTJI1gkeiJ75eikVpJaxEoF06xa6mOtcqhXxqeiBBqriYOH5ZXzTkin8MsdBUnujJp9+98jG12RndKN6Fedfx4vlaG2Pt1F1dIkprCngovKlRVcZmqxnE1XOL0bIJ8ZazCxH0tEV+Qq8fc6f66zltSvLqSLDhY2vUNkd/CYE0STXOWurfZrmNC6Y2ycZgqL0oqIPzX4+EN8+166a9dXUb3OxYucPi06HYiojMohcncYR95bq1FfQV/4IzrB+27hYx/dWmXnztFsrhsUZKMC2g1HGlEQS/gXXsPYpljZiorimqPoroDgUtF1U//f1OcGHxKXLzM3x9oWQmt+/iqYPjlMaA0zj/xivOaeYw25d60ccSOCo0c5dOhaX/n/tBwl9Pnzsttd78wFskPcvsW+DZMjP+8W7llZY2/VeGaKixfL5B1euUKsloj/2Grh2hAFflxguVyFZG7P7ixjUlyZkqvl70d3HASd5MnBxB1Vlg+z1ctBPL1b9G6TnaYo6AWP7yhItWjM4LHXWbpUrkoiy3dbgknV7PdhGXez1KezQPJIi4X2ToK0NkaIdnBmjpwvIdZhrted2Et+UsbdoluTr/xOFDwXPLGrW902x/FUlw+ewIGqrkHOXCt31gFvlh4Q8S66L8tz3xKrLNT5bKtcxu+OZjfut7f567Pkq+UaqagGgCwoqnt57ZHFMVk8qMifyO4ZxcKDirM1+Xvm23zxTTlF2XT48P6Cr+HeKRoHySlMTIraQRyWjgi3lgdDK3Wu/EF2fiM6f6FIz9X4xsCJre4Mt+U4aBPMTHIq+XqNE000J2RzhsY7hJlyxu4tsfqqWO1QdPWSR4InTlbzxrAQ235A1y4n2FMFp4O7sloADnKmypFXgu8Hj7c2FvVvnePS2SEdbRtppJFGGmmkkUZ62+p/v5QIkkqA6+0AAAAASUVORK5CYII=";
var remove_glow = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAABo6AAAaOgG4MgkwAAAAB3RJTUUH3AgSBioED8PWogAAElBJREFUaN6lmsuvbdl51X/jm3Ot/Tjn3Lq3Xn5QcdmSBZGCQhqmQSMOAYSUEBEgFo8GIpFA4g9IxxItKxLQoUGDSETQiwwNpPQSaKTc4KFYMgiwQ6TEclSSTbmqbt1b995zzt5rzfkNGnOdW9d5SBQsaWvvs7R19hzze40x5lJ+E/EdxIz0Orp56X6026P2Tx0Tq57slpKqZUKlqpdMaqcUp0tV1qgK96juFOHIcCkZshwWkgVAJiCQSCVGaULNqLsprdbC9KB2UO9k044ueve59ay1S3M6lJpufeRJCpJP4adXuPIdpBm1V6TrfhHl0TEuIhX1FOfeSyhqgRKpapca9AquiaqtSqeQTLaL5QIKSwUjmbCMAAKEHCgTDCS4Y5pEN2pI3Xi13WwXVrqDlqW0rtBFWfu0r2I6dK4z3EN+55RXLFmZUX9Fuq5X8fR8GfW8hmqPOlOWUC1LTMIF9aqISdJUUU0zpTVlj0lklVwtFaEiXIxlCBkZQFiywSaUhh6mA82ihWiG1bja2UxZyb6GUZQaciizR1vXlkvA9WWW/T5jvQ7eeezK6+hZv4in58uYjmvUeYmWtZp5Kmol1j710JTSVGjTpDKlNRvPCs+ZnpCr0SRUZRfbYbmgEEhOhHFiC6dEl5U2DdxsGvIisUIsklYHxURpSSFZa+9qc6yLTe+rMumXJygXF2nXqLx0P/ToGPU8QFT3GqJGuIpeA812zAm7bs1ePQvvJGYFU8hzOmZBFZ6MCxFFOGxHGkWMkKRxoixWN25CTVLLkmv2WEFLhM/qZTGuFmdQ2BHdqdK6SpeSSXGxEhU/66J9WKnL9VFHpUrt0XKqIabqqJFMBHOGdqR21Z6N9sg78A6xs7WTPGHmRHOIiijY1RA4YiQVDCgYOxNaSJ0tnUCL0Cq8YCaTZ1uTrSIoUpYklYkEzAER1evSfTqd0HqksjpKnKLOFFOniKjumrJrJ8dYPOxC3hvvLfbgPWhntJc9I3bCE9IkUZyuoAKEAI96N8KCBBrQDc14CWsBLzKL8WQxgc4yBVxMRoSVKkJQZMoarCvsbIiz67xfdc5ellW10Esoa4c5Hbvo2iH2KhyM9rYPlg6CPfYes0caINAOPAHVqCJCWEKyLYSRLZSgjt0QTdJie5V8RjqBJplJuCgUNsqUooiQEHKS7j2ZavV+7nk6r1GfrMtosZ6m6DFJOYfYtdCum/1U4wAc0hxNOQoOgh3iCOwT70PMhhkPICgKcsEEstDAYZOItN1BTdBsr7YX4CSYkCbbI0WhICJi1Jmx0p1myKg40otXryWp6VpKUkSWHkw4ZmAu4R3oAD7YPmIuBEeZg+EAHA172XujGTEbTSQ1lMVWjEL1KA2wRnAS3C2nzSJYJS3ANKLhCbYaSwshSTif11naJCXTPZKcskbPOqESVkW9ptpkYlfMLmBvsbc5Go62LySOiCPmaOsA7EF7wwyaxmI8easPjIxDwChTpfBYiNwQM7CKWEZauppRF5h4zgWQbTtEStERiZ0FdSI61aVW9WKXimIK9SmzzxZ7E3tbhwgdsC8QR6MLjUgckQ+2Dkiz8Iw9b7taNFE0I02IKBKj4t3lPGMWEpPgFVgsKqaCK1CMijSanMC2LcmMiZSyUqnu0puKe7d6zWTQDmmKjNn2DN5Z3ps8JDHqQhyFjxCXkvc2hwgOozaYjSc6k1fmZ28t9x7/+/OD299ux/auZzoq92i7z5fT1RfnD1/6qd2j6UGcCVXjGjAZJo26kFAgY2MGRXDKKamTak530Vvi3nt0HKkn//WVHyp4X6x9oiP4AvnC9hXiUnBh6wp0Zbb0MkfQwXgX8s6d3enbefn418+vfPDV0+teiHoJ82sQVyAgb2F9H9bHo+/e+/H6+OUv7d47/tj0tLwUJzpn8Bk4GW4F18ANcC301OaZ5WfAU5lnFtckN4luKdxU42KrGibbswozsMfajfaaR9DR5oA42D4IDpiDKnO/9uHhV8+fePhvzq/nB7m7/wW490V8+BE0vwblCDL0a1jfg/O34dnX4dFvtftv/5d276W/ND969RcO7xx/tD7Oa4cHbrzNHUQnWUGN9IpYHFptrSGvdaRnqWEXm9rMBJ5lZm3DDvuumMcQNAdCB5udqub+uF989yvXn3361vrg+Dp645fg4s/ieoUIYL0bfVAOML8BF5+E+38GXv2L+N1/R3z/N5ZXTv+rHT/15Yu3r35ifthv7uqCFINUItZBaVgMy9btJoWr7CJHraZW5ApMgaewZ9uT8Cxply8AGoXNjNjltQ/f/cr1Z5+8tT546dPo8/8cl/uIhvwI1Hhhho+XO2h7HV9Fb/4DfPky+r3/kPvv/dKzN3/o6qof/vT0iO4ZaNhN1oq0olwczKQm2bPkmdSUVkWqNXAlXSUqyopi0miLO6Mp8DYjmMEzZibZPfzq7SeevrU+eOl19Kd+GawNwLZQN9AdkBxA9AKY7b5e/WmIBf3u17z//r+4+fQbX7k6l/uRiFlSA0YDsub4aF0noaLIYlNt1xqRMQieq9A0SBvbTGBneQbNg6Z7tjydvp2XD//t+fXjFfr8P8J+yuCpL+76iyBeiIr+QHTc4eUv4DfeQd/9T+2lJ795fvnBX98vSH0kp2ebGWkmGS1eTCnmUExh14SotiNFBdVNT0zGk7SB+UFgEzB9+OvnV/K93L3x96AE8vt/YLf7BmCLBOtHQF4E9ML39doP4w/fRu/9q9tP3v+Z3cOY1cZwpUqabCZro0CogouggCJEqdldLG0EzUW4SBRJZQwoVVJ17ISKF+YPvnp6/f5n4OINzGOktqWSh6TFwGPgtIGZx8/TgWWLUPuojtxhCvTKZ+Dt3/HuydfWB/f/yv7kRsVMtmsExXa1VSRX2SFULEqCalHIRAQuDocdRXZ1+o7FlhDFUFQpz7623PNC3PssrusP1gWPgf8OfBs4b4A2gkQFLoDLQWyYN4HSQSfgCVw+Hrff/9XT6w9+bv+un3kjjmNThzZxRSqZGqMDR6KoKEK2bMt4KLthFRREIBejsInYKT78jeVBDTjcQzwFrWOM6XcK/I8yGmThBy9v6fUI+OCFe4C8Psd7AHbAk2+2Y0xW4rEOO4yLrEDEUMxRwGENhlwta8hSAoUGN4sNjEMoMCNsFd18a72YDzC/kD76bxV+6h/CP/kbsC78X12lwNtvwy/+Inr06Hng5gFRw4VRGLb1SVviBiiGRhsMTEZV/mhzsCShTdFJljQSQNZQCO1dT/sjlNOW898AHgl++E/CX/hJPtb1rW/BPD8P0JaBGnKSeC4sdbccS8OLGfQeCRsYE10y2mpUdzuzLZ8cqIfwtqAz/n4KfA94b+tlzxPkY1yZf+RtvZiT8h0H3u4bNLgxucVIVi3GElbgnowYDPfJm4zYNmbYU+UerZ+Y+v+G8s4Lv/7kCbzzDiwfI7UePvxDYPpH0fGdjvFYiT0+INka/ti4YbmO3Ln7ku0h57z9v5TJ0VhtN3n3+Xrq32hT+z7MbfvR1uBXfgV+7df+2F3+w9uuAfrx4x+IZQNve25kj6zesJi0xkLDsu/yyqIOySmnSQ35OTxVkUhpO7ESlLnaVz8+f/juN9rVaYHjlga20dtvj+L9/7hOo2urvqrFqfT2u8N5cWp87tgJSpKt35Kx2Wbbl9QDukJNoSbcEV2igdNn8qWf3j3qwLMtRf0DOf3/fukCbi7xCXjw13Yf9JMNGotzpp4THXUp0qJbpKRepAz7TkK6S0qhJtMxHauRammn5Yad0wPO935ievxo7KD1g2PhY12+q+zPQPsCfjQhB371b+3f89mdQd03DqAOTkzadJwZUg+i23YkdEItcMduCT2tZqsZNYmGWJBW0EqJ9eWf2723HMh374rnLsU+JgjN4D8H+svwtMMHj+Dlv717t7yiM6bbNNsN7t61IK/glklP3K00kIGiY3VQs92MV8vNsCAW41ViFRpGgVmPPzY9fenPz4++Dzz8qO/zcaKjI/hLA8QS+Pf/I5o/G6eXv7R/aLN6RGIFrZIXxCoxIiSvZjA8kw05Q12d3IAMGtckFolF9urhxy4yC/IS8lruxenVn9+/c3hTt78H/uDO130BkP+YKBjw58BfBv0kLGf82/8S9Uv1135+/87uzXgWikVoCbxKXiytIyu8WFpwrBFeAzUoDUcLq7ckm8kV5SJpwVpIL+CzdNdMfMZDZtJ9Pv7o9PhTX758+/CGzr8LfBe0/BHrf774PfB54O+D/hn0z+FHv4W/9Y9Ru1R/7e/u37n/V/fvjyxg9WBtZ8wZc3JyTmvBXiSvltaGuqxepFbD7qHoNi1FC2kRXowXpNPQJZqwK7hKFIzymrj3xflh+adX/fu/fPPp7/7n9tKHiV7ZCO7hAvQK6E8AbwA/AnwOTgVuvoYf/Sb64H/C/GacPvEL+3fu/+z+PWBxakGcBGdvHVn22ehsc5a8AOMsRSzgJtN18/VX3wx5n/Khw0WRLwQXia6QroBL2VfeSLjko80Rc0Daq6q29/P45K3zy+/969tPrt/zbgZ2B5jv4/o64v7mIjzF57fR6X2w8Mt/Z/fuy1/aP9x9Jp4RnLEWrJPlW8GNhyX0TPiZracWT4WfCT8FXQPXCt0GvtHt1197I8mdox9UdPDqC6SjIi7BVzaXwpfgS6OLULlI8oB9kLTXnedrz149PXlrffD+r96+fvvNfnxulL6QYtNrWu7/7O6DV//m/r3yapxtr+FYLFaLE/ZpKBRfG18LPQvpmTOvLT11+Jms6950HeKmhG8UOtVONtmlUNYQdRHnTQadY7jhZWj6564+MrlRmfRoDjtLPSa1+z+zOz340u7dqNtBwqB1gzJJpjnzbPu8zapxhrgYFpnTMOh8q2HM3Qhu3Dm5cCt8G8kJ+czEucDSe7a20Kt2dFa6s6/NMXRwqERsQgYK6buNxba582KhC6+2OmKY0GdVLy6poWHSEGiwWKVt5TgjcTNumFXBSnI2nCVuQ77FurF1jbhR8Xi3TzJnm3ONXJrKmoqm6K2K3jNogJwUycMNR2U7oAk0XPE7Q3kzArukhrWzaYLJwxSYgIIpRpL8XB7gwZsMg3JYDVhtlk0cn4FboduEG8QN6MbiVnAr6zQagZdMVhdWKVoRvfrcei+lTaVGpNZGD5lwR7YVMc4n7qz9zSLv29BatQ0syZPN7OHGlOenAJJSg3VvH9N2erMgJC3GK+Ik6ww62dxmcorCteXbTG6q4tZwq+CMfFpbrjVypatFV69Za09CGVKUVN6GqqRSoEcnBM4RihBJ0JxsA9QN5Rmzw5qQZ0QRrgy9HXeaTM/tdXJMaN+dIa4Si/N5ez0RvpU4WboVvpV8a5dbo3PPPIPXKXzONdpUepuuslVpyotoPdWjqawlumyx3m0gUm5CTaG0lCa77VWwOjUrPM44thMnQ8EKyyOe+XxSvuB2KTcDbhVaLC3jOJqTrfNWD7cQJ/DtqJ88kzo3xxKRPV27a+8KenXMOR1Sbe1tcacgOYBiiXCOZEqJ9J3ZOZys1dZiNj/YnoxqiGKzHYZup1b6SPXdWXS+O+gRzdaypeeSOaa5xEkeB6SKOLf0mcyzHMtescq5Bn2tqbbe7lxVqpl2PZfTeKKASXMdSjTXcHNAZFqZlnpYDbkjrbYWmdlWFUzbYxxVUIbkIWxE2RSfseyUlEn2QQC1Aqs0aEngszOWqF5sn0UuKE7Q12Yve+W6U670tiI3ec7rLFmPsSTXu+A6M5MeFysR1WUNeu9kAOGh0JLuVHPQDPM4Rs4ZqdpMpAqpsjlb4/hMiITQXcvenkNBOTQPzeSa0iqxRow0y2ApeM30srZcp+AcUbp8B2Lq1Joc9ul6yoreT/f7lMMFl7cQFa/n7nWFqVZ7TVvKUmp3GXqFVAtYBRVpSruiqBEU2SVHRAKQ4iNTBuwckclA3XK33CKiOdUNS+IVaw3n2hSrC2uNXL1G6+49yFWqzXcg4sbHmw+zfmddOT577E9cnbNcJDftwO1JzO7sJ+eiMKFkyi6y9x5d0AKvhiKP2SFcxtkf46Ga5xHZytzDUMpxhJOWurWd7qJWGM+npGhNrNGiOdQkN/fSeultqu6Z0a495cUGwqfHOb3XXc8Nc7XCtNqGx/0SsWPWrU/qscZEnTOpWXrTEP7Fq9WLrOosNQalCZtiUA5AsblPjMfM7hCRFiY2g8NKcsyUgG65Ee69lR60FnJXj66rbHPU/ux29pOM7PWUx5sPsz7s9gn/H47+ChCYwenhAAAAAElFTkSuQmCC";

var STrChOTokenText = {    20060: 'LII', 20059: 'LI',20058: 'L', 20057: 'XLIX', 20056: 'XLVIII',  20055: 'XLVII', 20054: 'XLVI',20053: 'XLV', 20052: 'XLIV',20051: 'XLIII',
                           20050: 'XLII',20049: 'XLI', 20048: 'XL', 20047: 'XXXIX', 20046: 'XXXVIII', 20045: 'XXXVII',20044: 'XXXVI', 20043: 'XXXV', 20042: 'XXXIV',20041: 'XXXIII',
                           20040: 'XXXII', 20039: 'XXXI', 20038: 'XXX',20037: 'XXIX', 20036: 'XXVIII', 20035: 'XXVII', 20034: 'XXVI',20033: 'XXV',20032: 'XXIV', 20031: 'XXIII',
                           20030: 'XXII',20029: 'XXI',20028: 'XX',20027: 'XIX',20026: 'XVIII',20025: 'XVII',20024: 'XVI',20023: 'XV',20021: 'XIV',20020: 'XIII', 20018: 'XII',20017: 'XI',
                           20016: 'X',20015: 'IX',20014: 'VII',20013: 'V',  20012: 'III'
}

var logValues = { SUCCESS: 0, ACTION: 1, SALVAGE: 2, MAXLOGS: 3 };

var STrChOFactions = ['briton', 'fey', 'druid'];

var STrChOJewelQualities = ['cracked', 'flawed', 'cloudy', 'subdued', 'bright'];

var throneCardTypes = ['chair', 'advisor', 'window', 'banner', 'table', 'trophy', 'candelabrum', 'hero', 'statue', 'pet', 'tapestry', 'pillar'];

var throneCardQualities = ['simple', 'common', 'uncommon', 'rare', 'epic', 'wondrous', 'miraculous'];
var champCardQualities = ['simple', 'common', 'uncommon', 'rare', 'epic', 'wondrous', 'unique'];

var champItemTypes = {'weapon': 1, 'chest': 2, 'helm':3, 'boots':4, 'shield': 5, 'ring': 6, 'pendant': 8, 'cloak': 9};
var champItemUniqueNames = {1: 'weapon', 2: 'chestArmor', 3: 'helm', 4: 'boots', 5: 'shield', 6: 'ring', 8: 'pendant', 9: 'cloak'};
var champItemNames = {1: 'weapon', 2: 'chest', 3: 'helm', 4: 'boots', 5: 'shield', 6: 'ring', 8: 'pendant', 9: 'cloak'};

var STrChORing1 = 6;
var STrChORing2 = 7;

var champTiers = CM.WorldSettings.getSettingAsObject("CE_EFFECTS_TIERS")

var champItemEffects = [201,202,203,204,205,206,207,208,209,1,2,3,4,5,6,7,17,18,19,20,21,22,23,24,26,27,29,31,32,34,35,36,37,39,40,41,44,45,46,47,50,51,52,53,56,57,58,61,62,125,126,127,128,129,130,131,132,133,134,113,114,115,116,117,118,119];

var champEffects = [];
for (var efx = 0; efx < champItemEffects.length; efx++ ) {
    var champEffectName = uW.g_js_strings.effects["name_" + champItemEffects[efx]];
    champEffectName = champEffectName.split(" Debuff")[0];
    if  (champEffects.indexOf(champEffectName) < 0) champEffects.push(champEffectName);
}

var STrChOQualityCount = 6;
var STrChOThroneDisplayTimer = null;
var STrChOMaxThroneQuality = 0;
var STrChOMaxThroneLevel = 0;
var STrChOMaxChampLevel = 0;
var STrChOMaxChampQuality = 0;
var STrChOMaxChampions = 0;
var STrChOMaxPresets = 28;
var STrChOMaxInventoryRows = 0;
var STrChOMaxThroneCards = 0;

var STrChOChampStatsGrid =  {
    "weapon" :     {1: {201:1,202:0,203:0,204:0,205:0,206:0,207:0,208:0,209:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    2: {201:0,202:0,203:0,204:0,205:0,206:0,207:0,208:0,209:0,1:1,2:0,3:0,4:1,5:1,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:1,18:1,19:1,20:1,21:1,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    3: {201:0,202:1,203:0,204:1,205:1,206:1,207:1,208:1,209:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    4: {201:0,202:0,203:0,204:0,205:0,206:0,207:0,208:0,209:0,1:1,2:0,3:0,4:1,5:1,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:1,18:1,19:1,20:1,21:1,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    5: {201:0,202:1,203:0,204:1,205:1,206:1,207:1,208:1,209:0,1:1,2:0,3:0,4:1,5:1,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:1,18:1,19:1,20:1,21:1,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0}},
    "chest" :      {1: {201:0,202:0,203:0,204:0,205:0,206:0,207:0,208:0,209:0,1:1,2:1,3:1,4:1,5:1,6:1,7:1,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:1,20:1,21:0,22:1,23:1,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    2: {201:0,202:0,203:1,204:1,205:1,206:1,207:1,208:1,209:1,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    3: {201:0,202:0,203:0,204:0,205:0,206:0,207:0,208:0,209:0,1:1,2:1,3:1,4:1,5:1,6:1,7:1,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:1,20:1,21:0,22:1,23:1,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    4: {201:0,202:0,203:1,204:1,205:1,206:1,207:1,208:1,209:1,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    5: {201:0,202:0,203:1,204:1,205:1,206:1,207:1,208:1,209:1,1:1,2:1,3:1,4:1,5:1,6:1,7:1,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:1,20:1,21:0,22:1,23:1,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0}},
    "helm" :       {1: {201:0,202:0,203:0,204:0,205:0,206:0,207:0,208:0,209:0,1:1,2:1,3:1,4:0,5:0,6:1,7:1,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:1,18:1,19:1,20:1,21:0,22:1,23:1,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    2: {201:0,202:1,203:1,204:1,205:1,206:1,207:1,208:1,209:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    3: {201:0,202:0,203:0,204:0,205:0,206:0,207:0,208:0,209:0,1:1,2:1,3:1,4:1,5:1,6:1,7:1,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:1,20:1,21:1,22:1,23:1,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    4: {201:0,202:0,203:1,204:1,205:1,206:1,207:1,208:1,209:1,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    5: {201:0,202:1,203:1,204:0,205:1,206:1,207:1,208:1,209:1,1:1,2:1,3:1,4:1,5:0,6:0,7:1,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:1,18:1,19:1,20:1,21:1,22:1,23:1,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0}},
    "boots" :      {1: {201:0,202:0,203:0,204:0,205:0,206:0,207:0,208:0,209:0,1:1,2:1,3:1,4:1,5:0,6:1,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    2: {201:0,202:1,203:1,204:1,205:1,206:0,207:1,208:1,209:1,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    3: {201:0,202:0,203:0,204:0,205:0,206:0,207:0,208:0,209:0,1:1,2:1,3:1,4:1,5:0,6:1,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    4: {201:0,202:1,203:1,204:1,205:1,206:1,207:1,208:1,209:1,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    5: {201:0,202:1,203:1,204:1,205:0,206:1,207:1,208:1,209:1,1:1,2:1,3:1,4:1,5:0,6:1,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:1,18:1,19:1,20:1,21:0,22:1,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0}},
    "shield" :     {1: {201:0,202:1,203:1,204:1,205:1,206:1,207:1,208:1,209:1,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    2: {201:0,202:0,203:0,204:0,205:0,206:0,207:0,208:0,209:0,1:1,2:1,3:1,4:1,5:1,6:1,7:1,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:1,18:1,19:1,20:1,21:1,22:1,23:1,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    3: {201:0,202:1,203:1,204:1,205:1,206:1,207:1,208:1,209:1,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    4: {201:0,202:0,203:0,204:0,205:0,206:0,207:0,208:0,209:0,1:1,2:1,3:1,4:1,5:1,6:1,7:1,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:1,18:1,19:1,20:1,21:1,22:1,23:1,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    5: {201:0,202:1,203:1,204:1,205:1,206:1,207:1,208:1,209:1,1:1,2:1,3:1,4:1,5:1,6:1,7:1,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:1,18:1,19:1,20:1,21:1,22:1,23:1,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0}},
    "ring"  :      {1: {201:0,202:0,203:0,204:0,205:0,206:0,207:0,208:0,209:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    2: {201:0,202:0,203:0,204:0,205:0,206:0,207:0,208:0,209:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    3: {201:0,202:0,203:0,204:0,205:0,206:0,207:0,208:0,209:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    4: {201:0,202:0,203:0,204:0,205:0,206:0,207:0,208:0,209:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    5: {201:0,202:0,203:0,204:0,205:0,206:0,207:0,208:0,209:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0}},
    "pendant" :    {1: {201:0,202:0,203:0,204:0,205:0,206:0,207:0,208:0,209:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    2: {201:0,202:0,203:0,204:0,205:0,206:0,207:0,208:0,209:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    3: {201:0,202:0,203:0,204:0,205:0,206:0,207:0,208:0,209:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    4: {201:0,202:0,203:0,204:0,205:0,206:0,207:0,208:0,209:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    5: {201:0,202:0,203:0,204:0,205:0,206:0,207:0,208:0,209:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0}},
    "cloak" :      {1: {201:0,202:1,203:0,204:0,205:1,206:1,207:1,208:1,209:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    2: {201:0,202:0,203:0,204:0,205:0,206:0,207:0,208:0,209:0,1:0,2:0,3:1,4:0,5:0,6:0,7:1,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:1,25:0,26:1,27:1,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:1,45:0,46:1,47:1,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    3: {201:0,202:0,203:0,204:0,205:0,206:0,207:0,208:0,209:0,1:0,2:0,3:1,4:1,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:1,18:0,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:1,35:0,36:1,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:1,57:0,58:0,59:0,60:0,61:0,62:1,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:1,127:0,128:0,129:0,130:1,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    4: {201:0,202:1,203:1,204:1,205:1,206:1,207:1,208:1,209:1,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    5: {201:0,202:1,203:1,204:1,205:1,206:1,207:1,208:0,209:1,1:0,2:0,3:0,4:0,5:0,6:0,7:1,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:1,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:1,35:1,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:1,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:1,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:1,126:0,127:0,128:0,129:0,130:0,131:1,132:0,133:1,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0}}}


var STrChOThroneStatsGrid = {
    "chair" :      {1: {1:1,2:1,3:1,4:1,5:0,6:1,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:1,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    2: {1:1,2:1,3:1,4:1,5:0,6:1,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:1,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:1,114:1,115:1,116:1,117:0,118:1,119:1,120:1,121:1,122:1,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    3: {1:1,2:1,3:1,4:1,5:1,6:1,7:1,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:1,67:1,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:1,78:1,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:1,94:0,95:1,96:0,97:0,98:0,99:1,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    4: {1:1,2:1,3:1,4:1,5:1,6:1,7:1,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:1,67:1,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:1,78:1,79:1,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:1,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:1,114:1,115:1,116:1,117:1,118:0,119:1,120:1,121:0,122:1,123:1,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    5: {1:1,2:1,3:1,4:1,5:1,6:1,7:1,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:1,67:1,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:1,78:0,79:1,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:1,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0}},
    "table" :      {1: {1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:1,18:1,19:1,20:1,21:0,22:1,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:1,83:1,84:1,85:1,86:1,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:1,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    2: {1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:1,9:1,10:1,11:1,12:0,13:0,14:0,15:0,16:0,17:1,18:1,19:1,20:1,21:0,22:1,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:1,82:0,83:0,84:0,85:1,86:0,87:0,88:0,89:1,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:1,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    3: {1:0,2:0,3:0,4:0,5:1,6:0,7:1,8:1,9:1,10:1,11:1,12:0,13:0,14:0,15:0,16:0,17:1,18:1,19:1,20:1,21:1,22:1,23:1,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:1,82:0,83:0,84:0,85:0,86:0,87:1,88:1,89:0,90:1,91:1,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:1,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    4: {1:1,2:1,3:1,4:1,5:1,6:1,7:1,8:1,9:1,10:1,11:1,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:1,22:0,23:1,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:1,82:0,83:0,84:0,85:0,86:0,87:0,88:1,89:0,90:1,91:1,92:1,93:1,94:0,95:0,96:0,97:0,98:0,99:0,100:1,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    5: {1:1,2:1,3:1,4:1,5:0,6:1,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:1,22:0,23:1,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:1,80:0,81:1,82:0,83:0,84:0,85:0,86:0,87:0,88:1,89:0,90:1,91:1,92:1,93:1,94:0,95:0,96:0,97:0,98:0,99:0,100:1,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0}},
    "window" :     {1: {1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:1,17:1,18:1,19:1,20:1,21:0,22:1,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:1,83:1,84:1,85:1,86:1,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:1,102:1,103:1,104:1,105:1,106:1,107:1,108:1,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    2: {1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:1,11:0,12:0,13:0,14:1,15:0,16:1,17:1,18:1,19:1,20:1,21:0,22:1,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:1,83:1,84:1,85:1,86:1,87:0,88:0,89:1,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:1,102:1,103:1,104:1,105:1,106:1,107:1,108:1,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    3: {1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:1,11:0,12:0,13:1,14:1,15:1,16:1,17:1,18:1,19:1,20:1,21:1,22:1,23:1,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:1,83:1,84:1,85:1,86:1,87:1,88:1,89:1,90:1,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:1,102:1,103:1,104:1,105:1,106:1,107:1,108:1,109:0,110:0,111:0,112:0,113:1,114:0,115:1,116:0,117:0,118:0,119:0,120:1,121:0,122:1,123:1,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    4: {1:0,2:0,3:0,4:0,5:0,6:0,7:1,8:0,9:0,10:1,11:0,12:0,13:1,14:1,15:1,16:1,17:1,18:1,19:1,20:1,21:1,22:1,23:1,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:1,83:1,84:1,85:1,86:1,87:1,88:1,89:1,90:1,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:1,102:1,103:1,104:1,105:1,106:1,107:1,108:1,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    5: {1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:1,11:0,12:0,13:1,14:1,15:1,16:1,17:1,18:1,19:1,20:1,21:1,22:1,23:1,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:1,83:0,84:0,85:1,86:1,87:1,88:1,89:1,90:1,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:1,102:1,103:1,104:1,105:1,106:1,107:1,108:1,109:0,110:0,111:0,112:0,113:0,114:1,115:0,116:1,117:1,118:0,119:1,120:0,121:1,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0}},
    "banner" :     {1: {1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:1,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:1,25:1,26:1,27:1,28:0,29:1,30:1,31:1,32:1,33:0,34:1,35:1,36:1,37:0,38:0,39:1,40:1,41:1,42:0,43:0,44:1,45:1,46:1,47:1,48:1,49:0,50:1,51:1,52:1,53:1,54:1,55:0,56:1,57:1,58:0,59:1,60:0,61:1,62:1,63:0,64:1,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    2: {1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:1,12:1,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:1,25:1,26:1,27:1,28:0,29:1,30:1,31:1,32:1,33:0,34:1,35:1,36:1,37:0,38:0,39:1,40:1,41:1,42:0,43:0,44:1,45:1,46:1,47:1,48:1,49:0,50:1,51:1,52:1,53:1,54:1,55:0,56:1,57:1,58:0,59:1,60:0,61:1,62:1,63:0,64:1,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    3: {1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:1,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:1,25:1,26:1,27:1,28:1,29:1,30:1,31:1,32:1,33:1,34:1,35:1,36:1,37:1,38:0,39:1,40:1,41:1,42:1,43:1,44:1,45:1,46:1,47:1,48:1,49:1,50:1,51:1,52:1,53:1,54:1,55:1,56:1,57:1,58:0,59:1,60:1,61:1,62:1,63:0,64:1,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    4: {1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:1,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:1,25:1,26:1,27:1,28:1,29:1,30:1,31:1,32:1,33:1,34:1,35:1,36:1,37:0,38:1,39:1,40:1,41:1,42:1,43:0,44:1,45:1,46:1,47:1,48:1,49:1,50:1,51:1,52:1,53:1,54:1,55:1,56:1,57:1,58:1,59:1,60:1,61:1,62:1,63:1,64:1,65:1,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    5: {1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:1,12:1,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:1,25:1,26:1,27:1,28:1,29:1,30:1,31:1,32:1,33:1,34:1,35:1,36:1,37:0,38:1,39:1,40:1,41:1,42:1,43:0,44:1,45:1,46:1,47:1,48:1,49:1,50:1,51:1,52:1,53:1,54:1,55:1,56:1,57:1,58:1,59:1,60:1,61:1,62:1,63:1,64:1,65:1,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0}},
    "trophy" :     {1: {1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:1,17:1,18:1,19:1,20:1,21:0,22:1,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:1,77:0,78:0,79:0,80:0,81:0,82:1,83:1,84:1,85:1,86:1,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    2: {1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:1,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:1,25:1,26:1,27:1,28:0,29:1,30:1,31:1,32:1,33:0,34:1,35:1,36:1,37:0,38:0,39:1,40:1,41:1,42:0,43:0,44:1,45:1,46:1,47:1,48:1,49:0,50:1,51:1,52:1,53:0,54:1,55:0,56:1,57:1,58:0,59:1,60:0,61:0,62:1,63:0,64:1,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    3: {1:1,2:1,3:1,4:1,5:1,6:1,7:1,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:1,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:1,67:1,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:1,78:1,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:1,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    4: {1:1,2:1,3:1,4:1,5:1,6:1,7:1,8:1,9:1,10:1,11:1,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:1,22:0,23:1,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:1,78:0,79:1,80:0,81:1,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:1,91:1,92:0,93:1,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    5: {1:1,2:1,3:1,4:1,5:1,6:1,7:1,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:1,67:1,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:1,78:0,79:1,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0}},
    "candelabrum" :{1: {1:1,2:1,3:0,4:0,5:0,6:1,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:1,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:1,78:1,79:1,80:0,81:0,82:1,83:1,84:1,85:1,86:1,87:0,88:1,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    2: {1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:1,25:1,26:1,27:1,28:0,29:0,30:0,31:0,32:0,33:0,34:1,35:1,36:1,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:1,45:0,46:1,47:1,48:1,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:1,57:1,58:0,59:1,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:1,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    3: {1:0,2:0,3:1,4:1,5:1,6:1,7:0,8:0,9:0,10:1,11:1,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:1,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:1,67:1,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:1,78:0,79:1,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:1,92:1,93:1,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    4: {1:0,2:0,3:0,4:1,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:1,25:1,26:1,27:1,28:0,29:0,30:0,31:0,32:0,33:0,34:1,35:1,36:1,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:1,45:1,46:1,47:1,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:1,57:1,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:1,70:1,71:0,72:0,73:0,74:0,75:0,76:0,77:1,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:1,92:1,93:1,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    5: {1:1,2:1,3:1,4:1,5:1,6:1,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:1,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:1,78:0,79:1,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:1,92:1,93:1,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0}},
    "advisor" :    {1: {1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:1,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:1,83:1,84:1,85:1,86:1,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:1,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    2: {1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:1,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:1,71:1,72:0,73:0,74:0,75:0,76:0,77:1,78:0,79:0,80:0,81:0,82:1,83:1,84:1,85:1,86:1,87:0,88:0,89:1,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    3: {1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:1,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:1,70:1,71:1,72:0,73:0,74:0,75:0,76:0,77:1,78:1,79:0,80:1,81:0,82:1,83:1,84:1,85:1,86:1,87:1,88:0,89:1,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:1,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    4: {1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:1,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:1,70:1,71:1,72:0,73:0,74:0,75:0,76:0,77:1,78:1,79:0,80:1,81:0,82:1,83:1,84:1,85:1,86:1,87:1,88:0,89:1,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    5: {1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:1,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:1,70:1,71:1,72:0,73:0,74:0,75:0,76:0,77:1,78:1,79:0,80:1,81:0,82:1,83:0,84:0,85:1,86:1,87:1,88:0,89:1,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:1,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0}},
    "hero" :       {1: {1:0,2:1,3:1,4:1,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:1,17:1,18:1,19:0,20:0,21:0,22:0,23:1,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:1,33:0,34:0,35:0,36:0,37:0,38:0,39:1,40:0,41:0,42:1,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:1,62:0,63:1,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    2: {1:1,2:0,3:0,4:0,5:1,6:1,7:0,8:1,9:1,10:0,11:0,12:0,13:0,14:0,15:0,16:1,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:1,73:0,74:0,75:0,76:0,77:1,78:0,79:1,80:1,81:0,82:1,83:1,84:1,85:1,86:1,87:0,88:0,89:1,90:1,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    3: {1:0,2:1,3:0,4:1,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:1,16:1,17:1,18:1,19:0,20:0,21:1,22:0,23:1,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:1,33:0,34:0,35:0,36:0,37:0,38:0,39:1,40:0,41:0,42:1,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:1,62:0,63:1,64:0,65:0,66:0,67:0,68:1,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    4: {1:1,2:0,3:0,4:0,5:0,6:1,7:0,8:1,9:1,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:1,73:0,74:0,75:0,76:0,77:1,78:0,79:1,80:1,81:0,82:1,83:1,84:1,85:1,86:1,87:0,88:0,89:1,90:1,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    5: {1:0,2:1,3:1,4:1,5:1,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:1,17:1,18:1,19:0,20:0,21:1,22:0,23:1,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:1,33:0,34:0,35:0,36:0,37:0,38:0,39:1,40:1,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:1,62:0,63:0,64:0,65:1,66:0,67:0,68:1,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0}},
    "statue" :     {1: {1:0,2:1,3:0,4:1,5:0,6:0,7:0,8:1,9:0,10:1,11:1,12:0,13:0,14:0,15:0,16:0,17:1,18:0,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:1,39:0,40:1,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:1,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:1,84:0,85:0,86:0,87:0,88:0,89:1,90:0,91:0,92:0,93:1,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    2: {1:1,2:0,3:0,4:1,5:0,6:0,7:1,8:0,9:0,10:0,11:1,12:1,13:0,14:0,15:0,16:1,17:1,18:0,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:1,35:0,36:0,37:0,38:1,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:1,67:1,68:0,69:0,70:1,71:0,72:1,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:1,84:0,85:0,86:0,87:0,88:0,89:1,90:0,91:0,92:0,93:1,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    3: {1:0,2:1,3:0,4:1,5:0,6:0,7:1,8:1,9:1,10:1,11:1,12:1,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:1,35:0,36:0,37:1,38:0,39:0,40:1,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:1,82:1,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:1,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    4: {1:0,2:0,3:0,4:0,5:0,6:0,7:1,8:1,9:1,10:1,11:1,12:0,13:0,14:0,15:0,16:1,17:1,18:0,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:1,35:0,36:0,37:0,38:0,39:0,40:1,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:1,71:0,72:1,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:1,83:1,84:0,85:0,86:0,87:0,88:1,89:0,90:0,91:1,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    5: {1:1,2:1,3:0,4:0,5:1,6:0,7:0,8:0,9:1,10:0,11:0,12:1,13:0,14:0,15:0,16:1,17:1,18:1,19:0,20:0,21:1,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:1,67:1,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:1,82:1,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:1,92:0,93:1,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0}},
    "pet" :        {1: {1:1,2:0,3:0,4:0,5:1,6:0,7:1,8:0,9:1,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:1,19:1,20:0,21:0,22:0,23:0,24:1,25:0,26:0,27:0,28:0,29:0,30:1,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:1,45:0,46:1,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:1,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:1,78:0,79:1,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    2: {1:0,2:1,3:1,4:1,5:0,6:0,7:0,8:1,9:0,10:0,11:0,12:0,13:1,14:1,15:1,16:0,17:1,18:0,19:0,20:1,21:1,22:1,23:1,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:1,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    3: {1:1,2:0,3:0,4:0,5:1,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:1,19:0,20:0,21:0,22:0,23:0,24:1,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:1,35:0,36:0,37:0,38:0,39:0,40:1,41:0,42:0,43:0,44:1,45:0,46:0,47:1,48:0,49:0,50:0,51:1,52:0,53:0,54:0,55:0,56:1,57:0,58:1,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:1,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:1,78:0,79:1,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    4: {1:0,2:1,3:1,4:1,5:0,6:0,7:0,8:1,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:1,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:1,36:1,37:0,38:0,39:1,40:0,41:0,42:1,43:0,44:0,45:1,46:1,47:0,48:0,49:0,50:1,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:1,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:1,89:1,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    5: {1:1,2:1,3:1,4:1,5:1,6:1,7:1,8:1,9:1,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:1,18:1,19:1,20:0,21:1,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:1,36:0,37:1,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:1,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0}},
    "tapestry" :   {1: {1:1,2:1,3:1,4:0,5:1,6:0,7:0,8:1,9:0,10:1,11:0,12:0,13:0,14:0,15:0,16:1,17:1,18:1,19:1,20:0,21:0,22:1,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:1,46:0,47:0,48:0,49:0,50:0,51:0,52:1,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:1,67:0,68:0,69:1,70:0,71:0,72:1,73:0,74:0,75:0,76:0,77:0,78:1,79:0,80:1,81:1,82:0,83:0,84:0,85:0,86:0,87:0,88:1,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:1,114:1,115:1,116:1,117:0,118:1,119:1,120:1,121:1,122:1,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    2: {1:1,2:1,3:1,4:0,5:0,6:1,7:0,8:1,9:0,10:0,11:1,12:0,13:0,14:0,15:0,16:0,17:1,18:1,19:1,20:0,21:0,22:1,23:0,24:0,25:0,26:0,27:0,28:1,29:0,30:0,31:0,32:1,33:1,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:1,46:0,47:0,48:0,49:0,50:0,51:0,52:1,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:1,67:0,68:0,69:1,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:1,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:1,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    3: {1:1,2:1,3:1,4:1,5:0,6:0,7:0,8:1,9:0,10:1,11:0,12:0,13:0,14:0,15:0,16:1,17:1,18:1,19:1,20:0,21:1,22:1,23:0,24:0,25:0,26:0,27:1,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:1,52:0,53:1,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:1,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:1,79:0,80:0,81:1,82:0,83:0,84:0,85:0,86:0,87:0,88:1,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:1,114:1,115:1,116:1,117:0,118:1,119:1,120:1,121:1,122:1,123:1,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    4: {1:1,2:1,3:1,4:0,5:0,6:0,7:0,8:1,9:0,10:0,11:1,12:0,13:0,14:0,15:0,16:1,17:1,18:1,19:1,20:0,21:0,22:1,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:1,51:0,52:1,53:1,54:1,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:1,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:1,79:0,80:0,81:1,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    5: {1:1,2:1,3:0,4:1,5:0,6:0,7:0,8:1,9:0,10:0,11:0,12:1,13:0,14:0,15:0,16:0,17:1,18:1,19:1,20:0,21:0,22:1,23:0,24:0,25:0,26:0,27:1,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:1,51:1,52:0,53:0,54:1,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:1,73:0,74:0,75:0,76:0,77:0,78:0,79:1,80:1,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:1,89:1,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:1,114:1,115:1,116:1,117:1,118:0,119:1,120:1,121:1,122:1,123:1,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0}},
    "pillar" :     {1: {1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:1,18:1,19:1,20:1,21:1,22:1,23:1,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:1,114:1,115:1,116:1,117:0,118:0,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    2: {1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:1,25:1,26:1,27:1,28:1,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:1,57:1,58:1,59:1,60:1,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:1,120:1,121:1,122:1,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    3: {1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:1,18:1,19:1,20:1,21:1,22:1,23:1,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:1,114:1,115:1,116:1,117:0,118:1,119:0,120:0,121:0,122:0,123:0,124:0,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    4: {1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:1,35:1,36:1,37:1,38:1,39:0,40:0,41:0,42:0,43:0,44:1,45:1,46:1,47:1,48:1,49:1,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:0,114:0,115:0,116:0,117:0,118:0,119:1,120:1,121:1,122:1,123:0,124:1,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0},
                    5: {1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:0,16:0,17:1,18:1,19:1,20:1,21:1,22:1,23:1,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,48:0,49:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:0,64:0,65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,97:0,98:0,99:0,100:0,101:0,102:0,103:0,104:0,105:0,106:0,107:0,108:0,109:0,110:0,111:0,112:0,113:1,114:1,115:1,116:1,117:0,118:1,119:0,120:0,121:0,122:0,123:0,124:1,125:0,126:0,127:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:0,136:0,137:0,138:0,139:0,140:0,141:0,142:0,143:0,144:0}}}

var STrChOThroneUpgradeStats = {
    upgradeSuccess: {
        0: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0, 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0 , 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0, 46: 0, 47: 0, 48: 0, 49: 0, 50: 0, 51: 0, 52: 0, 52: 0, 54: 0, 55: 0 },
        1: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0, 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0 , 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0, 46: 0, 47: 0, 48: 0, 49: 0, 50: 0, 51: 0, 52: 0, 52: 0, 54: 0, 55: 0 },
        2: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0, 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0 , 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0, 46: 0, 47: 0, 48: 0, 49: 0, 50: 0, 51: 0, 52: 0, 52: 0, 54: 0, 55: 0 },
        3: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0, 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0 , 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0, 46: 0, 47: 0, 48: 0, 49: 0, 50: 0, 51: 0, 52: 0, 52: 0, 54: 0, 55: 0 },
        4: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0, 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0 , 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0, 46: 0, 47: 0, 48: 0, 49: 0, 50: 0, 51: 0, 52: 0, 52: 0, 54: 0, 55: 0 },
        5: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0, 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0 , 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0, 46: 0, 47: 0, 48: 0, 49: 0, 50: 0, 51: 0, 52: 0, 52: 0, 54: 0, 55: 0 },
        6: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0, 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0 , 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0, 46: 0, 47: 0, 48: 0, 49: 0, 50: 0, 51: 0, 52: 0, 52: 0, 54: 0, 55: 0 }
    },

    upgradeFailure: {
        0: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0, 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0 , 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0, 46: 0, 47: 0, 48: 0, 49: 0, 50: 0, 51: 0, 52: 0, 52: 0, 54: 0, 55: 0 },
        1: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0, 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0 , 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0, 46: 0, 47: 0, 48: 0, 49: 0, 50: 0, 51: 0, 52: 0, 52: 0, 54: 0, 55: 0 },
        2: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0, 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0 , 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0, 46: 0, 47: 0, 48: 0, 49: 0, 50: 0, 51: 0, 52: 0, 52: 0, 54: 0, 55: 0 },
        3: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0, 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0 , 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0, 46: 0, 47: 0, 48: 0, 49: 0, 50: 0, 51: 0, 52: 0, 52: 0, 54: 0, 55: 0 },
        4: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0, 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0 , 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0, 46: 0, 47: 0, 48: 0, 49: 0, 50: 0, 51: 0, 52: 0, 52: 0, 54: 0, 55: 0 },
        5: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0, 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0 , 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0, 46: 0, 47: 0, 48: 0, 49: 0, 50: 0, 51: 0, 52: 0, 52: 0, 54: 0, 55: 0 },
        6: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0, 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0 , 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0, 46: 0, 47: 0, 48: 0, 49: 0, 50: 0, 51: 0, 52: 0, 52: 0, 54: 0, 55: 0 }
    },

    enhanceSuccess: {
        0: { 0: 1, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0, 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0 , 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0, 46: 0, 47: 0, 48: 0, 49: 0, 50: 0, 51: 0, 52: 0, 52: 0, 54: 0, 55: 0 },
        1: { 0: 1, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0, 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0 , 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0, 46: 0, 47: 0, 48: 0, 49: 0, 50: 0, 51: 0, 52: 0, 52: 0, 54: 0, 55: 0 },
        2: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0, 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0 , 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0, 46: 0, 47: 0, 48: 0, 49: 0, 50: 0, 51: 0, 52: 0, 52: 0, 54: 0, 55: 0 },
        3: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0, 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0 , 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0, 46: 0, 47: 0, 48: 0, 49: 0, 50: 0, 51: 0, 52: 0, 52: 0, 54: 0, 55: 0 },
        4: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0, 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0 , 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0, 46: 0, 47: 0, 48: 0, 49: 0, 50: 0, 51: 0, 52: 0, 52: 0, 54: 0, 55: 0 },
        5: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0, 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0 , 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0, 46: 0, 47: 0, 48: 0, 49: 0, 50: 0, 51: 0, 52: 0, 52: 0, 54: 0, 55: 0 },
        6: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0, 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0 , 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0, 46: 0, 47: 0, 48: 0, 49: 0, 50: 0, 51: 0, 52: 0, 52: 0, 54: 0, 55: 0 }
    },

    enhanceFailure: {
        0: { 0: 1, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0, 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0 , 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0, 46: 0, 47: 0, 48: 0, 49: 0, 50: 0, 51: 0, 52: 0, 52: 0, 54: 0, 55: 0 },
        1: { 0: 1, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0, 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0 , 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0, 46: 0, 47: 0, 48: 0, 49: 0, 50: 0, 51: 0, 52: 0, 52: 0, 54: 0, 55: 0 },
        2: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0, 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0 , 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0, 46: 0, 47: 0, 48: 0, 49: 0, 50: 0, 51: 0, 52: 0, 52: 0, 54: 0, 55: 0 },
        3: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0, 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0 , 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0, 46: 0, 47: 0, 48: 0, 49: 0, 50: 0, 51: 0, 52: 0, 52: 0, 54: 0, 55: 0 },
        4: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0, 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0 , 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0, 46: 0, 47: 0, 48: 0, 49: 0, 50: 0, 51: 0, 52: 0, 52: 0, 54: 0, 55: 0 },
        5: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0, 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0 , 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0, 46: 0, 47: 0, 48: 0, 49: 0, 50: 0, 51: 0, 52: 0, 52: 0, 54: 0, 55: 0 },
        6: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0, 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0 , 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0, 46: 0, 47: 0, 48: 0, 49: 0, 50: 0, 51: 0, 52: 0, 52: 0, 54: 0, 55: 0 }
    }
};

var STrChOChampUpgradeStats = {
    upgradeSuccess: {
        0: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0 , 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0, 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0},
        1: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0 , 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0, 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0},
        2: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0 , 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0, 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0},
        3: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0 , 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0, 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0},
        4: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0 , 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0, 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0},
        5: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0 , 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0, 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0}
    },
    upgradeFailure: {
        0: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0 , 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0, 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0},
        1: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0 , 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0, 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0},
        2: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0 , 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0, 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0},
        3: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0 , 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0, 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0},
        4: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0 , 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0, 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0},
        5: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0 , 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0, 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0}
    },
    enhanceSuccess: {
        0: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0 , 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0, 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0},
        1: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0 , 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0, 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0},
        2: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0 , 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0, 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0},
        3: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0 , 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0, 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0},
        4: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0 , 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0, 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0},
        5: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0 , 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0, 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0}
    },
    enhanceFailure: {
        0: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0 , 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0, 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0},
        1: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0 , 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0, 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0},
        2: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0 , 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0, 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0},
        3: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0 , 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0, 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0},
        4: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0 , 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0, 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0},
        5: { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0 , 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, 30: 0, 31: 0, 32: 0, 33: 0, 34: 0, 35: 0, 36: 0, 37: 0, 38: 0, 39: 0, 40: 0, 41: 0, 42: 0, 43: 0, 44: 0, 45: 0}
    }
};

//add the new functions to the main window
contentEval(addWatchFunctions);

//add the new functions to this script
addWatchFunctions();

var STrChOThroneSorter = [];
var STrChOSwapTile = null;
var STrChOMassSalvage = [];

var STrChOGlobalOptions = {
    update: true,
    updateSite: "https://greasyfork.org/en/scripts/408041-spawn-trcho ",
    firstrun: true
};

var STrChOGeneralOptions = {
    xPos : 0,
    yPos : 30,
    hidden: true,
    disableAnim : true,
    draggableThroneItems: false,
    throneSorter: false,
    showJewels: true,
    whisperToMe: false,
    sendToInbox: false,
    retryInterval : 30,
    currentTab : null,
    usedAnyCity : true,
    usedCityNum : 0,
    salvageAnyCity : true,
    salvageCityNum : 0,
    safetyOn: false,
    safetyLimit: 100000,
    buffsOff: false,
    removeMastersTokens: false,
    removeOtherTokens: false,
    removeForgedTokens: false,
    removeOtherForgedTokens: false,
    useMastersTokens: false,
    useForgedTokens: false,
    multiUpgrade: false,
    noEquippedSalvage: false,
    noMassSalvage: false,
    noForcedSalvage: false,
    throneSalvageSafety: false,
    champSalvageSafety: false,
    throneSalvageSafetyNum: 40,
    champSalvageSafetyNum: 40,
    minStones: 100000,
    overflow : "order",
    maxStones : 16000000
};

var STrChOLogData = {
    maxEntries: 100,
    successLog: [],
    actionLog: [],
    salvageLog: []
};

var STrChOThroneQueueData = {
    list : [],
    oneItem : true,
    doingRepairs : false,
    index : 0,
    dataConverted : false
};

var STrChOChampQueueData = {
    list: [],
    oneItem: true,
    doingRepairs: false,
    index: 0,
    dataConverted: false
};

var STrChOThroneUpgradeData = {
    active : false,
    useLORB : false,
    useORB : false,
    useLPS : false,
    usePS : false,
    useLT : false,
    useLLT : false,
    useSH : false,
    useKH : false,
    useGH : false,
    useMH : false,
    useAH : false,
    useWH: false,
    useDH: false,
    useEH: false,
    useQuality : 5,
    useLevel : 6,
    useAutoTokens: false,
    useAutoTokensMin: 4,
    useAutoTokensMax: 21,
    item: 0,
    overrideSpeedUp: false,
    hourglassLevelSpecific: false,
    hourglassLevel: 0,
    hourglassQualitySpecific: false,
    hourglassQuality: 0,
    useSpeedUp: 0,
    enhanceAction: false,
    enhanceItem: 0,
    enhanceMax  : STrChOMaxThroneQuality,
    repairAll : false,
    effectSelected: "none",
    buffSelected: "both",
    sortInactive: true,
    ignoreBroken: false,
    newUpgradeState: 0
};

var STrChOChampUpgradeData = {
    active : false,
    useLOM : false,
    useGOM : false,
    useJT : false,
    useST : false,
    useET : false,
    useSH : false,
    useKH : false,
    useGH : false,
    useMH : false,
    useAH : false,
    useWH: false,
    useDH: false,
    useEH: false,
    useQuality : 1,
    useLevel : 1,
    useAutoTokens: false,
    useAutoTokensMin: 3,
    useAutoTokensMax: 14,
    item: 0,
    overrideSpeedUp: false,
    hourglassLevelSpecific: false,
    hourglassLevel: 0,
    hourglassQualitySpecific: false,
    hourglassQuality: 0,
    useSpeedUp: 0,
    enhanceAction: false,
    enhanceItem: 0,
    enhanceMax  : STrChOMaxChampQuality,
    repairAll : false,
    effectSelected: "none",
    buffSelected: "both",
    sortInactive: true,
    ignoreBroken: false,
    newUpgradeState: 0
};

var STrChOThroneSalvageData = {
    active : false,
    throneSaveNum : 40,
    minQuality    : 3,
    ruleSet       : [{"type":"any","faction":"any","conditions":[{"mustHave":"true","number":"2","effect":"Range","buffType":"e","slots":[true,true,true,true,true]}]},{"type":"any","faction":"any","conditions":[{"mustHave":"true","number":"2","effect":"Troop Training Speed","buffType":"e","slots":[true,true,true,true,true]}]},{"type":"banner","faction":"any","conditions":[{"mustHave":"true","number":"2","effect":"Siege Range","buffType":"e","slots":[true,true,true,true,true]}]}],
    numSalvagedItems : 0,
    numSalvagedItems2 : 0,
    numSalvaged   : {0: 0, 1: 0, 2:0, 3:0, 4:0, 5:0, 6:0},
    upgradeFirst  : false,
    upgradeFirstQual : 2,
    upgradedToDelete : [],
    upgradeManual : false,
    upgradeAutoFind : false
};

var STrChOChampSalvageData = {
    active : false,
    champSaveNum : 40,
    minQuality    : 3,
    ruleSet       : [],
    numSalvagedItems : 0,
    numSalvagedItems2 : 0,
    numSalvaged   : {0: 0, 1: 0, 2:0, 3:0, 4:0, 5:0, 6:0},
    upgradeAutoFind : false
};

var STrChOThroneRepairData = {
    active: false,
    useSH: false,
    useKH: false,
    useGH: false,
    useMH: false,
    useAH: false,
    useWH: false,
    useDH: false,
    useEH: false,
    overrideSpeedUp: false,
    hourglassLevelSpecific: false,
    hourglassLevel: 0,
    hourglassQualitySpecific: false,
    hourglassQuality: 0,
    useSpeedUp: 0,
    index: 0,
    items: []
};

var STrChOChampRepairData = {
    active: false,
    useSH: false,
    useKH: false,
    useGH: false,
    useMH: false,
    useAH: false,
    useWH: false,
    useDH: false,
    useEH: false,
    overrideSpeedUp: false,
    hourglassLevelSpecific: false,
    hourglassLevel: 0,
    hourglassQualitySpecific: false,
    hourglassQuality: 0,
    useSpeedUp: 0,
    index: 0,
    items: []
};

var STrChOThronePresetData = {
    items: [],
    presetNames: ["undefined", "undefined", "undefined", "undefined", "undefined", "undefined", "undefined", "undefined",
                  "undefined", "undefined", "undefined", "undefined", "undefined", "undefined", "undefined", "undefined",
                  "undefined", "undefined", "undefined", "undefined", "undefined", "undefined", "undefined", "undefined"],
    showThroneMight: true,
    showThroneName: true,
    presetColor: "#0000FF",
    tagColor: "#FFFFFF",
    activeColor: "#FFFF00",
    taggedItems: {},
    taggedItems01: {},
    taggedItems02: {},
    taggedItems03: {},
    taggedItems04: {},
    taggedItems05: {},
    taggedItems06: {},
    taggedItems07: {},
    taggedItems08: {},
    taggedItems09: {},
    taggedItems10: {},
    taggedItems11: {},
    taggedItems12: {},
    taggedItems13: {},
    taggedItems14: {},
    taggedItems15: {},
    taggedItems16: {},
    taggedItems17: {},
    taggedItems18: {},
    taggedItems19: {},
    taggedItems20: {},
    taggedItems21: {},
    taggedItems22: {},
    taggedItems23: {},
    taggedItems24: {},
    previewThrone: {}
};

var STrChOChampPresetData = {
    items: [],
    presetNames: ["undefined", "undefined", "undefined", "undefined"],
    showChampMight: true,
    showChampName: true,
    presetColor: "#0000FF",
    tagColor: "#FFFFFF",
    activeColor: "#FFFF00",
    taggedItems: {},
    taggedItems01: {},
    taggedItems02: {},
    taggedItems03: {},
    taggedItems04: {},
    previewChamp: [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ] //had to do array like this because of double ring
};

var STrChOJewelImages = {
                1: "http://i.imgur.com/SecBRT5.png",
                2: "http://i.imgur.com/dnrId1I.png",
                3: "http://i.imgur.com/fjgZUh9.png",
                4: "http://i.imgur.com/h7tMQaB.png",
                5: "http://i.imgur.com/BZSuCiN.png"

};


var HOURGLASSES_TIME = {
    minute1 : 60,
    minute15 : 900,
    hour1 : 3600,
    hour25 : 9000,
    hour8 : 28800,
    hour15: 54000,
    hour24: 86400,
    day25: 216000
};

var HOURGLASSES_TIME_MIN_THRESHOLD = {
    minute1 : 30, //30 seconds and up will use 1m speedup
    minute15 : 301, //5 minute 1 second and up will use 15m speedup
    hour1 : 2701, // 45 minutes 1 second and up will use 1hr speedup
    hour25 : 7201, // 2 hour 1 second and up will use 2.5hr speedup
    hour8 : 26101, // 7 hours 30 minutes 1 second and up will use 8hr speedup
    hour15: 50431, // 14 hours 30 minutes 1 second and up will use 15hr speedup
    hour24: 82831, // 23 hours 30 minutes 1 second and up will use 24hr speedup
    day25: 172800 //48 hours and up will use 2.5 day speedup
};

var STrChOHourGlassTDLabel = {
                    1: 'Time: 1 Min | Conditions: 30s+',
                    2: 'Time: 15 Min | Conditions: 5m & 1s+',
                    3: 'Time: 1 Hour | Conditions: 45m & 1s+',
                    4: 'Time: 2.5 Hours | Conditions: 2h & 1s+',
                    5: 'Time: 8 Hours | Conditions: 7h & 30m & 1s+',
                    6: 'Time: 15 Hours | Conditions: 14h & 30m & 1s+',
                    7: 'Time: 24 Hours | Conditions: 23h & 30m & 1s+',
                    8: 'Time: 2.5 Days | Conditions: 48h+'
};

var STrChOHourGlassName = {
                    1: "Squire's Hourglass",
                    2: "Knight's Hourglass",
                    3: "Guinevere's Hourglass",
                    4: "Morgana's Hourglass",
                    5: "Arthur's Hourglass",
                    6: "Merlin's Hourglass",
                    7: "Divine Hourglass",
                    8: "Epic Hourglass"
};

// initialise
LOADallData();

var STrChOWinManager = {
	wins : {},    // prefix : CPopup obj

	get : function (prefix){
		var t = STrChOWinManager;
		return t.wins[prefix];
	},

	add : function (prefix, pop){
		var t = STrChOWinManager;
		t.wins[prefix] = pop;
		if (uW.cpopupWins == null)
			uW.cpopupWins = {};
		uW.cpopupWins[prefix] = pop;
	},

	delete : function (prefix){
		var t = STrChOWinManager;
		delete t.wins[prefix];
		delete uW.cpopupWins[prefix];
	}
}

// creates a 'popup' div
// prefix must be a unique (short) name for the popup window
function STrChOPopup(prefix, x, y, enableDrag, onClose) {
	var pop = STrChOWinManager.get(prefix);
	if (pop) {
		pop.show(false);
		return pop;
	}
	this.BASE_ZINDEX = 111111;
	// protos ...
	this.show = show;
	this.toggleHide = toggleHide;
	this.getTopDiv = getTopDiv;
	this.getMainDiv = getMainDiv;
	this.getLayer = getLayer;
	this.setLayer = setLayer;
	this.setEnableDrag = setEnableDrag;
	this.getLocation = getLocation;
	this.setLocation = setLocation;
	this.focusMe = focusMe;
	this.unfocusMe = unfocusMe;
	this.centerMe = centerMe;
	this.destroy = destroy;
	// object vars ...
	this.div = document.createElement('div');
	this.prefix = prefix;
	this.onClose = onClose;
	var t = this;
	this.div.className = 'STrChOPopup ' + prefix + '_STrChOPopup';
	this.div.id = prefix + '_outer';
	this.div.style.background = "#fff";
	this.div.style.zIndex = this.BASE_ZINDEX // KOC modal is 100210 ?
	this.div.style.display = 'none';
	this.div.style.width = dlgWidth + 'px';
	this.div.style.height = dlgHeight + 'px';
	this.div.style.position = "absolute";
	this.div.style.top = y + 'px';
	this.div.style.left = x + 'px';
	topClass = 'STrChOPopupTop ' + prefix + '_STrChOPopupTop';
	var m = '';
    m += '<TABLE cellspacing=0 width=100% height=100%>';
    m += '<TR id="' + prefix + '_bar" class="' + topClass + '">';
    m += '<TD width=99% align=center><b>Spawn TrChO (Version ' + STrChOVersion + ')</b>';
    m += '<input type=file id=STrChOSettingsFile style="visibility:hidden; width: 0px; height: 0px;">';
    m += '</td>';
    m += '<TD id=' + prefix + '_X align=right valign=middle onmouseover="this.style.cursor=\'pointer\'" style="color:#fff; background:#000000; font-weight:bold; font-size:14px; padding:0px 5px;">X';
    m += '</td>';
    m += '</tr>';
    m += '<tr><td valign=top colspan=2><table cellspacing=0 cellpadding=0>';
    m += '<TR><TD valign=top colspan=2 id="'+ prefix +'_top"></td>';
    m += '<TD valign=top class="STrChOCPopMain ' + prefix + '_STrChOCPopMain" colspan=2 id="' + prefix + '_main"></td></tr>';

    m += '</table></td></tr>';

    m += '</table>';
	document.body.appendChild(this.div);
	this.div.innerHTML = m;
	document.getElementById(prefix + '_X').addEventListener('click', e_XClose, false);
	this.dragger = new CWinDrag(document.getElementById(prefix + '_bar'), this.div, enableDrag);
	this.div.addEventListener('mousedown', e_divClicked, false);
	STrChOWinManager.add(prefix, this);

	function e_divClicked() {
		t.focusMe();
	}

	function e_XClose() {
		t.show(false);
		if (t.onClose != null)
			t.onClose();
	}

	function focusMe() {
		t.setLayer(5);
		for (k in uW.cpopupWins) {
			if (k != t.prefix)
				uW.cpopupWins[k].unfocusMe();
		}
	}

	function unfocusMe() {
		t.setLayer(-5);
	}

	function getLocation() {
		return {
			x: parseInt(this.div.style.left),
			y: parseInt(this.div.style.top)
		};
	}

	function setLocation(loc) {
		t.div.style.left = loc.x + 'px';
		t.div.style.top = loc.y + 'px';
	}

	function destroy() {
		document.body.removeChild(t.div);
		STrChOWinManager.delete(t.prefix);
	}

	function centerMe(parent) {
		if (parent == null) {
			var coords = getClientCoords(document.body);
		} else
			var coords = getClientCoords(parent);
		var x = ((coords.width - parseInt(t.div.style.width)) / 2) + coords.x;
		var y = ((coords.height - parseInt(t.div.style.height)) / 2) + coords.y;
		if (x < 0)
			x = 0;
		if (y < 0)
			y = 0;
		t.div.style.left = x + 'px';
		t.div.style.top = y + 'px';
	}

	function setEnableDrag(tf) {
		t.dragger.setEnable(tf);
	}

	function setLayer(zi) {
		t.div.style.zIndex = '' + (this.BASE_ZINDEX + zi);
	}

	function getLayer() {
		return parseInt(t.div.style.zIndex) - this.BASE_ZINDEX;
	}

	function getTopDiv() {
		return document.getElementById(this.prefix + '_top');
	}

	function getMainDiv() {
		return document.getElementById(this.prefix + '_main');
	}

	function show(tf) {
		if (tf) {
			t.div.style.display = 'block';
			t.focusMe();
		} else {
			t.div.style.display = 'none';
		}
		return tf;
	}

	function toggleHide(t) {
		if (t.div.style.display == 'block') {
			return t.show(false);
		} else {
			return t.show(true);
		}
	}
}

function CWinDrag (clickableElement, movingDiv, enabled) {
	var t=this;
	this.setEnable = setEnable;
	this.setBoundRect = setBoundRect;
	this.lastX = null;
	this.lastY = null;
	this.enabled = true;
	this.moving = false;
	this.theDiv = movingDiv;
	this.body = document.body;
	this.ce = clickableElement;
	this.moveHandler = new CeventMove(this).handler;
	this.outHandler = new CeventOut(this).handler;
	this.upHandler = new CeventUp(this).handler;
	this.downHandler = new CeventDown(this).handler;
	this.clickableRect = null;
	this.boundRect = null;
	this.bounds = null;
	this.enabled = false;
	if (enabled == null)
		enabled = true;
	this.setEnable (enabled);

	function setBoundRect (b){    // this rect (client coords) will not go outside of current body
		this.boundRect = boundRect;
		this.bounds = null;
	}

	function setEnable (enable){
		if (enable == t.enabled)
			return;
		if (enable){
			clickableElement.addEventListener('mousedown',  t.downHandler, false);
			t.body.addEventListener('mouseup', t.upHandler, false);
		} else {
			clickableElement.removeEventListener('mousedown', t.downHandler, false);
			t.body.removeEventListener('mouseup', t.upHandler, false);
		}
		t.enabled = enable;
	}

	function CeventDown (that){
		this.handler = handler;
		var t = that;

		function handler (me){
			if (t.bounds == null){
				t.clickableRect = getClientCoords(clickableElement);
				t.bodyRect = getClientCoords(document.body);
				if (t.boundRect == null)
					t.boundRect = t.clickableRect;
				t.bounds = {top:10-t.clickableRect.height, bot:t.bodyRect.height-25, left:40-t.clickableRect.width, right:t.bodyRect.width-25};
			}
			if (me.button==0 && t.enabled){
				t.body.addEventListener('mousemove', t.moveHandler, true);
				t.body.addEventListener('mouseout', t.outHandler, true);
				t.lastX = me.clientX;
				t.lastY = me.clientY;
				t.moving = true;
			}
		}
	}

	function CeventUp  (that){
		this.handler = handler;
		var t = that;
		function handler (me){
			if (me.button==0 && t.moving) {
				_doneMoving(t);
            }
		}
	}

	function _doneMoving (t){
		t.body.removeEventListener('mousemove', t.moveHandler, true);
		t.body.removeEventListener('mouseout', t.outHandler, true);
		t.moving = false;
	}

	function CeventOut  (that){
		this.handler = handler;
		var t = that;

		function handler (me){
			if (me.button==0){
				t.moveHandler (me);
			}
		}
	}

	function CeventMove (that){
		this.handler = handler;
		var t = that;

		function handler (me){
			if (t.enabled && !t.wentOut){
				var newTop = parseInt(t.theDiv.style.top) + me.clientY - t.lastY;
				var newLeft = parseInt(t.theDiv.style.left) + me.clientX - t.lastX;
				if (newTop < t.bounds.top){     // if out-of-bounds...
					newTop = t.bounds.top;
					_doneMoving(t);
				} else if (newLeft < t.bounds.left){
					newLeft = t.bounds.left;
					_doneMoving(t);
				} else if (newLeft > t.bounds.right){
					newLeft = t.bounds.right;
					_doneMoving(t);
				} else if (newTop > t.bounds.bot){
					newTop = t.bounds.bot;
					_doneMoving(t);
				}
				t.theDiv.style.top = newTop + 'px';
				t.theDiv.style.left = newLeft + 'px';
				t.lastX = me.clientX;
				t.lastY = me.clientY;
			}
		}
	}
}

function getClientCoords(e) {
	if (e == null)
		return {
			x: null,
			y: null,
			width: null,
			height: null
		};
	var x = 0,
		y = 0;
	ret = {
		x: 0,
		y: 0,
		width: e.clientWidth,
		height: e.clientHeight
	};
	while (e.offsetParent != null) {
		ret.x += e.offsetLeft;
		ret.y += e.offsetTop;
		e = e.offsetParent;
	}
	return ret;
}

var tabManager = {
	tabList : {},           // {name, obj, div}
	currentTab : null,

	init : function (mainDiv){
		var t = tabManager;
		var sorter = [];
		for (k in Tabs){
			if (!Tabs[k].tabDisabled){
				t.tabList[k] = {};
				t.tabList[k].name = k;
				t.tabList[k].tabColor = Tabs[k].tabColor?Tabs[k].tabColor:'blue';
				t.tabList[k].obj = Tabs[k];
				if (Tabs[k].tabLabel != null)
					t.tabList[k].label = Tabs[k].tabLabel;
				else
					t.tabList[k].label = k;
				if (Tabs[k].tabOrder != null)
					sorter.push([Tabs[k].tabOrder, t.tabList[k]]);
				else
					sorter.push([1000, t.tabList[k]]);
				t.tabList[k].div = document.createElement('div');
			}
		}

		sorter.sort (function (a,b){return a[0]-b[0]});
		var m = '';

		m += '<ul class=STrChOULMenu>';
		for (var i=0; i<sorter.length; i++) {
			var color = sorter[i][1].tabColor;
            m += '<li><input type=button id=nttc'+ sorter[i][1].name +' class="STrChOMenuButton h20 '+color+'" style="width:'+dlgWidthMenu+'px;" value="' + sorter[i][1].label + '"></LI>';
		}
		m+='</UL>';

		mainPop.getTopDiv().innerHTML = m;

		var contentDiv = document.createElement('div');
		contentDiv.id = 'STrChOMain_content';
		mainDiv.appendChild(contentDiv);

		for (k in t.tabList) {
            if (t.tabList[k].name == STrChOGeneralOptions.currentTab) t.currentTab =t.tabList[k];
			document.getElementById('nttc'+ k).addEventListener('click', this.e_clickedTab, false);
			var div = t.tabList[k].div;
			div.style.display = 'none';
			div.style.height = '100%';
			contentDiv.appendChild(div);
			try {
				t.tabList[k].obj.init(div);
			} catch (e){
				div.innerHTML = "INIT ERROR: "+ e;
			}
		}

		if (t.currentTab == null) t.currentTab = sorter[0][1];
		t.currentTab.div.style.display = 'block';
        t.setTabStyle(t.currentTab, true);
	},

	hideTab : function (){
		var t = tabManager;
		t.currentTab.obj.hide();
        STrChOGeneralOptions.hidden = true;
        //STrChOGeneralOptions.currentTab = null;
        SAVESTrChOGeneralOptions();
	},

	showTab : function (){
		var t = tabManager;
		t.currentTab.obj.show();
        STrChOGeneralOptions.hidden = false;
        //STrChOGeneralOptions.currentTab = t.currentTab.name;
        SAVESTrChOGeneralOptions();
	},

	setTabStyle : function (Tab, selected){
		var e = document.getElementById ('nttc'+ Tab.name)
		var c = Tab.tabColor?Tab.tabColor:"gray";
		if (selected){
			e.className = 'STrChOMenuButton h20 gray';
		} else {
			e.className = 'STrChOMenuButton h20 '+c;
		}
	},

	e_clickedTab : function (e){
		var t = tabManager;
		mainPop.show (true);
		if (e.target.id)
			var newTab = t.tabList[e.target.id.substring(4)];
		else
			var newTab = t.tabList[e.target.parentNode.id.substring(4)];
		if (t.currentTab.name != newTab.name){
			t.setTabStyle (t.currentTab, false);
			t.setTabStyle (newTab, true);
			t.currentTab.obj.hide ();
			t.currentTab.div.style.display = 'none';
			t.currentTab = newTab;
            STrChOGeneralOptions.currentTab = newTab.name;
			newTab.div.style.display = 'block';
		}
		newTab.obj.show();
	},

}

//TODO
function mouseEventTab (me){   // right-click on main button resets window
    if (me.button == 2){
        var c = getClientCoords(document.getElementById('main_engagement_tabs'));
        mainPop.setLocation ({x: c.x+4, y: c.y+c.height});
    }
}

function eventHideShow() {
	if (mainPop.toggleHide(mainPop)) {
		tabManager.showTab();
	} else {
		tabManager.hideTab();
	}
}

function createButton(label) {
	var a = document.createElement('a');
	a.className = 'button20';
	a.innerHTML = '<span style="color: #ff6">' + label + '</span>';
	return a;
}

function AddMainTabLink(text, eventListener, mouseListener) {
	var a = createButton(text);
	a.className = 'tab';
	var tabs = document.getElementById('main_engagement_tabs');
	if (!tabs) {
		tabs = document.getElementById('topnav_msg');
		if (tabs)
			tabs = tabs.parentNode;
	}
	if (tabs) {
		var e = tabs.parentNode;
		var gmTabs = null;
		for (var i = 0; i < e.childNodes.length; i++) {
			var ee = e.childNodes[i];
			if (ee.tagName && ee.tagName == 'DIV' && ee.className == 'tabs_engagement' && ee.id != 'main_engagement_tabs') {
				gmTabs = ee;
				break;
			}
		}
		if (gmTabs == null) {
			gmTabs = document.createElement('div');
			gmTabs.className = 'tabs_engagement';
			tabs.parentNode.insertBefore(gmTabs, tabs);
			gmTabs.style.whiteSpace = 'normal';
			gmTabs.style.width = dlgWidth+'px';
		}
		gmTabs.style.height = '0%';
		gmTabs.style.overflow = 'auto';
		if (gmTabs.firstChild)
			gmTabs.insertBefore(a, gmTabs.firstChild);
		else
			gmTabs.appendChild(a);
		a.addEventListener('click', eventListener, false);
		if (mouseListener != null)
			a.addEventListener('mousedown', mouseListener, true);
		return a;
	}
	return null;
}

function ScriptStartup () {
    if (uW.STrChOLoaded) return;
	var metc = getClientCoords(document.getElementById('main_engagement_tabs'));
	if (metc.width==null || metc.width==0) {
		setTimeout (ScriptStartup, 1000);
		return;
	}

    STrChOMaxThroneQuality = CM.ThronePanelController.MAX_QUALITY;
    STrChOMaxThroneLevel = CM.MAX_MASTERS_TOKEN_LEVEL;
    STrChOMaxChampLevel = CM.CHAMPION.MAX_LEVELS;
    STrChOMaxChampQuality = CM.CHAMPION.MAX_EFFECTS;
    STrChOMaxChampions = Seed.champion.champions.size();
    STrChOMaxInventoryRows = Seed.throne.rowNum;
    STrChOMaxThroneCards = STrChOMaxInventoryRows * 5;

	// initialise
//    LOADallData(); //done earlier in the script

    var styles = '';
    styles += '#itemInventory {min-height: 420px; background-color:#884422;}'; //this expands the height of the champion hall inventory space
    styles += '#itemFilter {min-height: 150px;  background-color:#884422;}';

    styles += 'tr.STrChOPopupTop td {background-color:#000000; border:1px solid #000000; height: 21px;  padding:0px; color:#C92C0C;}';
    styles += 'td {border: 0px;}';
    styles += '.STrChOCPopMain {width:'+dlgWidth+'px; height:'+(dlgHeight-dlgHeightOffset)+'px; background-color:#F7F3E6; border:1px solid #000000; -moz-box-shadow:inset 0px 0px 10px #6a6a6a; -webkit-box-shadow:inset 0px 0px 10px #6a6a6a; box-shadow:inset 0px 0px 10px #6a6a6a; font-size:12px; color:#000000;}';
    styles += '.STrChOPopup {border:5px ridge #666; opacity:1; -moz-box-shadow: 1px 1px 5px #000000; -webkit-box-shadow: 1px 1px 5px #000000; box-shadow: 1px 1px 5px #000000;}';
    styles += '.STrChOHeader {width:100%; border:0px solid; border-color:#808080; background: -moz-linear-gradient(top, #A9A9A9, #333); background: -webkit-linear-gradient(top, #A9A9A9, #333); background: linear-gradient(top, #A9A9A9, #333); height: 22px; border-bottom:0px solid #000000;font-weight:bold;font-size:12px;opacity:0.75;margin-left:0px;margin-right:0px;margin-top:1px;margin-bottom:0px;padding-top:6px;padding-right:0px; vertical-align:middle;align:center; color:#000000; text-align:center;}';
    styles += '.STrChOThroneOrganizer {position: static; overflow-x: auto; overflow-y: auto; width:100%; border:0px solid; border-color:#000000; background: -moz-linear-gradient(top, #A9A9A9, #333); background: -webkit-linear-gradient(top, #A9A9A9, #333); background: linear-gradient(top, #A9A9A9, #333); height: 16px;border-bottom:0px solid #000000;font-weight:bold;font-size:12px;opacity:0.75;margin-left:0px;margin-right:0px;margin-top:1px;margin-bottom:0px;padding-top:0px;padding-right:0px; vertical-align:middle;align:center; color:#000000; text-align:center;}';
    styles += '.STrChOChampOrganizer {position: static; overflow-x: auto; overflow-y: auto; width:100%; border:0px solid; border-color:#000000; background: -moz-linear-gradient(top, #A9A9A9, #333); background: -webkit-linear-gradient(top, #A9A9A9, #333); background: linear-gradient(top, #A9A9A9, #333); height: 16px;border-bottom:0px solid #000000;font-weight:bold;font-size:12px;opacity:0.75;margin-left:0px;margin-right:0px;margin-top:1px;margin-bottom:0px;padding-top:0px;padding-right:0px; vertical-align:middle;align:center; color:#000000; text-align:center;}';
    styles += '.STrChOThroneOrganizerSection {display:none; position:static; overflow-x:auto; overflow-y:hidden; }';
    styles += '.STrChOChampOrganizerSection {display:none; position:static; overflow-x:auto; overflow-y:hidden; }';
    styles += '.divNoWrap {white-space: nowrap; display:inline-block;}';
    styles += '.indent5 {padding-left:5px}';
    styles += '.STrChOButton {background-color:#000000; color:#ffffff;font-weight:bold;font-size:11px;-webkit-box-shadow: 0px 1px 3px rgba(0,0,0,0.5); -moz-box-shadow: 0px 1px 3px rgba(0,0,0,0.5); box-shadow: 0px 1px 3px rgba(0,0,0,0.5);}';
    styles += '.STrChOSelect {background-color:#ffffff; color:#000000;font-weight:normal;width:100px;font-size:11px;-webkit-box-shadow: 0px 1px 3px rgba(0,0,0,0.5); -moz-box-shadow: 0px 1px 3px rgba(0,0,0,0.5); box-shadow: 0px 1px 3px rgba(0,0,0,0.5);}';
    styles += '.STrChOTextbox {background-color:#ffffff; color:#000000;font-weight:normal;font-size:11px;-webkit-box-shadow: 0px 1px 3px rgba(0,0,0,0.5); -moz-box-shadow: 0px 1px 3px rgba(0,0,0,0.5); box-shadow: 0px 1px 3px rgba(0,0,0,0.5);}';
    styles += '.STrChOCheckbox {-webkit-box-shadow: 0px 1px 3px rgba(0,0,0,0.5); -moz-box-shadow: 0px 1px 3px rgba(0,0,0,0.5); box-shadow: 0px 1px 3px rgba(0,0,0,0.5);}';
    styles += '.STrChOLinks {font-family: tahoma,verdana,arial,sans-serif; font-size: 12px; font-variant: normal; font-style: normal; font-weight: normal; color: #000000; text-decoration: none;}';
    styles += 'td.STrChOTDLinks {background-color:#FFFFCC;}';
    styles += 'hr.STrChOHRCenter {width: 80%; align:center;}';
    styles += '.STrChOLinksHeader {font-family: tahoma,verdana,arial,sans-serif; font-size: 12px; font-variant: normal; font-style: normal; font-weight: bold; color: #1a1a1a; text-decoration: none;}';
    styles += '.STrChOLinksDesc {font-family: tahoma,verdana,arial,sans-serif; font-size: 12px; font-variant: normal; font-style: italic; font-weight: bold; color: #0000FF; text-decoration: none;}';
    styles += '.STrChOULMenu {list-style-type: none;padding: 0;margin: 0;display: inline;}';
    styles += '.STrChOSectionTable {padding:0px; border-spacing: 0px;width:100%;border:0px;}';
    styles += '.STrChOReverseImage {-moz-transform: scaleX(-1); -o-transform: scaleX(-1); -webkit-transform: scaleX(-1); transform: scaleX(-1); filter: FlipH; -ms-filter: "FlipH";}';
    styles += '.STrChOSection {display:none;}';
    styles += 'table.STrChOStats tr td { background-color: #ffffff; white-space:nowrap; padding:5px; border-bottom:solid black 1px;}';
    styles += 'table.STrChOStats tr td:last-child { border-right:solid black 1px; }';
    styles += 'table.STrChOStats tr:first-child th { border-top:solid black 1px; }';
    styles += 'table.STrChOStats tr td.td0 { background-color: white; }';
    styles += 'table.STrChOStats tr td.td1 { background-color: #eeeeee; }';
    styles += 'table.STrChOStats tr td.td2 { background-color: white; }';
    styles += 'table.STrChOStats tr th {border:solid black 1px; border-top: none; background-color: #357; color: white; white-space:nowrap; padding:5px}';
    styles += 'table.STrChOStats tr:last-child td:first-child, table.STrChOStats tr:last-child th:first-child { -moz-border-radius-bottomleft:10px; -webkit-border-bottom-left-radius:10px; border-bottom-left-radius:10px} ';
    styles += 'table.STrChOStats tr:last-child td:last-child, table.STrChOStats tr:last-child th:last-child { -moz-border-radius-bottomright:10px; -webkit-border-bottom-right-radius:10px; border-bottom-right-radius:10px} ';
    styles += 'table.STrChOStats tr:first-child th:first-child { -moz-border-radius-topleft:10px; -webkit-border-top-left-radius:10px; border-top-left-radius:10px} ';
    styles += 'table.STrChOStats tr:first-child th:last-child { -moz-border-radius-topright:10px; -webkit-border-top-right-radius:10px; border-top-right-radius:10px} ';
    styles += '.STrChOMenuButton { cursor: pointer; border-width: 2px; border-style: solid; -moz-border-top-colors: none; -moz-border-right-colors: none; -moz-border-bottom-colors: none; -moz-border-left-colors: none; -webkit-border-top-colors: none; -webkit-border-right-colors: none; -webkit-border-bottom-colors: none; -webkit-border-left-colors: none; border-top-colors: none; border-right-colors: none; border-bottom-colors: none; border-left-colors: none; border-image: none; border-color: #FDF4D2 #A69964 #A69964 #FDF4D2; color: #FFF; font: bold 10px Georgia; text-align: center; text-decoration: none; background-color: #C82622 !important; }';
    styles += '.STrChOMenuButton.h20 { width: 123px; height: 20px; line-height: 14px; padding: 2px 7px; }';
    styles += '.STrChOMenuButton.red { color: #FFF !important; background: -moz-linear-gradient(center top , #B600B6, #5D3A5D 100%) repeat scroll 0% 0% transparent; background: -webkit-linear-gradient(top , #747474, #474747 100%) repeat scroll 0% 0% transparent; background: linear-gradient(center top , #FF6E72, #320201 100%) repeat scroll 0% 0% transparent; }';
    styles += '.STrChOMenuButton.green { background: -moz-linear-gradient(center top , #B600B6, #5D3A5D 100%) repeat scroll 0% 0% transparent; background: -webkit-linear-gradient(top , #747474, #474747 100%) repeat scroll 0% 0% transparent; background: linear-gradient(center top , #4AB900, #3F8803 100%) repeat scroll 0% 0% transparent; }';
    styles += '.STrChOMenuButton.brown { background: -moz-linear-gradient(center top , #B600B6, #5D3A5D 100%) repeat scroll 0% 0% transparent; background: -webkit-linear-gradient(top , #FE6601, #B3561D 100%) repeat scroll 0% 0% transparent; background: linear-gradient(center top , #C58200, #976300 100%) repeat scroll 0% 0% transparent; }';
    styles += '.STrChOMenuButton.blue { background: -moz-linear-gradient(center top , #B600B6, #5D3A5D 100%) repeat scroll 0% 0% transparent; background: -webkit-linear-gradient(top , #B600B6, #5D3A5D 100%) repeat scroll 0% 0% transparent; background: linear-gradient(center top , #014DAA, #00397E 100%) repeat scroll 0% 0% transparent; }';
    styles += '#STrChOHammer { background-image: url("'+gameurl+'img/throne/modal/sm_hammer.png"); background-repeat: no-repeat; background-color: transparent; display: inline-block; width: 28px; height: 32px; margin: 2px; vertical-align: middle;}';
    styles += 'div.STrChOHammer { background-image: url("'+gameurl+'img/throne/modal/sm_hammer.png"); background-repeat: no-repeat; background-color: transparent; display: inline-block; width: 28px; height: 32px; margin: 2px; vertical-align: middle;}';
    styles += 'div.STrChOBroken { background-image: url("'+gameurl+'img/throne/modal/sm_fail_overlay.png"); background-repeat: no-repeat; background-color: transparent; display: inline-block; width: 28px; height: 32px; margin: 2px; vertical-align: middle;}';
    styles += 'div.STrChOSuccess { background-image: url('+ success_image +'); background-repeat: no-repeat; background-color: transparent; display: inline-block; width: 28px; height: 32px; margin: 2px; vertical-align: middle;}';
    styles += 'div.STrChOUpRow { display=inline;  background-image: url('+ up_img +'); background-repeat: no-repeat; background-color: transparent;  width: 28px; height: 24px; }';
    styles += 'div.STrChOUpRow:hover { display=inline;  background-image: url('+ up_glow +'); background-repeat: no-repeat; background-color: transparent;  width: 28px; height: 24px; }';
    styles += 'div.STrChORemove { display=inline;  background-image: url('+ remove_img +'); background-repeat: no-repeat; background-color: transparent;  width: 50px; height: 50px; }';
    styles += 'div.STrChORemove:hover { display=inline;  background-image: url('+ remove_glow +'); background-repeat: no-repeat; background-color: transparent;  width: 50px; height: 50px; }';
    styles += 'div.STrChODownRow { display=inline;  background-image: url('+ down_img +'); background-repeat: no-repeat; background-color: transparent;  width: 28px; height: 24px; }';
    styles += 'div.STrChODownRow:hover { display=inline;  background-image: url('+ down_glow +'); background-repeat: no-repeat; background-color: transparent;  width: 28px; height: 24px; }';
    styles += 'div.STrChOGoButton { display=inline;  background-image: url('+ gbtn_img +'); background-repeat: no-repeat; background-color: transparent;  width: 32px; height: 32px; margin: 0px; }';
    styles += 'div.STrChOSaveSettings { display=inline; background-image: url("'+gameurl+'img/bonus_prestige.png"); background-repeat: no-repeat; background-color: transparent; display: inline-block; width: 20px; height: 20px; margin-left: 20px; vertical-align: middle; float:left}';
    styles += 'div.STrChOLoadSettings { display=inline; background-image: url("'+gameurl+'img/bonus_att.png"); background-repeat: no-repeat; background-color: transparent; display: inline-block; width: 20px; height: 20px; margin-left: 2px; vertical-align: middle; float:left}';

    styles += 'div.STrChOBlueBorder { border: 2px solid blue; }';
    styles += 'div.STrChOYellowBorder { outline: 2px solid yellow; outline-offset:0px; }';

    styles += '.swapBorderThrone { margin-right: -100%; margin-bottom: -100%; height: 99%; width: 99%; padding: 4%; background-image: url('+ success_image +'); background-repeat: no-repeat; background-size: 28px; display: inline-block;}';
    styles += '.tagBorderThrone { margin-right: -100%; margin-bottom: -100%; height: 72%; width: 72%; padding: 4%; border: 3px solid ' + STrChOThronePresetData.tagColor + '; background: transparent;}';
    styles += '.presetBorderThrone { margin-right: -100%; margin-bottom: -100%; height: 72%; width: 72%; padding: 4%; border: 3px solid ' + STrChOThronePresetData.presetColor + '; background: transparent;}';
    styles += '.activeBorderThrone { margin-right: -100%; margin-bottom: -100%; height: 72%; width: 72%; padding: 4%; border: 3px solid ' + STrChOThronePresetData.activeColor + '; background: transparent;}';
    styles += '.tagBorderChamp { margin-right: -100%; margin-bottom: -100%; height: 72%; width: 72%; padding: 4%; border: 3px solid ' + STrChOChampPresetData.tagColor + '; background: transparent;}';
    styles += '.presetBorderChamp { margin-right: -100%; margin-bottom: -100%; height: 72%; width: 72%; padding: 4%; border: 3px solid ' + STrChOChampPresetData.presetColor + '; background: transparent;}';
    styles += '.activeBorderChamp { margin-right: -100%; margin-bottom: -100%; height: 72%; width: 72%; padding: 4%; border: 3px solid ' + STrChOChampPresetData.activeColor + '; background: transparent;}';


    styles += 'div.champ_item_section ul.effects { margin: 3px 0 0 0; padding: 0; list-style: none; }';
    styles += 'div.champ_item_section ul.effects li.effect { padding:0;font-weight:bold;font-size:10px; }';
    styles += 'div.champ_item_section ul.effects li.effect.statChamp { color: #3F2300; }';
    styles += 'div.champ_item_section ul.effects li.effect.statTroop { color: #1751A5; }';
    styles += 'div.champ_item_section ul.effects li.effect.statChamp.disabled { color: #B9A48B; }';
    styles += 'div.champ_item_section ul.effects li.effect.statTroop.disabled { color: #A5B1E5; }';

    styles += 'div.STrChOCard {width: 180px; height: 200px; font:bold 8px Georiga; overflow: hidden;}';
    var icon_size = '50px 50px';
    styles += 'div.STrChOCard div.description>div{width:50px;height:50px; }';
    styles += 'div.STrChOCard div.description div.briton.advisor{background:transparent url("'+gameurl+'img/throne/icons/70/briton_advisor_normal_1_6.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.briton.banner{background:transparent url("'+gameurl+'img/throne/icons/70/briton_banner_normal_1_6.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.briton.chair{background:transparent url("'+gameurl+'img/throne/icons/70/briton_chair_normal_1_6.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.briton.table{background:transparent url("'+gameurl+'img/throne/icons/70/briton_table_normal_1_6.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.briton.window{background:transparent url("'+gameurl+'img/throne/icons/70/briton_window_normal_1_6.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.briton.trophy{background:transparent url("'+gameurl+'img/throne/icons/70/briton_trophy_normal_1_6.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.briton.hero{background:transparent url("'+gameurl+'img/throne/icons/70/briton_hero_normal_1_6.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.briton.statue{background:transparent url("'+gameurl+'img/throne/icons/70/briton_statue_normal_1_6.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.briton.candelabrum{background:transparent url("'+gameurl+'img/throne/icons/70/briton_candelabrum_normal_1_6.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.briton.pet{background:transparent url("'+gameurl+'img/throne/icons/70/briton_pet_normal_1_6.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.briton.tapestry{background:transparent url("'+gameurl+'img/throne/icons/70/briton_tapestry_normal_1_6.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.briton.pillar{background:transparent url("'+gameurl+'img/throne/icons/70/briton_pillar_normal_1_6.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.briton.weapon{background:transparent url("'+gameurl+'img/champion_hall/wondrous_weapon_briton_30x30.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.briton.chest{background:transparent url("'+gameurl+'img/champion_hall/wondrous_chestArmor_briton_30x30.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.briton.helm{background:transparent url("'+gameurl+'img/champion_hall/wondrous_helmet_briton_30x30.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.briton.boots{background:transparent url("'+gameurl+'img/champion_hall/wondrous_feet_briton_30x30.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.briton.shield{background:transparent url("'+gameurl+'img/champion_hall/wondrous_shield_briton_30x30.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.briton.ring{background:transparent url("'+gameurl+'img/champion_hall/wondrous_ring1_briton_30x30.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.briton.pendant{background:transparent url("'+gameurl+'img/champion_hall/wondrous_pendant_briton_30x30.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.briton.cloak{background:transparent url("'+gameurl+'img/champion_hall/wondrous_cloak_briton_30x30.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.druid.advisor{background:transparent url("'+gameurl+'img/throne/icons/70/druid_advisor_normal_1_6.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.druid.banner{background:transparent url("'+gameurl+'img/throne/icons/70/druid_banner_normal_1_6.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.druid.chair{background:transparent url("'+gameurl+'img/throne/icons/70/druid_chair_normal_1_6.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.druid.table{background:transparent url("'+gameurl+'img/throne/icons/70/druid_table_normal_1_6.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.druid.window{background:transparent url("'+gameurl+'img/throne/icons/70/druid_window_normal_1_6.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.druid.trophy{background:transparent url("'+gameurl+'img/throne/icons/70/druid_trophy_normal_1_6.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.druid.hero{background:transparent url("'+gameurl+'img/throne/icons/70/druid_hero_normal_1_6.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.druid.statue{background:transparent url("'+gameurl+'img/throne/icons/70/druid_statue_normal_1_6.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.druid.candelabrum{background:transparent url("'+gameurl+'img/throne/icons/70/druid_candelabrum_normal_1_6.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.druid.pet{background:transparent url("'+gameurl+'img/throne/icons/70/druid_pet_normal_1_6.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.druid.tapestry{background:transparent url("'+gameurl+'img/throne/icons/70/druid_tapestry_normal_1_6.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.druid.pillar{background:transparent url("'+gameurl+'img/throne/icons/70/druid_pillar_normal_1_6.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.druid.weapon{background:transparent url("'+gameurl+'img/champion_hall/wondrous_weapon_druid_30x30.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.druid.chest{background:transparent url("'+gameurl+'img/champion_hall/wondrous_chestArmor_druid_30x30.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.druid.helm{background:transparent url("'+gameurl+'img/champion_hall/wondrous_helmet_druid_30x30.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.druid.boots{background:transparent url("'+gameurl+'img/champion_hall/wondrous_feet_druid_30x30.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.druid.shield{background:transparent url("'+gameurl+'img/champion_hall/wondrous_shield_druid_30x30.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.druid.ring{background:transparent url("'+gameurl+'img/champion_hall/wondrous_ring1_druid_30x30.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.druid.pendant{background:transparent url("'+gameurl+'img/champion_hall/wondrous_pendant_druid_30x30.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.druid.cloak{background:transparent url("'+gameurl+'img/champion_hall/wondrous_cloak_druid_30x30.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.fey.advisor{background:transparent url("'+gameurl+'img/throne/icons/70/fey_advisor_normal_1_6.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.fey.banner{background:transparent url("'+gameurl+'img/throne/icons/70/fey_banner_normal_1_6.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.fey.chair{background:transparent url("'+gameurl+'img/throne/icons/70/fey_chair_normal_1_6.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.fey.table{background:transparent url("'+gameurl+'img/throne/icons/70/fey_table_normal_1_6.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.fey.window{background:transparent url("'+gameurl+'img/throne/icons/70/fey_window_normal_1_6.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.fey.trophy{background:transparent url("'+gameurl+'img/throne/icons/70/fey_trophy_normal_1_6.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.fey.hero{background:transparent url("'+gameurl+'img/throne/icons/70/fey_hero_normal_1_6.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.fey.statue{background:transparent url("'+gameurl+'img/throne/icons/70/fey_statue_normal_1_6.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.fey.candelabrum{background:transparent url("'+gameurl+'img/throne/icons/70/fey_candelabrum_normal_1_6.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.fey.pet{background:transparent url("'+gameurl+'img/throne/icons/70/fey_pet_normal_1_6.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.fey.tapestry{background:transparent url("'+gameurl+'img/throne/icons/70/fey_tapestry_normal_1_6.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.fey.pillar{background:transparent url("'+gameurl+'img/throne/icons/70/fey_pillar_normal_1_6.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.fey.weapon{background:transparent url("'+gameurl+'img/champion_hall/wondrous_weapon_fey_30x30.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.fey.chest{background:transparent url("'+gameurl+'img/champion_hall/wondrous_chestArmor_fey_30x30.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.fey.helm{background:transparent url("'+gameurl+'img/champion_hall/wondrous_helmet_fey_30x30.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.fey.boots{background:transparent url("'+gameurl+'img/champion_hall/wondrous_feet_fey_30x30.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.fey.shield{background:transparent url("'+gameurl+'img/champion_hall/wondrous_shield_fey_30x30.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.fey.ring{background:transparent url("'+gameurl+'img/champion_hall/wondrous_ring1_fey_30x30.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.fey.pendant{background:transparent url("'+gameurl+'img/champion_hall/wondrous_pendant_fey_30x30.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard div.description div.fey.cloak{background:transparent url("'+gameurl+'img/champion_hall/wondrous_cloak_fey_30x30.png") top left no-repeat; background-size: ' + icon_size + ';}';
    styles += 'div.STrChOCard .disabled{opacity:.5;}';
    styles += 'div.STrChOCard ul{margin:0px;padding:0;list-style:none;}';
    styles += 'div.STrChOCard li{padding:0px 0 0 0px;color:#3f2300;font-weight:bold;font-size:10px;}'; //tooltip
    styles += 'div.STrChOCard>div{float:left;border:1px solid #a56631;margin:0px;padding:0px;width:200px; height:300px; background:transparent url("'+gameurl+'img/modal/modal_med_bg_4.png") -200px 0 no-repeat;}'; //tooltip
    styles += 'div.STrChOTitle{font:bold 11px Georgia;border-bottom:1px solid #703200;padding:4px 3px 5px 8px;background:transparent url("'+gameurl+'img/throne/panel/modal/item_bg.png") -20px -100px no-repeat;}'; //tooltip
    styles += 'div.STrChOTitle span.icon{background:transparent url("'+gameurl+'img/throne/modal/equip.png") top right no-repeat;display:block;height:20px;width:20px;top:12px;right:12px;position:absolute;}';
    styles += 'div.description {overflow:hidden;border-bottom:1px solid #703200;}';
    styles += 'div.portrait {float:left; border:3px solid #deaf69;margin-right:8px;}';
    styles += 'div.description>ul{float:left;margin:3px 0 0 0;padding:0;}';
    styles += 'div.description>ul li{padding:0;font-weight:bold;font-size:10px;text-transform:capitalize;}'; //tooltip

    styles += '.STrChOCastleButton {outline:0px; margin-left:0px; margin-right:0px; width:24px; height:26px; font-size:12px; font-weight:bold; }';
    styles += '.STrChOCastleButton:hover {background-image:url("'+ URL_CASTLE_BUTTON_SELECT +'")}';
    styles += '.STrChOCastleButtonNot {background-image:url("'+ URL_CASTLE_BUTTON +'")}';
    styles += '.STrChOCastleButtonSelect {background-image:url("'+ URL_CASTLE_BUTTON_SELECT +'")}';

    styles += 'div.STrChOContextMenu {background-color: #999966; z-index: 10000000; position: absolute; height: 400px; padding: 4px 4px 4px 4px; font: bold 11px Georgia; border-width: 2px; border-style: solid; text-align: center; margin: auto;}';// overflow-y: auto; overflow-x: hidden;}';

    styles += 'div.STrChOContextMenuItem       {height: 20px; width: 140px; margin-bottom: 2px; cursor: pointer; text-decoration: none; font: bold 12px Georgia; text-align: center; border-style: solid; border-width: 2px; background-color: #B72828 !important; vertical-align: middle; color: #ffffff; border-color: transparent; padding-top: 4px;}';
    styles += 'div.STrChOContextMenuSubItem    {height: 20px; width: 140px; margin-bottom: 2px; cursor: pointer; text-decoration: none; font: bold 12px Georgia; text-align: center; border-style: solid; border-width: 2px; background-color: #B72828 !important; vertical-align: middle; color: #ffffff; border-color: transparent; padding-top: 4px;}';

    styles += 'div.STrChORed         {background: -moz-linear-gradient(center top , #FF6E72, #320201 100%) repeat scroll 0% 0% transparent;background: -webkit-linear-gradient(top , #FF6E72, #320201 100%) repeat scroll 0% 0% transparent;background: linear-gradient(center top , #FF6E72, #320201 100%) repeat scroll 0% 0% transparent;}';
    styles += 'div.STrChORed:hover   {background: -moz-linear-gradient(center top , #320201, #FF6E72 100%) repeat scroll 0% 0% transparent;background: -webkit-linear-gradient(top , #320201, #FF6E72 100%) repeat scroll 0% 0% transparent;background: linear-gradient(center top , #320201, #FF6E72 100%) repeat scroll 0% 0% transparent;}';
    styles += 'div.STrChOGreen          {background: -moz-linear-gradient(center top , #4AB900, #3F8803 100%) repeat scroll 0% 0% transparent; background: -webkit-linear-gradient(top , #4AB900, #3F8803 100%) repeat scroll 0% 0% transparent; background: linear-gradient(center top , #4AB900, #3F8803 100%) repeat scroll 0% 0% transparent; }';
    styles += 'div.STrChOGreen:hover    {background: -moz-linear-gradient(center top , #3F8803, #4AB900 100%) repeat scroll 0% 0% transparent; background: -webkit-linear-gradient(top , #3F8803, #4AB900 100%) repeat scroll 0% 0% transparent; background: linear-gradient(center top , #3F8803, #4AB900 100%) repeat scroll 0% 0% transparent; }';
    styles += 'div.STrChOBlue         {background: -moz-linear-gradient(center top , #014DAA, #00397E 100%) repeat scroll 0% 0% transparent; background: -webkit-linear-gradient(top , #014DAA, #00397E 100%) repeat scroll 0% 0% transparent; background: linear-gradient(center top , #014DAA, #00397E 100%) repeat scroll 0% 0% transparent; }';
    styles += 'div.STrChOBlue:hover   {background: -moz-linear-gradient(center top , #00397E, #014DAA 100%) repeat scroll 0% 0% transparent; background: -webkit-linear-gradient(top , #00397E, #014DAA 100%) repeat scroll 0% 0% transparent; background: linear-gradient(center top , #00397E, #014DAA 100%) repeat scroll 0% 0% transparent; }';
    styles += 'div.STrChOBrown         {background: -moz-linear-gradient(center top , #976300, #C58200 100%) repeat scroll 0% 0% transparent; background: -webkit-linear-gradient(top , #976300, #C58200 100%) repeat scroll 0% 0% transparent; background: linear-gradient(center top , #976300, #C58200 100%) repeat scroll 0% 0% transparent; }';
    styles += 'div.STrChOBrown:hover   {background: -moz-linear-gradient(center top , #C58200, #976300 100%) repeat scroll 0% 0% transparent; background: -webkit-linear-gradient(top , #C58200, #976300 100%) repeat scroll 0% 0% transparent; background: linear-gradient(center top , #C58200, #976300 100%) repeat scroll 0% 0% transparent; }';

    styles += 'div.STrChODisabled         {background: -moz-linear-gradient(center top , #5D5D5D, #171717 100%) repeat scroll 0% 0% transparent; background: -webkit-linear-gradient(top , #5D5D5D, #171717 100%) repeat scroll 0% 0% transparent; background: linear-gradient(center top , #5D5D5D, #171717 100%) repeat scroll 0% 0% transparent; }';
    styles += 'div.STrChODisabled:hover   {background: -moz-linear-gradient(center top , #5D5D5D, #171717 100%) repeat scroll 0% 0% transparent; background: -webkit-linear-gradient(top , #5D5D5D, #171717 100%) repeat scroll 0% 0% transparent; background: linear-gradient(center top , #5D5D5D, #171717 100%) repeat scroll 0% 0% transparent; }';

    styles += 'div.STrChOContextHidden  {display: none; }';
    styles += 'div.STrChOContextVisible {display: block; }';

    if (STrChOGeneralOptions.usedCityNum && STrChOGeneralOptions.usedCityNum > Seed.cities.length -1 ) STrChOGeneralOptions.usedCityNum = 0;
    if (STrChOGeneralOptions.salvageCityNum && STrChOGeneralOptions.salvageCityNum > Seed.cities.length -1 ) STrChOGeneralOptions.salvageCityNum = 0;

    installThroneHandlerFunctions();  //installHandlerFunctions

    setCities();

    //window.addEventListener('unload', onUnload, false);
    window.addEventListener('beforeunload', onUnload, false);

    CM.cheatDetector.detect = foo;

	AddMainTabLink('Spawn TrChO', eventHideShow, mouseEventTab);

    ThroneAttachTab();

    alterChampHall();

	if (!STrChOGeneralOptions.xPos) STrChOGeneralOptions.xPos=0;
    if (!STrChOGeneralOptions.yPos) STrChOGeneralOptions.yPos=30;

    //mainPop = new STrChOPopup('STrChOMain', 0, 30, true, function (){ tabManager.hideTab(); });
	mainPop = new STrChOPopup ('STrChOMain', STrChOGeneralOptions.xPos, STrChOGeneralOptions.yPos, true, function (){ tabManager.hideTab(); });
	mainPop.getMainDiv().innerHTML = '<STYLE>'+ styles +'</style>';

	tabManager.init (mainPop.getMainDiv());

    if (!STrChOGeneralOptions.hidden) eventHideShow();

    setUpgradeColor();

    STrChOThroneDisplayTimer = setInterval(ThroneUpdateTimerDisplay, 1000);

    ReplaceToolTips();

    uW.STrChOLoaded = true;



}

var foo = function() { };

/*********************************** TABS ***********************************/

Tabs.throneUpgrader = {
	tabOrder: 101,
	tabLabel: 'UPGRADER',
	tabColor: 'red',
    tabHeader: 'THRONE ROOM UPGRADER',
    myDiv: null,
    repairId: 0,
    repairEnd: 0,
    timerH: null,
    clearTimerH: null,
    speedup: 0,
    upgradePath: {
        0: { maxLev: 2, nextQual: 2 },
        1: { maxLev: 2, nextQual: 2 },
        2: { maxLev: 3, nextQual: 4 },
        3: { maxLev: 3, nextQual: 4 },
        4: { maxLev: 4, nextQual: 5 },
        5: { maxLev: 5, nextQual: 6 }
    },

	init: function (div) {
		var t = Tabs.throneUpgrader;
		t.mydiv = div;

		var m = '<div class=STrChOHeader>' + t.tabHeader + '<div class=STrChOSaveSettings id=STrChOThroneUpgraderSaveSettings title="Save Upgrader Settings"></div><div class=STrChOLoadSettings id=STrChOThroneUpgraderLoadSettings title="Load Upgrader Settings"></div></div>';
        m += '<div style="height: ' + (dlgHeight - (dlgHeightOffset*2.5)) + 'px; width: ' + (dlgWidth - dlgWidthMenu) + 'px; margin-top:5px; margin-bottom:5px; overflow-x: auto; overflow-y: auto; position: static;">';
		m += '<div>';
        m += '<table class=STrChOSectionTable>';
        m += '<tr>';
        if (STrChOThroneUpgradeData.active) {
            m += '<td width=33%><input id=STrChOThroneUpgradePower type=button class=STrChOButton value="Upgrader = ON"></td>';
        } else {
            m += '<td width=33%><input id=STrChOThroneUpgradePower type=button class=STrChOButton value="Upgrader = OFF"></td>';
        }
        m += '<td width=33%><div class=divNoWrap><input class=STrChOCheckbox id=STrChOThroneOneItem type=checkbox ' + (STrChOThroneQueueData.oneItem ? ' CHECKED' : '') + '/>Upgrade 1 At A Time</div></td>';
        m += '<td width=33%><div class=divNoWrap align=center id=STrChOThroneAetherDisplay></div></td>';
        m += '</tr>';
        m += '<tr><td colspan=3><hr class=STrChOHRCenter></td></tr>';
        m += '<tr><td colspan=3><div class=indent5 id=STrChOThroneUpgradeStatus><br></div></td></tr>';
        m += '<tr><td colspan=3><div class=indent5 id=STrChOThroneLastResult><br></div></td></tr>';
        m += '</table>';
        m += '</div>';
        m += '<div class=STrChOHeader onmouseover="this.style.cursor=\'pointer\'"><img src="'+STrChORightArrow+'"/>&nbsp;SPEED UPS&nbsp;<img class=STrChOReverseImage src="'+STrChORightArrow+'"/></div>';
        m += '<div class=STrChOSection>';
        m += '<table class=STrChOSectionTable>';
        m += '<tr>';
        m += '<td colspan=3><input class=STrChOCheckbox type=checkbox id=STrChOThroneHourglassLevelSpecific ' + (STrChOThroneUpgradeData.hourglassLevelSpecific ? "CHECKED" : "") + '>Only use hourglass for levels ';
        m += '<select class=STrChOSelect  id=STrChOThroneHourglassLevel>';
        for (i = 1; i < STrChOMaxThroneLevel; i++) m += '<option value=' + i + ' ' + (STrChOThroneUpgradeData.hourglassLevel == i ? 'SELECTED' : '') + '>' + i + '</option>';
        m += '</select> and higher</td>';
        m += '</tr>';
        m += '<tr>';
        m += '<td colspan=3><input class=STrChOCheckbox type=checkbox id=STrChOThroneHourglassQualitySpecific ' + (STrChOThroneUpgradeData.hourglassQualitySpecific ? "CHECKED" : "") + '>Only use hourglass for qualities ';
        m += '<select class=STrChOSelect id=STrChOThroneHourglassQuality>';
        for (i = 1; i <= STrChOMaxThroneQuality-1; i++) m += '<option value=' + i + ' ' + (STrChOThroneUpgradeData.hourglassQuality == i ? 'SELECTED' : '') + '>' + throneCardQualities[i].capitalizeFirstLetter() + '</option>';
        m += '</select> and higher</td>';
        m += '</tr>';
        m += '<tr>';
        m += '<td title="' + STrChOHourGlassTDLabel[1] + '"><input class=STrChOCheckbox type=checkbox id=STrChOThroneUseSH ' + (STrChOThroneUpgradeData.useSH ? 'CHECKED' : '') + '><div class=divNoWrap>' + STrChOHourGlassName[1] + ' (<div class=divNoWrap id=STrChOThroneUseSHLabel><font' + (uW.ksoItems[1].count < 100 ? ' color=red>' : '>') + uW.ksoItems[1].count + '</font></div>)</div></td>';
        m += '<td title="' + STrChOHourGlassTDLabel[2] + '"><input class=STrChOCheckbox type=checkbox id=STrChOThroneUseKH ' + (STrChOThroneUpgradeData.useKH ? 'CHECKED' : '') + '><div class=divNoWrap>' + STrChOHourGlassName[2] + ' (<div class=divNoWrap id=STrChOThroneUseKHLabel><font' + (uW.ksoItems[2].count < 100 ? ' color=red>' : '>') + uW.ksoItems[2].count + '</font></div>)</div></td>';
        m += '<td title="' + STrChOHourGlassTDLabel[3] + '"><input class=STrChOCheckbox type=checkbox id=STrChOThroneUseGH ' + (STrChOThroneUpgradeData.useGH ? 'CHECKED' : '') + '><div class=divNoWrap>' + STrChOHourGlassName[3] + ' (<div class=divNoWrap id=STrChOThroneUseGHLabel><font' + (uW.ksoItems[3].count < 100 ? ' color=red>' : '>') + uW.ksoItems[3].count + '</font></div>)</div></td>';
        m += '</tr>';
        m += '<tr>';
        m += '<td title="' + STrChOHourGlassTDLabel[4] + '"><input class=STrChOCheckbox type=checkbox id=STrChOThroneUseMH ' + (STrChOThroneUpgradeData.useMH ? 'CHECKED' : '') + '><div class=divNoWrap>' + STrChOHourGlassName[4] + ' (<div class=divNoWrap id=STrChOThroneUseMHLabel><font' + (uW.ksoItems[4].count < 100 ? ' color=red>' : '>') + uW.ksoItems[4].count + '</font></div>)</div></td>';
        m += '<td title="' + STrChOHourGlassTDLabel[5] + '"><input class=STrChOCheckbox type=checkbox id=STrChOThroneUseAH ' + (STrChOThroneUpgradeData.useAH ? 'CHECKED' : '') + '><div class=divNoWrap>' + STrChOHourGlassName[5] + ' (<div class=divNoWrap id=STrChOThroneUseAHLabel><font' + (uW.ksoItems[5].count < 100 ? ' color=red>' : '>') + uW.ksoItems[5].count + '</font></div>)</div></td>';
        m += '<td title="' + STrChOHourGlassTDLabel[6] + '"><input class=STrChOCheckbox type=checkbox id=STrChOThroneUseWH ' + (STrChOThroneUpgradeData.useWH ? 'CHECKED' : '') + '><div class=divNoWrap>' + STrChOHourGlassName[6] + ' (<div class=divNoWrap id=STrChOThroneUseWHLabel><font' + (uW.ksoItems[6].count < 100 ? ' color=red>' : '>') + uW.ksoItems[6].count + '</font></div>)</div></td>';
        m += '</tr>';
        m += '<tr>';
        m += '<td title="' + STrChOHourGlassTDLabel[7] + '"><input class=STrChOCheckbox type=checkbox id=STrChOThroneUseDH ' + (STrChOThroneUpgradeData.useDH ? 'CHECKED' : '') + '><div class=divNoWrap>' + STrChOHourGlassName[7] + ' (<div class=divNoWrap id=STrChOThroneUseDHLabel><font' + (uW.ksoItems[7].count < 100 ? ' color=red>' : '>') + uW.ksoItems[7].count + '</font></div>)</div></td>';
        m += '<td title="' + STrChOHourGlassTDLabel[8] + '"><input class=STrChOCheckbox type=checkbox id=STrChOThroneUseEH ' + (STrChOThroneUpgradeData.useEH ? 'CHECKED' : '') + '><div class=divNoWrap>' + STrChOHourGlassName[8] + ' (<div class=divNoWrap id=STrChOThroneUseEHLabel><font' + (uW.ksoItems[8].count < 100 ? ' color=red>' : '>') + uW.ksoItems[8].count + '</font></div>)</div></td>';
        m += '<td/>';
        m += '</tr>';
        m += '<tr>';
        m += '<td colspan=3><input class=STrChOCheckbox type=checkbox id=STrChOThroneOverrideSpeedUps ' + (STrChOThroneUpgradeData.overrideSpeedUp ? "CHECKED" : "") + '>Override hourglasses by using ';
        m += '<select class=STrChOSelect  id=STrChOThroneSpeedUp>';
        m += '<option value=0>None</option>';
        for (gls in STrChOHourGlassName) m += '<option value=' + gls + ' ' + (STrChOThroneUpgradeData.useSpeedUp == gls ? 'SELECTED' : '') + '>' + STrChOHourGlassName[gls] + '</option>';
        m += '</select> every time</td>';
        m += '</tr>';
        m += '</table>';
        m += '</div>';
        m += '<div class=STrChOHeader onmouseover="this.style.cursor=\'pointer\'"><img src="'+STrChORightArrow+'"/>&nbsp;BOOST ITEMS&nbsp;<img class=STrChOReverseImage src="'+STrChORightArrow+'"/></div>';
        m += '<div class=STrChOSection>';
        m += '<table class=STrChOSectionTable>';
        m += '<tr>';
        m += '<td><input class=STrChOCheckbox type=checkbox ' + (STrChOThroneUpgradeData.useLPS ? "CHECKED" : "") + ' id=STrChOThroneUseLPS><div class=divNoWrap>Lesser Protection Stones (<div class=divNoWrap id=STrChOThroneUseLPSLabel>' + uW.ksoItems[20001].count + '</div>)</div></td>';
        m += '<td><input class=STrChOCheckbox type=checkbox ' + (STrChOThroneUpgradeData.usePS ? "CHECKED" : "") + ' id=STrChOThroneUsePS><div class=divNoWrap>Protection Stones (<div class=divNoWrap id=STrChOThroneUsePSLabel>' + uW.ksoItems[20002].count + '</div>)</div></td>';
        m += '<td/>';
        m += '</tr>';
        m += '<tr>';
        //m += '<td><input class=STrChOCheckbox type=checkbox ' + (STrChOThroneUpgradeData.useLORB ? "CHECKED" : "") + ' id=trUseLORB><div style="white-space:nowrap;display:inline-block;">Lesser Mystic Orb (<div style="white-space:nowrap;display:inline-block;" id=trUseLORBLabel>' + Seed.items['i20003'] + '</div>)</div></td>';
        m += '<td><input class=STrChOCheckbox type=checkbox ' + (STrChOThroneUpgradeData.useORB ? "CHECKED" : "") + ' id=STrChOThroneUseORB><div class=divNoWrap>Mystic Orb (<div class=divNoWrap id=STrChOThroneUseORBLabel>' + uW.ksoItems[20004].count + '</div>)</div></td>';
        m += '<td/>';
        m += '<td>Quality <select class=STrChOSelect  id=STrChOThroneUseQuality>';
        for (i = 0; i <= STrChOMaxThroneQuality-1; i++) m += '<option value="' + i + '" ' + (STrChOThroneUpgradeData.useQuality == i ? 'SELECTED' : '')  + '>' + throneCardQualities[i].capitalizeFirstLetter() + '</option>';
        m += '</select> and higher</td>';
        m += '</tr>';
        m += '<tr>';
        m += '<td><input class=STrChOCheckbox type=checkbox ' + (STrChOThroneUpgradeData.useLLT ? "CHECKED" : "") + ' id=STrChOThroneUseLLT><div class=divNoWrap>Lesser Tokens (<div class=divNoWrap id=STrChOThroneUseLLTLabel>' + uW.ksoItems[20005].count + '</div>)</div></td>';
        m += '<td><input class=STrChOCheckbox type=checkbox ' + (STrChOThroneUpgradeData.useLT ? "CHECKED" : "") + ' id=STrChOThroneUseLT><div class=divNoWrap>Lucky Tokens (<div class=divNoWrap id=STrChOThroneUseLTLabel>' + uW.ksoItems[20006].count + '</div>)</div></td>';
        m += '<td>Level <select class=STrChOSelect  id=STrChOThroneUseLevel>';
        for (i = 1; i <= STrChOMaxThroneLevel-1; i++) m += '<option value="' + i + '" ' + (STrChOThroneUpgradeData.useLevel == i ? 'SELECTED' : '') + '>+' + i + '</option>';
        m += '</select> & Higher</td>';
        m += '</tr>';

        m += '<tr><td colspan=3>';
        m += '<input class=STrChOCheckbox id=STrChOThroneUseAutoTokens type=checkbox ' + (STrChOThroneUpgradeData.useAutoTokens ? 'CHECKED ' : '') + '/> Use Auto Masters Upgrade When Min Level ';
        m += '<select id=STrChOThroneUseAutoTokensMin class=STrChOSelect>';
        for (var lvl = 0; lvl < STrChOMaxThroneLevel; lvl++) m += '<option value="' + lvl + '" ' + (STrChOThroneUpgradeData.useAutoTokensMin == lvl ? 'SELECTED ' : '') + '>+' + lvl + '</option>';
        m += '</select> & Max Level ';
        m += '<select id=STrChOThroneUseAutoTokensMax class=STrChOSelect>';
        for (var lvl = 0; lvl < STrChOMaxThroneLevel; lvl++) m += '<option value="' + lvl + '" ' + (STrChOThroneUpgradeData.useAutoTokensMax == lvl ? 'SELECTED ' : '') + '>+' + lvl + '</option>';
        m += '</select>';
        m += '</td></tr> ';

        m += '</table>';
        m += '</div>';
        m += '<div class=STrChOHeader onmouseover="this.style.cursor=\'pointer\'"><img src="'+STrChORightArrow+'"/>&nbsp;UPGRADE ITEMS&nbsp;<img class=STrChOReverseImage src="'+STrChORightArrow+'"/></div>';
        m += '<div class=STrChOSection>';
        m += '<table class=STrChOSectionTable>';
        m += '<tr>';
        m += '<td colspan=4>Enhance All Quality <select class=STrChOSelect id=STrChOThroneEnhanceAllQuality>';
        for (i = 0; i <= STrChOMaxThroneQuality-1; i++) m += '<option value="' + i + '">' + throneCardQualities[i].capitalizeFirstLetter() + '</option>';
        m += '</select> To Quality <select class=STrChOSelect id=STrChOThroneEnhanceAllQualityTo>';
        for (i = 1; i <= STrChOMaxThroneQuality; i++) m += '<option value="' + i + '">' + throneCardQualities[i].capitalizeFirstLetter() + '</option>';
        m += '</select>&nbsp;&nbsp;<input class=STrChOButton type=button value="Add" id=STrChOThroneEnhanceAddAllQuality></td>';
        m += '</tr>';
        m += '<tr><td colspan=4>Upgrade All Cards Less To Level <select class=STrChOSelect id=STrChOThroneUpgradeAddAllLevelMaxTo>';
        for (i = 1; i <= STrChOMaxThroneLevel; i++) m += '<option value="' + i + '"> +' + i + '</option>';
        m += '</select>&nbsp;&nbsp;<input class=STrChOButton type=button value="Add" id=STrChOThroneUpgradeAddAllLevelMax></td></tr>';
        m += '<tr>';
        m += '<td colspan=4>Upgrade All Level <select class=STrChOSelect id=STrChOThroneUpgradeAllLevel>';
        for (i = 0; i <= STrChOMaxThroneLevel-1; i++) m += '<option value="' + i + '"> +' + i + '</option>';
        m += '</select> To Level <select class=STrChOSelect id=STrChOThroneUpgradeAllLevelTo>';
        for (i = 1; i <= STrChOMaxThroneLevel; i++) m += '<option value="' + i + '"> +' + i + '</option>';
        m += '</select>&nbsp;&nbsp;<input class=STrChOButton type=button value="Add" id=STrChOThroneUpgradeAddAllLevel></td>';
        m += '</tr>';
        m += '<tr>';
        m += '<td class=divNoWrap>Item: <select class=STrChOSelect style="white-space:nowrap;display:inline-block;max-width: 200px;" id=STrChOThroneUpgradeList>';
        m += '<option value="0">--Items--</option>';
        for (ThroneID in uW.kocThroneItems) {
            var throne_item = uW.kocThroneItems[ThroneID];
            m += '<option value="' + ThroneID + '">' + throne_item.name + '</option>';
        }
        m += '</select>&nbsp;';
        m += 'Action: <select class=STrChOSelect style="white-space:nowrap;display:inline-block;" id=STrChOThroneAction>';
        m += '<option value="upgrade">Upgrade</option>';
        m += '<option value="enhance">Enhance</option>';
        m += '<option value="both">Both</option>';
        m += '</select>&nbsp;';
        m += '<div class=divNoWrap id=STrChOThroneMaxDiv></div>&nbsp;';
        m += '<input class=STrChOButton id=STrChOThroneQueueAdd type=button value="Add"/>';
        m += '</td>';
        m += '</tr>';
        m += '</table>';
        m += '</div>';
        m += '<div class=STrChOHeader>UPGRADE LIST</div>';
        m += '<table class=STrChOSectionTable>';
        m += '<tr><td colspan=4>';
        m += '<div id=STrChOThroneQScroll style="position: static; width: 100%; height: 340px; overflow-x: auto; overflow-y: auto;">';
        m += '<div id=STrChOThroneQDiv></div>';
        m += '</div>';
        m += '</td></tr>';
        m += '<tr><td colspan=4><input class=STrChOButton style="float: left;" id=STrChOThroneClearQ type=button value="Clear Queue"></tr>';
        m += '</table>';
        m += '</div>';
        m += '</div>';
		t.mydiv.innerHTML = '<div>' + m + '</div>';

        document.getElementById('STrChOThroneUpgraderSaveSettings').addEventListener('click', function () {
            SaveSettingsToFile(STrChOThroneUpgradeData);
        }, false);
        document.getElementById('STrChOThroneUpgraderLoadSettings').addEventListener('click', function () {
            var loader = document.getElementById('STrChOSettingsFile');
            loader.addEventListener('change', function () {
                LoadSettingsFromFile(STrChOThroneUpgradeData, Tabs.throneUpgrader);
            }, false);
            loader.click();
        }, false);

        var header = document.getElementsByClassName('STrChOHeader');
        for (var head=0;head<header.length;head++) {
            header[head].addEventListener('click', sectionOpener, false);
        }

        document.getElementById('STrChOThroneUseAutoTokens').addEventListener('change', function () {
            STrChOThroneUpgradeData.useAutoTokens = document.getElementById('STrChOThroneUseAutoTokens').checked;
            SAVESTrChOThroneUpgradeData();
            if (STrChOThroneUpgradeData.useAutoTokens) t.doAction();
        }, false);

        document.getElementById('STrChOThroneUseAutoTokensMin').addEventListener('change', function () {
            STrChOThroneUpgradeData.useAutoTokensMin = document.getElementById('STrChOThroneUseAutoTokensMin').value;
            SAVESTrChOThroneUpgradeData();
        }, false);

        document.getElementById('STrChOThroneUseAutoTokensMax').addEventListener('change', function () {
            STrChOThroneUpgradeData.useAutoTokensMax = document.getElementById('STrChOThroneUseAutoTokensMax').value;
            SAVESTrChOThroneUpgradeData();
        }, false);


        document.getElementById('STrChOThroneUpgradePower').addEventListener('click', function () {
            t.togglePower(this);
        }, false);

        document.getElementById('STrChOThroneHourglassLevelSpecific').addEventListener('change', function () {
            STrChOThroneUpgradeData.hourglassLevelSpecific = document.getElementById('STrChOThroneHourglassLevelSpecific').checked;
            SAVESTrChOThroneUpgradeData();
            t.doAction();
        }, false);

        document.getElementById('STrChOThroneHourglassQualitySpecific').addEventListener('change', function () {
            STrChOThroneUpgradeData.hourglassQualitySpecific = document.getElementById('STrChOThroneHourglassQualitySpecific').checked;
            SAVESTrChOThroneUpgradeData();
            t.doAction();
        }, false);

        document.getElementById('STrChOThroneOverrideSpeedUps').addEventListener('change', function () {
            STrChOThroneUpgradeData.overrideSpeedUp = document.getElementById('STrChOThroneOverrideSpeedUps').checked;
            SAVESTrChOThroneUpgradeData();
            t.doAction();
        }, false);

        document.getElementById('STrChOThroneUseWH').addEventListener('change', function () {
            STrChOThroneUpgradeData.useWH = document.getElementById('STrChOThroneUseWH').checked;
            SAVESTrChOThroneUpgradeData();
            if (STrChOThroneUpgradeData.useWH) t.doAction();
        }, false);

        document.getElementById('STrChOThroneUseDH').addEventListener('change', function () {
            STrChOThroneUpgradeData.useDH = document.getElementById('STrChOThroneUseDH').checked;
            SAVESTrChOThroneUpgradeData();
            if (STrChOThroneUpgradeData.useDH) t.doAction();
        }, false);

        document.getElementById('STrChOThroneUseEH').addEventListener('change', function () {
            STrChOThroneUpgradeData.useEH = document.getElementById('STrChOThroneUseEH').checked;
            SAVESTrChOThroneUpgradeData();
            if (STrChOThroneUpgradeData.useEH) t.doAction();
        }, false);

        document.getElementById('STrChOThroneUseSH').addEventListener('change', function () {
            STrChOThroneUpgradeData.useSH = document.getElementById('STrChOThroneUseSH').checked;
            SAVESTrChOThroneUpgradeData();
            if (STrChOThroneUpgradeData.useSH) t.doAction();
        }, false);

        document.getElementById('STrChOThroneUseKH').addEventListener('change', function () {
            STrChOThroneUpgradeData.useKH = document.getElementById('STrChOThroneUseKH').checked;
            SAVESTrChOThroneUpgradeData();
            if (STrChOThroneUpgradeData.useKH) t.doAction();
        }, false);

        document.getElementById('STrChOThroneUseGH').addEventListener('change', function () {
            STrChOThroneUpgradeData.useGH = document.getElementById('STrChOThroneUseGH').checked;
            SAVESTrChOThroneUpgradeData();
            if (STrChOThroneUpgradeData.useGH) t.doAction();
        }, false);

        document.getElementById('STrChOThroneUseMH').addEventListener('change', function () {
            STrChOThroneUpgradeData.useMH = document.getElementById('STrChOThroneUseMH').checked;
            SAVESTrChOThroneUpgradeData();
            if (STrChOThroneUpgradeData.useMH) t.doAction();
        }, false);

        document.getElementById('STrChOThroneUseAH').addEventListener('change', function () {
            STrChOThroneUpgradeData.useAH = document.getElementById('STrChOThroneUseAH').checked;
            SAVESTrChOThroneUpgradeData();
            if (STrChOThroneUpgradeData.useAH) t.doAction();
        }, false);

        document.getElementById('STrChOThroneUseQuality').addEventListener('change', function () {
            STrChOThroneUpgradeData.useQuality = document.getElementById('STrChOThroneUseQuality').value;
            SAVESTrChOThroneUpgradeData();
        }, false);

        document.getElementById('STrChOThroneUseLevel').addEventListener('change', function () {
            STrChOThroneUpgradeData.useLevel = document.getElementById('STrChOThroneUseLevel').value;
            SAVESTrChOThroneUpgradeData();
        }, false);

        document.getElementById('STrChOThroneSpeedUp').addEventListener('change', function () {
            STrChOThroneUpgradeData.useSpeedUp = document.getElementById('STrChOThroneSpeedUp').value;
            SAVESTrChOThroneUpgradeData();
            t.doAction();
        }, false);

        document.getElementById('STrChOThroneHourglassLevel').addEventListener('change', function () {
            STrChOThroneUpgradeData.hourglassLevel = document.getElementById('STrChOThroneHourglassLevel').value;
            SAVESTrChOThroneUpgradeData();
            t.doAction();
        }, false);

        document.getElementById('STrChOThroneHourglassQuality').addEventListener('change', function () {
            STrChOThroneUpgradeData.hourglassQuality = document.getElementById('STrChOThroneHourglassQuality').value;
            SAVESTrChOThroneUpgradeData();
            t.doAction();
        }, false);

        document.getElementById('STrChOThroneUseORB').addEventListener('change', function () {
            STrChOThroneUpgradeData.useORB = document.getElementById('STrChOThroneUseORB').checked;
            SAVESTrChOThroneUpgradeData();
            if (STrChOThroneUpgradeData.useORB) t.doAction();
        }, false);

        document.getElementById('STrChOThroneUseLPS').addEventListener('change', function () {
            STrChOThroneUpgradeData.useLPS = document.getElementById('STrChOThroneUseLPS').checked;
            SAVESTrChOThroneUpgradeData();
            if (STrChOThroneUpgradeData.useLPS) t.doAction();
        }, false);

        document.getElementById('STrChOThroneUsePS').addEventListener('change', function () {
            STrChOThroneUpgradeData.usePS = document.getElementById('STrChOThroneUsePS').checked;
            SAVESTrChOThroneUpgradeData();
            if (STrChOThroneUpgradeData.usePS) t.doAction();
        }, false);

        document.getElementById('STrChOThroneUseLT').addEventListener('change', function () {
            STrChOThroneUpgradeData.useLT = document.getElementById('STrChOThroneUseLT').checked;
            SAVESTrChOThroneUpgradeData();
            if (STrChOThroneUpgradeData.useLT) t.doAction();
        }, false);

        document.getElementById('STrChOThroneUseLLT').addEventListener('change', function () {
            STrChOThroneUpgradeData.useLLT = document.getElementById('STrChOThroneUseLLT').checked;
            SAVESTrChOThroneUpgradeData();
            if (STrChOThroneUpgradeData.useLLT) t.doAction();
        }, false);

        document.getElementById('STrChOThroneQueueAdd').addEventListener('click', function () {
            t.addThroneQueue();
        }, false);

        document.getElementById('STrChOThroneOneItem').addEventListener('change', function () {
            STrChOThroneQueueData.oneItem = document.getElementById('STrChOThroneOneItem').checked;
            SAVESTrChOThroneQueueData();
        });

        document.getElementById('STrChOThroneClearQ').addEventListener('click', function () {
            STrChOThroneQueueData.list = [];
            SAVESTrChOThroneQueueData();
            t.buildThroneQueueDisplay();
        }, false);

        document.getElementById('STrChOThroneEnhanceAddAllQuality').addEventListener('click', function () {
            var low_level = parseInt(document.getElementById('STrChOThroneEnhanceAllQuality').value);
            var high_level = parseInt(document.getElementById('STrChOThroneEnhanceAllQualityTo').value);
            if (low_level >= high_level) return;
            for (ThroneId in uW.kocThroneItems) {
                var ThroneItem = uW.kocThroneItems[ThroneId];
                if (ThroneItem.quality == low_level) {
                    var qItem = new QueueItem();
                    qItem.item = ThroneId;
                    qItem.action = "enhance"
                    qItem.level = high_level
                    STrChOThroneQueueData.list.push(qItem);
                }
            }
            SAVESTrChOThroneQueueData();
            t.buildThroneQueueDisplay();
        }, false);

        document.getElementById('STrChOThroneUpgradeAddAllLevelMax').addEventListener('click', function () {
            var high_level = parseInt(document.getElementById('STrChOThroneUpgradeAddAllLevelMaxTo').value);
            for (ThroneId in uW.kocThroneItems) {
                var ThroneItem = uW.kocThroneItems[ThroneId];
                if (ThroneItem.level < high_level) {
                    var qItem = new QueueItem();
                    qItem.item = ThroneId;
                    qItem.action = "upgrade"
                    qItem.level = high_level
                    STrChOThroneQueueData.list.push(qItem);
                }
            }
            SAVESTrChOThroneQueueData();
            t.buildThroneQueueDisplay();
        }, false);

        document.getElementById('STrChOThroneUpgradeAddAllLevel').addEventListener('click', function () {
            var low_level = parseInt(document.getElementById('STrChOThroneUpgradeAllLevel').value);
            var high_level = parseInt(document.getElementById('STrChOThroneUpgradeAllLevelTo').value);

            if (low_level >= high_level) return;
            for (ThroneId in uW.kocThroneItems) {
                var ThroneItem = uW.kocThroneItems[ThroneId];
                if (ThroneItem.level == low_level) {
                    var qItem = new QueueItem();
                    qItem.item = ThroneId;
                    qItem.action = "upgrade"
                    qItem.level = high_level
                    STrChOThroneQueueData.list.push(qItem);
                }
            }
            SAVESTrChOThroneQueueData();
            t.buildThroneQueueDisplay();
        }, false);

        document.getElementById('STrChOThroneAction').addEventListener('change', function () {
            t.buildThroneLevelWidget();
        }, false);

        // wait for the current repair to finish before starting
        if (STrChOThroneUpgradeData.active)
            t.setStatus("Loading ....");
        else
            t.setStatus("Powered Off");

        t.startTimer();

        t.buildThroneLevelWidget();

        t.refreshAetherDisplay();

        t.buildThroneQueueDisplay();

	},

    startTimer: function () {
        var t = Tabs.throneUpgrader;
        var delay = 2 + Math.random() * 8;
        if (Seed.queue_throne != null && Seed.queue_throne.end != null) {
            var repairTimeLeft = Seed.queue_throne.end - unixTime();
            t.repairEnd = Seed.queue_throne.end;
            t.repairId = Seed.queue_throne.itemId;
            var n = new Date(t.repairEnd * 1000);

            var throne_item = uW.kocThroneItems[t.repairId];

            t.setStatus("Waiting until " + n.toLocaleTimeString() + " for repair to complete.  Item: " + throne_item.name);
            if (STrChOThroneUpgradeData.useSH || STrChOThroneUpgradeData.useKH || STrChOThroneUpgradeData.useGH || STrChOThroneUpgradeData.useMH || STrChOThroneUpgradeData.useAH || STrChOThroneUpgradeData.useWH || STrChOThroneUpgradeData.useDH || STrChOThroneUpgradeData.useEH || (STrChOThroneUpgradeData.overrideSpeedUp && STrChOThroneUpgradeData.useSpeedUp > 0)) {
                var throneQuality = throne_item.quality;
                var throneLevel = throne_item.level;
                var useThoseSpeedups = true;
                if (STrChOThroneUpgradeData.hourglassQualitySpecific && throneQuality < STrChOThroneUpgradeData.hourglassQuality) useThoseSpeedups = false;
                if (STrChOThroneUpgradeData.hourglassLevelSpecific && throneLevel < STrChOThroneUpgradeData.hourglassLevel) useThoseSpeedups = false;
                if (STrChOThroneUpgradeData.overrideSpeedUp) useThoseSpeedups = true;
                if (useThoseSpeedups) {
                    setTimeout(function () { t.doSpeedup(); }, 2000);
                }
            }
            setTimeout(t.clearRepair, (repairTimeLeft + 1) * 1000);
            if (repairTimeLeft > 0) delay += repairTimeLeft;
        }

        if (t.timerH == null)
            t.timerH = setTimeout(t.doAction, delay * 1000);
    },

	hide: function () {},

    refreshAetherDisplay : function () {
        document.getElementById('STrChOThroneAetherDisplay').innerHTML = displayCityAstone();
    },

	show: function () {
		var t = Tabs.throneUpgrader;
        t.startTimer();
        t.refreshAetherDisplay();
        t.buildThroneQueueDisplay();
	},

    doAction: function () {
        var t = Tabs.throneUpgrader;
        if (STrChOThroneRepairData.active) {
            t.setStatus('Waiting for repair tab to finish...');
            return;
        }
        var retryTime = STrChOGeneralOptions.retryInterval;

        try { // check if repair is done
            var ti = t.clearRepair();
            if (ti <= 0) { // repair is done
                if (STrChOThroneQueueData.oneItem || (STrChOThroneQueueData.doingRepairs == true)) {
                    for (queueItems in STrChOThroneQueueData.list) {
                        var qItem = STrChOThroneQueueData.list[queueItems];
                        if (!qItem) continue;
                        var throneItem = uW.kocThroneItems[qItem.item];

                        if ((throneItem == null) || (STrChOThroneQueueData.list[queueItems].status == "complete")) continue;

                        if (throneItem.isBroken) {
                            t.doRepair(throneItem.id);
                            clearTimeout(t.timerH);
                            t.timerH = setTimeout(t.doAction, retryTime * 1000);
                            return;
                        } else if (STrChOThroneQueueData.oneItem) {
                            break;
                        }
                    }
                }
                STrChOThroneQueueData.doingRepairs = false; // all repairs complete
                t.selectNext();  // set the index
                SAVESTrChOThroneQueueData();
                // if we reach the end of the queue, start repair cycle
                if (STrChOThroneQueueData.index < 0) {
                    t.setStatus("Reached end of queue.")
                    t.setResult("");
                    if (!STrChOThroneUpgradeData.active) t.setStatus("Powered Off");
                    STrChOThroneQueueData.doingRepairs = true;
                    SAVESTrChOThroneQueueData();
                    clearTimeout(t.timerH);
                    t.timerH = setTimeout(t.doAction, retryTime * 1000);
                    return;
                }
                // upgrade/enhance next item
                var qItem = STrChOThroneQueueData.list[STrChOThroneQueueData.index];

                if (qItem) {
                    if (qItem.action == "enhance")
                        t.doEnhance(qItem.item);
                    else
                        t.doUpgrade(+qItem.item, false);
                }
            } else {
                // come back after repair is complete
                retryTime = ti + 5;
                var n = new Date(t.repairEnd * 1000);
                t.setStatus("Waiting until " + n.toLocaleTimeString() + " for repair to complete.  Item: " + uW.kocThroneItems[t.repairId].name);
                if (STrChOThroneUpgradeData.useSH || STrChOThroneUpgradeData.useKH || STrChOThroneUpgradeData.useGH || STrChOThroneUpgradeData.useMH || STrChOThroneUpgradeData.useAH || STrChOThroneUpgradeData.useWH || STrChOThroneUpgradeData.useDH || STrChOThroneUpgradeData.useEH || (STrChOThroneUpgradeData.overrideSpeedUp && STrChOThroneUpgradeData.useSpeedUp > 0)) {
                    var throneItem = uW.kocThroneItems[t.repairId];
                    var trQuality = throneItem.quality;
                    var trLevel = throneItem.level;
                    var useThoseSpeedups = true;
                    if (STrChOThroneUpgradeData.hourglassQualitySpecific && trQuality < STrChOThroneUpgradeData.hourglassQuality) useThoseSpeedups = false;
                    if (STrChOThroneUpgradeData.hourglassLevelSpecific && trLevel < STrChOThroneUpgradeData.hourglassLevel) useThoseSpeedups = false;
                    if (STrChOThroneUpgradeData.overrideSpeedUp) useThoseSpeedups = true;
                    if (useThoseSpeedups) {
                        setTimeout(function () { t.doSpeedup(); }, 2000);
                    }
                    retryTime = 1;
                }
            }
            CM.ThroneView.renderInventory(uW.kocThroneItems);
        } catch (e) {
        }
        // recycle
        clearTimeout(t.timerH);
        t.timerH = setTimeout(t.doAction, retryTime * 1000);
    },

    doSpeedup: function () {
        var t = Tabs.throneUpgrader;

        var endTime = t.repairEnd;
        var startTime = unixTime();
        var secondsForRepair = endTime - startTime;
        var divId = "";

        t.speedup = 0;

        if (secondsForRepair > 0 && STrChOThroneUpgradeData.overrideSpeedUp && STrChOThroneUpgradeData.useSpeedUp > 0) {
            t.speedup = STrChOThroneUpgradeData.useSpeedUp;
        } else {
            if (t.speedup == 0 && secondsForRepair >= HOURGLASSES_TIME_MIN_THRESHOLD.day25 && STrChOThroneUpgradeData.useEH && uW.ksoItems[8].count > 0) { t.speedup = 8; }
            if (t.speedup == 0 && secondsForRepair >= HOURGLASSES_TIME_MIN_THRESHOLD.hour24 && STrChOThroneUpgradeData.useDH && uW.ksoItems[7].count > 0) { t.speedup = 7; }
            if (t.speedup == 0 && secondsForRepair >= HOURGLASSES_TIME_MIN_THRESHOLD.hour15 && STrChOThroneUpgradeData.useWH && uW.ksoItems[6].count > 0) { t.speedup = 6; }
            if (t.speedup == 0 && secondsForRepair >= HOURGLASSES_TIME_MIN_THRESHOLD.hour8 && STrChOThroneUpgradeData.useAH && uW.ksoItems[5].count > 0) { t.speedup = 5; }
            if (t.speedup == 0 && secondsForRepair >= HOURGLASSES_TIME_MIN_THRESHOLD.hour25 && STrChOThroneUpgradeData.useMH && uW.ksoItems[4].count > 0) { t.speedup = 4; }
            if (t.speedup == 0 && secondsForRepair >= HOURGLASSES_TIME_MIN_THRESHOLD.hour1 && STrChOThroneUpgradeData.useGH && uW.ksoItems[3].count > 0) { t.speedup = 3; }
            if (t.speedup == 0 && secondsForRepair >= HOURGLASSES_TIME_MIN_THRESHOLD.minute15 && STrChOThroneUpgradeData.useKH && uW.ksoItems[2].count > 0) { t.speedup = 2; }
            if (t.speedup == 0 && secondsForRepair >= HOURGLASSES_TIME_MIN_THRESHOLD.minute1 && STrChOThroneUpgradeData.useSH && uW.ksoItems[1].count > 0) { t.speedup = 1; }
        }
        switch (t.speedup) {
            case "1":
            case 1:
                secondsForRepair -= HOURGLASSES_TIME.minute1;
                divId = 'STrChOThroneUseSHLabel';
                break;
            case "2":
            case 2:
                secondsForRepair -= HOURGLASSES_TIME.minute15;
                divId = 'STrChOThroneUseKHLabel';
                break;
            case "3":
            case 3:
                secondsForRepair -= HOURGLASSES_TIME.hour1;
                divId = 'STrChOThroneUseGHLabel';
                break;
            case "4":
            case 4:
                secondsForRepair -= HOURGLASSES_TIME.hour25;
                divId = 'STrChOThroneUseMHLabel';
                break;
            case "5":
            case 5:
                secondsForRepair -= HOURGLASSES_TIME.hour8;
                divId = 'STrChOThroneUseAHLabel';
                break;
            case "6":
            case 6:
                secondsForRepair -= HOURGLASSES_TIME.hour15;
                divId = 'STrChOThroneUseWHLabel';
                break;
            case "7":
            case 7:
                secondsForRepair -= HOURGLASSES_TIME.hour24;
                divId = 'STrChOThroneUseDHLabel';
                break;
            case "8":
            case 8:
                secondsForRepair -= HOURGLASSES_TIME.day25;
                divId = 'STrChOThroneUseEHLabel';
                break;
        }

        if (t.speedup != 0) {
            t.setResult('Used ' + uW.ksoItems[t.speedup].name);
            var divCount = uW.ksoItems[t.speedup].count - 1;
            var divSpeedups = document.getElementById(divId);
            divSpeedups.innerHTML = divCount;
            uW.modal_speedup_apply("throne", t.speedup, t.repairId);

            if (secondsForRepair <= 0) {
                secondsForRepair = 0;
                endTime = startTime;
                t.clearTimerH = setTimeout(t.clearRepair, 1000);
                t.buildThroneQueueDisplay();
            } else {
                endTime = unixTime() + secondsForRepair;
                t.repairEnd = endTime;
                var n = new Date(t.repairEnd * 1000);
                var item = uW.kocThroneItems[t.repairId];
                t.setStatus("Repair begun ... Repair will be complete at " + n.toLocaleTimeString() + ". Item: " + item.name);
                t.clearTimerH = setTimeout(t.clearRepair, secondsForRepair * 1000);
                t.buildThroneQueueDisplay();
            }
            t.repairEnd = endTime;
            setTimeout(function () { t.doSpeedup(); }, 1000);
        }
    },

    selectNext: function () {

        if (STrChOThroneQueueData.index >= STrChOThroneQueueData.list.length) STrChOThroneQueueData.index = 0;
        if (STrChOThroneQueueData.index < 0) STrChOThroneQueueData.index = 0;
        // for single item mode, always start from the top
        if (STrChOThroneQueueData.oneItem) STrChOThroneQueueData.index = 0;
        var l = STrChOThroneQueueData.list.length;
        for (i = STrChOThroneQueueData.index; i < l; i++) {
            var item = STrChOThroneQueueData.list[i];
            if (!item) continue;
            var throneItem = uW.kocThroneItems[item.item];
            if ((STrChOThroneQueueData.list[i].status != "complete") && (throneItem != null) && (!throneItem.isBroken)) {
                if (((item.action == "enhance") && (item.level <= throneItem.quality)) || ((item.action == "upgrade") && (item.level <= throneItem.level))) {
                    item.status = "complete";
                } else {
                    STrChOThroneQueueData.index = i;
                    return;
                }
            }
        }
        STrChOThroneQueueData.index = -1; // if we get here, the queue is complete
    },

    doEnhance: function (eItem) {
        var t = Tabs.throneUpgrader;
        try {
            if (STrChOThroneUpgradeData.active == false || eItem == 0) {
                t.setStatus("Powered Off");
                return;
            }
            var throne_item = uW.kocThroneItems[eItem];

            if (!throne_item) return;

            if (throne_item.isBroken) {
                // repair and then try again later
                t.doRepair(eItem);
                return;
            }

            var num_city = pickAetherUseCity();
            if (num_city < 0) {
                t.setStatus("Not enough aetherstones to enhance.  Minimum of " + STrChOGeneralOptions.minStones + " needed.  Waiting for more ...");
                return;
            }

            var t_city = uW.currentcityid;
            uW.currentcityid = Seed.cities[num_city][0];
            var w = CM.ThronePanelController.calcCost("enhance", throne_item, null, "stones");
            uW.currentcityid = t_city;

            if ((w.gems.use > 0) || (w.stones.total > parseInt(Seed.resources["city" + Seed.cities[num_city][0]]["rec5"][0]))) {
                t.setStatus("Not enough aetherstones to enhance.");
                return;
            }

            var qI = STrChOThroneQueueData.list[STrChOThroneQueueData.index];
            if (qI) {
                qI.triesTotal++;
                qI.triesThis++;
            }

            var buffItemId = 0;

            var useDiv = '';

            if (STrChOThroneUpgradeData.active && STrChOThroneQueueData.index != -1 && STrChOThroneUpgradeData.useQuality <= throne_item.quality) {
                if (STrChOThroneUpgradeData.useORB) {
                    if (Seed.items['i20004'] > 0) {
                        buffItemId = 20004;
                        useDiv = 'STrChOThroneUseORBLabel';
                    }
                }
                /*      if (TRupgradeData.useLORB) {
                if (Seed.items['i20003'] > 0) buffItemId = 20003;
                } */
                if (STrChOThroneUpgradeData.usePS) {
                    if (Seed.items['i20002'] > 0) {
                        buffItemId = 20002;
                        useDiv = 'STrChOThroneUsePSLabel';
                    }
                }
                if (STrChOThroneUpgradeData.useLPS) {
                    if (Seed.items['i20001'] > 0) {
                        buffItemId = 20001;
                        useDiv = 'STrChOThroneUseLPSLabel';
                    }
                }
                if (buffItemId) CM.InventoryView.removeItemFromInventory(buffItemId);
            }

            if (useDiv != '') document.getElementById(useDiv).innerHTML = uW.ksoItems[buffItemId].count;

            var params = uW.Object.clone(ajfx);
            params.ctrl = 'throneRoom\\ThroneRoomServiceAjax';
            params.action = 'upgradeQuality';
            params.throneRoomItemId = eItem;

            params.payment = "aetherstone";
            params.buffItemId = buffItemId;
            params.cityId = Seed.cities[num_city][0];

            t.setStatus("Sending enhance request");
            new AjaxRequest(uW.g_ajaxpath + "ajax/_dispatch53.php" + uW.g_ajaxsuffix, {
                method: "post",
                parameters: params,
                loading: true,
                onSuccess: function (transport) {
                    try {
                        var rslt = eval("(" + transport.responseText + ")");
                        if (rslt.updateSeed) uW.update_seed(rslt.updateSeed);
                        if (rslt.ok) {
                            Seed.resources["city" + Seed.cities[num_city][0]]["rec5"][0] = Seed.resources["city" + Seed.cities[num_city][0]]["rec5"][0] - rslt.aetherstones;
                            if (rslt.gems > 0) {
                                ActionLog('Upgrader accidentally spent gems!  Upgrader turned off');
                                t.setStatus("Error ... shutting down");
                                STrChOThroneUpgradeData.active = false;
                                SAVESTrChOThroneUpgradeData();
                            }

                            throne_item.level = rslt.item.level;
                            throne_item.quality = rslt.item.quality
                            throne_item.status = rslt.item.status;

                            if (rslt.success) {
                                throne_item.name = throne_item.createName();
                                STrChOThroneUpgradeStats.enhanceSuccess[throne_item.quality - 1][throne_item.level]++;
                                SAVESTrChOThroneUpgradeStats();
                                t.setResult("Enhance successful.  " + addCommas(rslt.aetherstones) + " aetherstones used.");
                                t.refreshAetherDisplay();
                                t.setStatus("Attempting next action");
                                CM.sounds.play("tr_success_build");
                                // update the cost line
                                var qItem = STrChOThroneQueueData.list[STrChOThroneQueueData.index];
                                if (qItem) {
                                    var now = new Date();
                                    qItem.lastUpgrade = "Enhanced to " +  throneCardQualities[throne_item.quality] + " " + now.toDateString().substring(3, 10) + " " + now.toTimeString().substring(0, 8) + " in " + qItem.triesThis + " attempts";
                                    if (!qItem.upgrades) qItem.upgrades = [];
                                    qItem.upgrades.push(qItem.lastUpgrade);
                                    var msg = 'Enhanced ' + uW.kocThroneItems[eItem].name + ' [ ' + eItem + '] to quality ' + rslt.item.quality + " in " + qItem.triesThis + " attempts. " + qItem.triesTotal + " total attempts for this item.";
                                    if (STrChOGeneralOptions.whisperToMe) sendChat("/" + Seed.player.name + ' ' + msg);
                                    if (STrChOGeneralOptions.sendToInbox) sendComposedMail(Seed.player.name, 'THRONE: Enhance Success : ' + uW.kocThroneItems[eItem].name, msg);
                                    SuccessLog(msg);
                                    if (qItem.level <= throne_item.quality) {
                                        qItem.status = "complete";
                                        STrChOThroneUpgradeData.newUpgradeState = 2;
                                    }
                                    else {
                                        var now = new Date();
                                        qItem.status = "Partially enhanced";
                                        qItem.triesLast = qItem.triesThis;
                                        qItem.triesThis = 0;
                                        if (STrChOThroneUpgradeData.newUpgradeState != 2) STrChOThroneUpgradeData.newUpgradeState = 1;
                                    }
                                    SAVESTrChOThroneUpgradeData();
                                    setUpgradeColor();
                                }
                            }
                            else {
                                STrChOThroneUpgradeStats.enhanceFailure[throne_item.quality][throne_item.level]++;
                                SAVESTrChOThroneUpgradeStats();
                                ActionLog('Enhance failed.  Throne Room item ' + uW.kocThroneItems[eItem].name + (buffItemId > 0 ? ' - (' + Seed.items['i' + buffItemId] + ' ' + uW.itemlist['i' + buffItemId].name + ' remaining)' : ''));
                                if (rslt["break"]) {
                                    throne_item.isBroken = true;
                                    throne_item.brokenType = "quality";
                                    throne_item.name = throne_item.createName();
                                }
                                t.setResult("Enhance failed.  " + addCommas(rslt.aetherstones) + " aetherstones used");
                                t.refreshAetherDisplay();
                                var qItem = STrChOThroneQueueData.list[STrChOThroneQueueData.index];
                                if (qItem) if (qItem.status == "not started") qItem.status = "started";
                            }
                            CM.ThroneView.renderInventory(uW.kocThroneItems);
                            SAVESTrChOThroneQueueData();
                            t.buildThroneQueueDisplay();
                            clearTimeout(t.timerH);
                            t.timerH = setTimeout(t.doAction, 10 * 1000);
                        }
                        else {
                            t.setStatus("Unable to enhance at this time ... waiting for next cycle");

                        }
                    } catch (e) {

                    }
                    return;
                },
                onFailure: function (rst) {
                    t.setStatus("Unable to send enhance request.  Waiting for next cycle");
                    return;
                }
            });
        } catch (e) {

        }
        return;
    },

    doUpgrade: function (uItemId, bypass) {
        var t = Tabs.throneUpgrader;

        var throne_item = uW.kocThroneItems[uItemId];

        if (uItemId == 0 || throne_item == null) {
            t.setStatus("Item not found.");
            return;
        }

        if ((STrChOThroneUpgradeData.active == false) && (bypass != true)) {
            t.setStatus("Powered Off");
            return;
        }

        if (bypass == true && Tabs.throneSalvager.deleting != true) {
            // delete cycle has been canceled.  Don't upgrade this item
            return;
        }

        if (throne_item.isBroken) {
            // repair and then try again later
            t.doRepair(uItemId);
            return;
        }

        var num_city = pickAetherUseCity();
        if (num_city < 0) {
            t.setStatus("Not enough aetherstones to upgrade.  Minimum of " + STrChOGeneralOptions.minStones + " needed.  Waiting for more ...");
            return;
        }

        var t_city = uW.currentcityid;
        uW.currentcityid = Seed.cities[num_city][0];
        var w = CM.ThronePanelController.calcCost("upgrade", throne_item, null, "stones");
        uW.currentcityid = t_city;

        if ((w.gems.use > 0) || (w.stones.total > parseInt(Seed.resources["city" + Seed.cities[num_city][0]]["rec5"][0]))) {
            t.setStatus("Not enough aetherstones to upgrade.");
            return;
        }

        if (bypass != true) {
            var qI = STrChOThroneQueueData.list[STrChOThroneQueueData.index];
            if (qI) {
                qI.triesTotal++;
                qI.triesThis++;
            }

            t.setStatus("Sending upgrade request ...");
        }

        var buffItemId = 0;

        var useDiv = '';

        if (STrChOThroneUpgradeData.active && STrChOThroneQueueData.index != -1 && STrChOThroneUpgradeData.useLevel <= throne_item.level) {

            if (STrChOThroneUpgradeData.useLT) {
                if (Seed.items['i20006'] > 0) {
                    buffItemId = 20006;
                    useDiv = 'STrChOThroneUseLTLabel';
                }
            }

            if (STrChOThroneUpgradeData.useLLT) {
                if (Seed.items['i20005'] > 0) {
                    buffItemId = 20005;
                    useDiv = 'STrChOThroneUseLLTLabel';
                }
            }

            if (STrChOThroneUpgradeData.usePS) {
                if (Seed.items['i20002'] > 0) {
                    buffItemId = 20002;
                    useDiv = 'STrChOThroneUsePSLabel';
                }
            }

            if (STrChOThroneUpgradeData.useLPS) {
                if (Seed.items['i20001'] > 0) {
                    buffItemId = 20001;
                    useDiv = 'STrChOThroneUseLPSLabel';
                }
            }

        }

        if (STrChOThroneUpgradeData.useAutoTokens) {
            if (STrChOThroneUpgradeData.useAutoTokensMin <= STrChOThroneUpgradeData.useAutoTokensMax) {
                var throneLevel = throne_item.level;
                if (throneLevel >= STrChOThroneUpgradeData.useAutoTokensMin &&
                    throneLevel < STrChOThroneUpgradeData.useAutoTokensMax) {
                    var nextMastersID = getNextAvailableMasters(throne_item);
                    if (nextMastersID != 0) {
                        buffItemId = nextMastersID;
                        ActionLog('Using ' + uW.ksoItems[buffItemId].name + ' on item: ' + throne_item.name);
                    }
                }
            }
        }

        if (buffItemId) CM.InventoryView.removeItemFromInventory(buffItemId);

        if (useDiv != '') document.getElementById(useDiv).innerHTML = uW.ksoItems[buffItemId].count;

        var params = uW.Object.clone(ajfx);
        params.ctrl = 'throneRoom\\ThroneRoomServiceAjax';
        params.action = 'upgradeLevel';
        params.throneRoomItemId = uItemId;
        params.buffItemId = buffItemId;
        params.payment = "aetherstone";
        params.cityId = Seed.cities[num_city][0];


        new AjaxRequest(uW.g_ajaxpath + "ajax/_dispatch53.php" + uW.g_ajaxsuffix, {
            method: "post",
            parameters: params,
            loading: true,
            onSuccess: function (transport) {
                try {

                    var rslt = eval("(" + transport.responseText + ")");
                    if (rslt.ok) {

                        if (rslt.updateSeed) uW.update_seed(rslt.updateSeed);

                        Seed.resources["city" + Seed.cities[num_city][0]]["rec5"][0] = Seed.resources["city" + Seed.cities[num_city][0]]["rec5"][0] - rslt.aetherstones;

                        if (rslt.gems > 0) {
                            t.setStatus("Error .... Shutting down.");
                            ActionLog('Upgrader accidentally spent gems!  Upgrader turned off');
                            STrChOThroneUpgradeData.active = false;
                            SAVESTrChOThroneUpgradeData();
                        }

                        if (rslt.success) {
                            throne_item.level = rslt.item.level;
                            throne_item.quality = rslt.item.quality;
                            throne_item.name = throne_item.createName();

                            if (bypass != true) {
                                t.show();
                                STrChOThroneUpgradeStats.upgradeSuccess[throne_item.quality][throne_item.level - 1]++;
                                SAVESTrChOThroneUpgradeStats();
                                t.setResult("Upgrade successful.  " + addCommas(rslt.aetherstones) + " aetherstones used.");
                                t.refreshAetherDisplay();
                                t.setStatus("Attempting next upgrade");
                                CM.sounds.play("tr_success_build");

                                var qItem = STrChOThroneQueueData.list[STrChOThroneQueueData.index];
                                if (qItem) {
                                    var now = new Date();
                                    qItem.lastUpgrade = "Upgraded to +" + throne_item.level + " " + now.toDateString().substring(3, 10) + " " + now.toTimeString().substring(0, 8) + " in " + qItem.triesThis + " attempts";

                                    if (!qItem.upgrades) qItem.upgrades = [];
                                    qItem.upgrades.push(qItem.lastUpgrade);

                                    var msg = 'Upgraded ' + uW.kocThroneItems[uItemId].name + ' [' + uItemId + '] to level ' + rslt.item.level + " in " + qItem.triesThis + " attempts. " + qItem.triesTotal + " total attempts for this item.";
                                    if (STrChOGeneralOptions.whisperToMe) sendChat("/" + Seed.player.name + ' ' + msg);
                                    if (STrChOGeneralOptions.sendToInbox) sendComposedMail(Seed.player.name, 'THRONE: Upgrade Success : ' + uW.kocThroneItems[uItemId].name, msg);
                                    SuccessLog(msg);
                                    if (qItem.level <= throne_item.level) {
                                        qItem.status = "complete";
                                        STrChOThroneUpgradeData.newUpgradeState = 2;
                                    }
                                    else {
                                        var now = new Date();
                                        qItem.status = "Partially upgraded";
                                        qItem.triesLast = qItem.triesThis;
                                        qItem.triesThis = 0;
                                        if (STrChOThroneUpgradeData.newUpgradeState != 2) STrChOThroneUpgradeData.newUpgradeState = 1;
                                    }
                                    SAVESTrChOThroneUpgradeData();
                                    setUpgradeColor();
                                }
                            }
                        } else {
                            STrChOThroneUpgradeStats.upgradeFailure[throne_item.quality][throne_item.level]++;
                            SAVESTrChOThroneUpgradeStats();
                            ActionLog('Upgrade failed Throne Room item ' + uW.kocThroneItems[uItemId].name);
                            if (!params.buffItemId) {
                                throne_item.isBroken = true;
                                throne_item.brokenType = "level";
                                throne_item.name = throne_item.createName();
                                throne_item.status = rslt.item.status;
                            }
                            if (bypass != true) {
                                t.setResult("Upgrade failed.  " + addCommas(rslt.aetherstones) + " aetherstones used");
                                t.refreshAetherDisplay();
                                var qItem = STrChOThroneQueueData.list[STrChOThroneQueueData.index];
                                if (qItem.status == "not started") qItem.status = "started";
                            }
                        }
                        CM.ThroneView.renderInventory(uW.kocThroneItems);
                        SAVESTrChOThroneQueueData();
                        t.buildThroneQueueDisplay();
                        clearTimeout(t.timerH);
                        t.timerH = setTimeout(t.doAction, 10 * 1000);
                        if (rslt.heatupModifier) CM.HeatUpModel.attemptCallback(+(rslt.heatupModifier));
                        return;
                    } else {
                        if (bypass != true) {
                            t.setStatus("Upgrade request not accepted.  Waiting for next cycle.");
                        } else {
                            if (rslt.msg && rslt.msg.indexOf("Has status 2") > -1) {
                                // the object is in the locked rows.  Shutdown deleting until the next pass
                                Tabs.throneSalvager.delItems = [];
                                Tabs.throneSalvager.deleting = false;
                            }
                        }
                    }
                } catch (e) {
                }
                return;
            },
            onFailure: function (rrr) {
                t.setStatus("Unable to transmitt upgrade request.  Waiting for next cycle.");
                CM.ThroneView.renderInventory(uW.kocThroneItems);
                return;
            }
        });

        return;
    },




    doRepair: function (rItem) {
        var t = Tabs.throneUpgrader;
        var params = uW.Object.clone(ajfx);

        if (STrChOThroneUpgradeData.active == false || rItem == 0 || uW.kocThroneItems[rItem] == null) return; //repair is turned off

        var theItem = uW.kocThroneItems[rItem];

        params.action = 'timeRepair';
        params.throneRoomItemId = rItem;
        params.ctrl = 'throneRoom\\ThroneRoomServiceAjax';

        new AjaxRequest(uW.g_ajaxpath + "ajax/_dispatch53.php" + uW.g_ajaxsuffix, {
            method: "post",
            parameters: params,
            loading: true,
            onSuccess: function (transport) {
                var rslt = eval("(" + transport.responseText + ")");
                if (rslt.ok) {
                    var item = uW.kocThroneItems[rItem];
                    var startTime = unixTime();
                    var endTime = rslt.eta;
                    ActionLog('Starting repair for Throne Room item ' + item.name);
                    Seed.queue_throne.itemId = item.id;
                    Seed.queue_throne.start = startTime;
                    Seed.queue_throne.end = endTime;
                    t.repairId = item.id;
                    t.repairEnd = endTime;
                    var n = new Date(t.repairEnd * 1000);
                    t.setStatus("Repair begun ... Repair will be complete at " + n.toLocaleTimeString() + ". Item: " + item.name);
                    var secondsForRepair = t.repairEnd - startTime;
                    if (secondsForRepair < 0) secondsForRepair = 0;
                    CM.ThroneView.renderInventory(uW.kocThroneItems);
                    t.clearTimerH = setTimeout(t.clearRepair, (secondsForRepair + 1) * 1000);
                    t.buildThroneQueueDisplay();
                    if (STrChOThroneUpgradeData.useSH || STrChOThroneUpgradeData.useKH || STrChOThroneUpgradeData.useGH || STrChOThroneUpgradeData.useMH || STrChOThroneUpgradeData.useAH || STrChOThroneUpgradeData.useWH || STrChOThroneUpgradeData.useDH || STrChOThroneUpgradeData.useEH || (STrChOThroneUpgradeData.overrideSpeedUp && STrChOThroneUpgradeData.useSpeedUp > 0)) {
                        var throneItem = uW.kocThroneItems[t.repairId];
                        var trQuality = throneItem.quality;
                        var trLevel = throneItem.level;
                        var useThoseSpeedups = true;
                        if (STrChOThroneUpgradeData.hourglassQualitySpecific && trQuality < STrChOThroneUpgradeData.hourglassQuality) useThoseSpeedups = false;
                        if (STrChOThroneUpgradeData.hourglassLevelSpecific && trLevel < STrChOThroneUpgradeData.hourglassLevel) useThoseSpeedups = false;
                        if (STrChOThroneUpgradeData.overrideSpeedUp) useThoseSpeedups = true;
                        if (useThoseSpeedups) {
                            setTimeout(function () { t.doSpeedup(); }, 2000);
                        }
                    }
                }
                else {
                    if (rslt.msg == "Item is not broken") {
                        uW.kocThroneItems[rItem].isBroken = false;
                        t.clearRepair();
                    }

                    // regrab the end times in case this is caused by a manual repair
                    if (Seed.queue_throne && Seed.queue_throne.end && Seed.queue_throne.itemId) {
                        t.repairEnd = Seed.queue_throne.end;
                        t.repairId = Seed.queue_throne.itemId;
                    }
                }
                return;
            },
            onFailure: function (ttt) {
                // this usually means a repair is in progress (such as a manual repair). Grab the seed data (if possible)
                if (Seed.queue_throne && Seed.queue_throne.end) {
                    t.repairEnd = Seed.queue_throne.end;
                    t.repairId = Seed.queue_throne.itemId;
                }
                return;
            }
        });
        return;
    },

    clearRepair: function () {
        var t = Tabs.throneUpgrader;
        var timeUntilDone = 0;

        if (t.repairEnd == 0) {
            return timeUntilDone;
        }
        timeUntilDone = t.repairEnd - unixTime();

        if (timeUntilDone <= 0) {
            if (t.repairId != 0 && uW.kocThroneItems[t.repairId] != null) {
                if (uW.kocThroneItems[t.repairId].isBroken == true) {
                    t.setStatus("Repair time complete.");
                }
                uW.kocThroneItems[t.repairId].isBroken = false;
                uW.kocThroneItems[t.repairId].brokenType = "";
                t.repairId = 0;
            }

        }
        CM.ThroneView.renderInventory(uW.kocThroneItems);
        return timeUntilDone;
    },

    addUpgradeItem: function (throneId) {
        var t = Tabs.throneUpgrader;
        var qItem = new QueueItem();
        qItem.item = throneId;
        qItem.action = "upgrade";
        qItem.level = STrChOMaxThroneLevel;
        STrChOThroneQueueData.list.push(qItem);
        SAVESTrChOThroneQueueData();
        document.getElementById('throneInventoryItem' + throneId).className = 'STrChOBlueBorder';
        t.buildThroneQueueDisplay();
    },

    addEnhanceItem: function (throneId) {
        var t = Tabs.throneUpgrader;
        var qItem = new QueueItem();
        qItem.item = throneId;
        qItem.action = "enhance";
        qItem.level = STrChOMaxThroneQuality;
        STrChOThroneQueueData.list.push(qItem);
        SAVESTrChOThroneQueueData();
        document.getElementById('throneInventoryItem' + throneId).className = 'STrChOYellowBorder';
        t.buildThroneQueueDisplay();
    },

    addBothThroneItem: function (throneId) {
        var t = Tabs.throneUpgrader;

        var throneItem = uW.kocThroneItems[throneId];

        if (throneItem == null || !throneItem) return;

        var qual = +throneItem.quality;
        var lev = +throneItem.level;

        if (qual >= STrChOMaxThroneQuality) return;

        var maxLev = null;
        var nextQual = null;
        var qItem = null;

        while (qual < STrChOMaxThroneQuality) {
            maxLev = t.upgradePath[qual].maxLev;
            nextQual = t.upgradePath[qual].nextQual;

            if (lev < maxLev) {
                qItem = new QueueItem();
                qItem.item = throneId;
                qItem.action = "upgrade";
                qItem.level = maxLev;
                STrChOThroneQueueData.list.push(qItem);
                document.getElementById('throneInventoryItem' + throneId).className = 'STrChOBlueBorder';
            }

            qItem = new QueueItem();
            qItem.item = throneId;
            qItem.action = "enhance";
            qItem.level = nextQual;
            STrChOThroneQueueData.list.push(qItem);
            document.getElementById('throneInventoryItem' + throneId).className = 'STrChOYellowBorder';
            lev = maxLev;
            qual = nextQual;
        }

        STrChOThroneQueueData();
        t.buildThroneQueueDisplay();
    },

    addThroneQueue: function () {
        var t = Tabs.throneUpgrader;

        var action = document.getElementById('STrChOThroneAction').value;

        if (action == "both") {
            t.addBothThroneItem(document.getElementById('STrChOThroneUpgradeList').value);
            return;
        }

        var qItem = new QueueItem();
        qItem.item = document.getElementById('STrChOThroneUpgradeList').value;
        qItem.action = document.getElementById('STrChOThroneAction').value;
        qItem.level = document.getElementById('STrChOThroneMaxLevel').value;

        if (qItem.item == 0) return;

        STrChOThroneQueueData.list.push(qItem);
        SAVESTrChOThroneQueueData();
        t.buildThroneQueueDisplay();
    },

    buildThroneLevelWidget: function () {
        var t = Tabs.throneUpgrader;
        var m;
        var STrChOThroneAction = document.getElementById('STrChOThroneAction');
        if (STrChOThroneAction.value == "enhance") {
            m = ' Max: <select class=STrChOSelect id=STrChOThroneMaxLevel>';
            for (qual = 1; qual <= STrChOMaxThroneQuality; qual++) {
                m += '<option value="' + qual + '">' + throneCardQualities[qual] + '</option>';
            }
            m += '</select>';
        } else if (STrChOThroneAction.value == "upgrade") {
            m = ' Max: <select class=STrChOSelect id=STrChOThroneMaxLevel>';
            for (lvl = 1; lvl <= STrChOMaxThroneLevel; lvl++) {
                m += '<option value="' + lvl + '"> +' + lvl + '</option>';
            }
            m += '</select>';
        } else {
            m = ' - <select class=STrChOSelect id=STrChOThroneMaxLevel></select>';
        }

        document.getElementById('STrChOThroneMaxDiv').innerHTML = m;
        if (STrChOThroneAction.value == "enhance") {
            document.getElementById('STrChOThroneMaxLevel').value = STrChOMaxThroneQuality;
        } else if (STrChOThroneAction.value == "upgrade") {
            document.getElementById('STrChOThroneMaxLevel').value = STrChOMaxThroneLevel;
        }

    },

    buildThroneQueueDisplay: function () {
        var t = Tabs.throneUpgrader;

        var STrChOThroneQDiv = document.getElementById('STrChOThroneQDiv');

        var m = '<table id=STrChOThroneQueue width=100%>';
        m += '<tr><th width=10%>Remove</th>';
        m += '<th width=5%>Order</th>';
        m += '<th width=8%>Status</th>';
        m += '<th width=25%>Item</th>';
        m += '<th width=5%>Action</th>';
        m += '<th width=5%>Max</th>';
        m += '<th width=40%>Status/Last Upgrade/Attempts</th></tr>';

        for (var queueIndex = 0; queueIndex < STrChOThroneQueueData.list.length; queueIndex++) {
            var queueItem = STrChOThroneQueueData.list[queueIndex];
            if (!queueItem) continue;
            var throneItem = uW.kocThroneItems[queueItem.item];

            var throneCardName = "Unknown / Item removed";
            var throneId = 0;

            if (throneItem) {
                throneCardName = throneItem.name;
                throneId = throneItem.id;
            }

            m += '<tr>';
            m += '<td align=center><div id=STrChOThroneQueueRemove' + queueIndex + ' class=STrChORemove></div></td>';
            m += '<td align=center><div id=STrChOThroneUpRow' + queueIndex + ' class=STrChOUpRow></div><div class=STrChODownRow  id=STrChOThroneDownRow' + queueIndex + '></div></td>';
            m += '<td align=center><div id=STrChOThroneState' + queueIndex + '></div></td>';
            m += '<td align=center class=STrChOThroneUpdaterItemName><div id=STrChOThroneUpdaterItem' + throneId + ' >' + throneCardName + '</div></td>';
            m += '<td align=center>' + queueItem.action + '</td>';
            m += '<td>';
            if (queueItem.action == "enhance") {
                m += '<div style="text-align: center;"><select class=STrChOSelect id=STrChOThroneChangeLevel' + queueIndex + ' style="width:90px; text-align: center;">';
                for (qual = 1; qual <= STrChOMaxThroneQuality; qual++) {
                    m += '<option value="' + qual + '" ' + (queueItem.level == qual ? 'selected' : '') + '>' + throneCardQualities[qual] + '</option>';
                }
                m += '</select></div>';
            } else {
                m += '<div style="text-align: center;"><select class=STrChOSelect id=STrChOThroneChangeLevel' + queueIndex + ' style="width:90px; text-align: center;">';
                for (lvl = 1; lvl <= STrChOMaxThroneLevel; lvl++) {
                    m += '<option value="' + lvl + '"  ' + (queueItem.level == lvl ? 'selected' : '') + '> +' + lvl + '</option>';
                }
                m += '</select></div>';
            }
            m += '</td>';

            m += '<td style="text-align: center; white-space: pre-wrap;">' + queueItem.status + ' / ';
            if (queueItem.lastUpgrade) m += queueItem.lastUpgrade;
            m += ' / ' + queueItem.triesThis + ' tries this level, ' + queueItem.triesTotal + ' tries total';
            m += '</td>';

            m += '</tr>';
        }
        m += '</table>';

        STrChOThroneQDiv.innerHTML = m;

        for (var queueIndex = 0; queueIndex < STrChOThroneQueueData.list.length; queueIndex++) {
            var queueItem = STrChOThroneQueueData.list[queueIndex];
            if (!queueItem) continue;
            var throneItem = uW.kocThroneItems[queueItem.item];

            if (throneItem) {
                var trId = throneItem.id;

                document.getElementById('STrChOThroneUpdaterItem' + trId).addEventListener('mouseover', function(A) {
                    A.stopPropagation();
                    var throneId = this.id.split('STrChOThroneUpdaterItem')[1];
                    var throneItem = uW.kocThroneItems[throneId];
                    var STrChOCard = document.getElementById('STrChOThroneUpdaterItem' + throneId);
                    CM.ThroneView.hoverItem(A, STrChOCard, throneItem);
                }, false);
            }

            document.getElementById('STrChOThroneQueueRemove' + queueIndex).setAttribute('v1', queueIndex);
            document.getElementById('STrChOThroneQueueRemove' + queueIndex).addEventListener('click', function () {
                var qIndex = this.getAttribute('v1');
                t.deleteQueueItem(qIndex);
            }, false);

            document.getElementById('STrChOThroneUpRow' + queueIndex).setAttribute('v1', queueIndex);
            document.getElementById('STrChOThroneUpRow' + queueIndex).addEventListener('click', function () {
                var qIndex = this.getAttribute('v1');
                t.moveUpRow(qIndex);
            }, false);

            document.getElementById('STrChOThroneDownRow' + queueIndex).setAttribute('v1', queueIndex);
            document.getElementById('STrChOThroneDownRow' + queueIndex).addEventListener('click', function () {
                var qIndex = this.getAttribute('v1');
                t.moveDownRow(qIndex);
            }, false);

            document.getElementById('STrChOThroneChangeLevel' + queueIndex).setAttribute('v1', queueIndex);
            document.getElementById('STrChOThroneChangeLevel' + queueIndex).addEventListener('change', function () {
                var qIndex = this.getAttribute('v1');
                var itemLevel = this.value;
                t.changeLevel(qIndex, itemLevel);
            }, false);

            if (!throneItem || !(throneItem.id)) {
                document.getElementById('STrChOThroneState' + queueIndex).innerHTML = '<div style="text-align:center"> ??</div>';
            } else if (queueItem.status == "complete") {
                document.getElementById('STrChOThroneState' + queueIndex).className = 'STrChOSuccess';
            } else if (throneItem.isBroken) {
                if (throneItem.id == t.repairId) {
                    document.getElementById('STrChOThroneState' + queueIndex).className = 'STrChOHammer';
                } else {
                    document.getElementById('STrChOThroneState' + queueIndex).className = 'STrChOBroken';
                }
            } else {
                document.getElementById('STrChOThroneState' + queueIndex).innerHTML = '<div class=STrChOGoButton></div>';
            }
        }
    },

    deleteQueueItem: function (index) {
        // delete an item from the queue
        var t = Tabs.throneUpgrader;
        STrChOThroneQueueData.list.splice(index, 1);
        if (index > STrChOThroneQueueData.index) STrChOThroneQueueData.index--;
        SAVESTrChOThroneQueueData();
        t.buildThroneQueueDisplay();
    },

    moveUpRow: function (index) {
        if (index < 1) return;
        var t = Tabs.throneUpgrader;
        var qItem = STrChOThroneQueueData.list.splice(index, 1);
        STrChOThroneQueueData.list.splice(index - 1, 0, qItem[0]);

        if (index == STrChOThroneQueueData.index)
            STrChOThroneQueueData.index--;
        else if (STrChOThroneQueueData.index == index - 1)
            STrChOThroneQueueData.index++;

        SAVESTrChOThroneQueueData();
        t.buildThroneQueueDisplay();
    },

    moveDownRow: function (index) {
        if (index > (STrChOThroneQueueData.list.length - 2)) return;

        var t = Tabs.throneUpgrader;
        var qItem = STrChOThroneQueueData.list.splice(index, 1);
        STrChOThroneQueueData.list.splice(index + 1, 0, qItem[0]);

        if (index == STrChOThroneQueueData.index)
            STrChOThroneQueueData.index++;
        else if (STrChOThroneQueueData.index == index + 1)
            STrChOThroneQueueData.index--;

        SAVESTrChOThroneQueueData();
        t.buildThroneQueueDisplay();

    },

    changeLevel: function (index, level) {
        var t = Tabs.throneUpgrader;

        var queueItem = STrChOThroneQueueData.list[index];
        if (!queueItem) return;

        queueItem.level = level;
        if (queueItem.status == "complete") queueItem.status = "started";
        SAVESTrChOThroneQueueData();
        t.buildThroneQueueDisplay();
    },

    setStatus: function (s) {
        document.getElementById('STrChOThroneUpgradeStatus').innerHTML = '<div>' + s + '</div>';
    },

    setResult: function (s) {
        document.getElementById('STrChOThroneLastResult').innerHTML = '<div>' + s + '</div>';
    },

    togglePower: function (obj) {
        var t = Tabs.throneUpgrader;

        if (!STrChOThroneUpgradeData.active && STrChOThroneRepairData.active) {
            alert('You must disable repair tab first');
            return;
        }

        var btn = document.getElementById('STrChOThroneUpgradePower');
        if (STrChOThroneUpgradeData.active) {
            STrChOThroneUpgradeData.active = false;
            btn.value = 'Upgrader = OFF';
            t.setStatus('Powered Off');
            t.setResult('');

        } else {
            STrChOThroneUpgradeData.active = true;
            btn.value = "Upgrader = ON";
            t.setStatus("Powered On");
            t.setResult("");
        }

        if (!STrChOThroneUpgradeData.active) {

        }

        t.updateThroneMenu();
        SAVESTrChOThroneUpgradeData();
    },

    updateThroneMenu: function () {
        if (!document.getElementById('STrChOExecuteUpgrader')) return;
        document.getElementById('STrChOExecuteUpgrader').innerHTML = 'Upgrade ' + (STrChOThroneUpgradeData.active ? 'ON' : 'OFF');
    },
}

Tabs.throneSalvager = {
	tabOrder: 102,
	tabLabel: 'SALVAGER',
	tabColor: 'red',
    tabHeader: 'THRONE ROOM SALVAGER',
    delItems: [],
    deleting: false,
    rowNum: 0,
    timer: null,
    city: null,
    cityNum: 0,
    sTimer: null,
    delTimer: null,
    upgradeProfit: true,

	init: function (div) {
		var t = Tabs.throneSalvager;
		t.mydiv = div;

		var m = '<div class=STrChOHeader>' + t.tabHeader + '</div>';
        m += '<div style="height: ' + (dlgHeight - (dlgHeightOffset*2.5)) + 'px; width: ' + (dlgWidth - dlgWidthMenu) + 'px; margin-top:5px; margin-bottom:5px; overflow-x: auto; overflow-y: auto; position: static;">';

		m += '<div>';
        m += '<table class=STrChOSectionTable>';
        m += '<tr>';
        if (STrChOThroneSalvageData.active) {
            m += '<td width=33%><input id=STrChOThroneSalvagePower type=button class=STrChOButton value="Salvager = ON"></td>';
        } else {
            m += '<td width=33%><input id=STrChOThroneSalvagePower type=button class=STrChOButton value="Salvager = OFF"></td>';
        }
        m += '<td width=33%><div class=divNoWrap align=center>';
        m += 'Keep All: <select id=STrChOThroneSalvageQuality class=STrChOSelect>';
        for (i = 1; i <= STrChOMaxThroneQuality; i++) {
            m += '<option value="' + i + '">' + throneCardQualities[i].capitalizeFirstLetter() + '+</option>';
        }
        m += '</select>';
        m += '</div></td>';
        m += '<td width=33%><div class=divNoWrap>Keep The First <input style="text-align: center;" id=STrChOThroneSaveNum class=STrChOTextbox type=text size=3 maxlength=3 value="' + STrChOThroneSalvageData.throneSaveNum + '"/> Cards</div></td>';
        m += '</tr>';
        m += '<tr><td colspan=3><hr class=STrChOHRCenter></td></tr>';
        m += '<tr><td colspan=3><div class=indent5 id=STrChOThroneSalvageStatus></div></td></tr>';
        m += '<tr><td colspan=3><div class=indent5 id=STrChOThroneNumSalv><br></div></td></tr>';
        m += '</table>';
        m += '</div>';

        m += '<div class=STrChOHeader id=STrChOThroneSimpleRule onmouseover="this.style.cursor=\'pointer\'"><img src="'+STrChORightArrow+'"/>&nbsp;SIMPLE RULES&nbsp;<img class=STrChOReverseImage src="'+STrChORightArrow+'"/></div>';

        m += '<div class=STrChOSection style="position: static; width: 100%; height: 200px; overflow-x: hidden; overflow-y: auto;">';
        m += '<table class=STrChOSectionTable>';
        m += '<tr><td>';
        m += '<table>';
        m += '<tr><td><b>Define Throne Items To Keep:</b></td>';
        m += '<td alight=left><div><span>Faction: <select id=STrChOThroneFactionType class=STrChOSelect>';
        m += '  <option value="any">Any</option>';
        for (var fact = 0; fact < STrChOFactions.length; fact++) m += '<option value="' + STrChOFactions[fact] + '">' + STrChOFactions[fact].capitalizeFirstLetter() + '</option>';
        m += '</select></span></div></td>';
        m += '<td alight=left><div><span>Card Type: <select id=STrChOThroneCardType class=STrChOSelect>';
        m += '  <option value="any">Any</option>';
        for (var tct = 0; tct < throneCardTypes.length; tct++) m += '  <option value="' + throneCardTypes[tct] + '">' + throneCardTypes[tct].capitalizeFirstLetter() + '</option>';
        m += '</select></span></div></td>';
        m += '<td align=right><input id=STrChOThroneAddRule type=button class=STrChOButton value="Create Rule"/></td>';
        m += '</tr>';
        m += '</table>';
        m += '</td></tr>';
        m += '<tr><td>';
        m += '<table id=STrChOThroneConditionTable style="padding-left: 5px;">';
        m += '<tr><td align=left colspan=1><input id=STrChOThroneAddRow type=button class=STrChOButton value="Add Row"/></td>';
        m += '<td></td><td></td><td></td><td></td><td></td></tr>';
        m += '</table>';
        m += '</td></tr>';
        m += '</table>';
        m += '</div>';   //end of STrChOSection

        m += '<div class=STrChOHeader id=STrChOThroneAdvancedRule onmouseover="this.style.cursor=\'pointer\'"><img src="'+STrChORightArrow+'"/>&nbsp;ADVANCED RULES&nbsp;<img class=STrChOReverseImage src="'+STrChORightArrow+'"/></div>';

        m += '<div class=STrChOSection>';
        m += '<table class=STrChOSectionTable>';
        m += '<tr><td>';
        m += '<table>';
        m += '<tr><td colspan=4><input class=STrChOButton type=button id=STrChOThroneAdvancedReset value="Reset"></tr>';
        m += '<tr>';
        m += '<td><b>Define Throne Items To Keep:</b></td>';
        m += '<td alight=left><div><span>Faction: <select id=STrChOThroneFactionTypeAdvanced class=STrChOSelect>';
        m += '  <option value="any">Any</option>';
        for (var fact = 0; fact < STrChOFactions.length; fact++) m += '<option value="' + STrChOFactions[fact] + '">' + STrChOFactions[fact].capitalizeFirstLetter() + '</option>';
        m += '</select></span></div></td>';
        m += '<td alight=left><div><span>Card Type: <select id=STrChOThroneCardTypeAdvanced class=STrChOSelect>';
        m += '  <option value="any">Any</option>';
        for (var tct = 0; tct < throneCardTypes.length; tct++) m += '  <option value="' + throneCardTypes[tct] + '">' + throneCardTypes[tct].capitalizeFirstLetter() + '</option>';
        m += '</select></span></div></td>';
        m += '<td align=right><input id=STrChOThroneAddRuleAdvanced type=button class=STrChOButton value="Create Rule"/></td>';
        m += '</tr>';
        m += '</table>';
        m += '</td></tr>';
        m += '<tr><td>';
        m += '<table width=100% id=STrChOThroneConditionTableAdvanced>';
        m += '<tr>';
        m += '<td width=20%>ROW 1</td>';
        m += '<td width=20%>ROW 2</td>';
        m += '<td width=20%>ROW 3</td>';
        m += '<td width=20%>ROW 4</td>';
        m += '<td width=20%>ROW 5</td>';
        m += '</tr>';
        m += '<tr>';
        m += '<td width=20%><div><select style="max-width: 125px;" id=STrChOThroneRow1Advanced class=STrChOSelect></select></div></td>';
        m += '<td width=20%><div><select style="max-width: 125px;" id=STrChOThroneRow2Advanced class=STrChOSelect></select></div></td>';
        m += '<td width=20%><div><select style="max-width: 125px;" id=STrChOThroneRow3Advanced class=STrChOSelect></select></div></td>';
        m += '<td width=20%><div><select style="max-width: 125px;" id=STrChOThroneRow4Advanced class=STrChOSelect></select></div></td>';
        m += '<td width=20%><div><select style="max-width: 125px;" id=STrChOThroneRow5Advanced class=STrChOSelect></select></div></td>';
        m += '</tr>';
        m += '</table>';
        m += '</td></tr>';
        m += '</table>';
        m += '</div>';   //end of STrChOSection

        m += '<div class=STrChOHeader id=STrChOThroneAdvancedRule onmouseover="this.style.cursor=\'pointer\'"><img src="'+STrChORightArrow+'"/>&nbsp;AUTO LOAD RULES&nbsp;<img class=STrChOReverseImage src="'+STrChORightArrow+'"/></div>';

        m += '<div class=STrChOSection>';
        m += '<table class=STrChOSectionTable>';

        m += '<tr><td><b>&nbsp;Define Effect:</b><select id=STrChOThroneAutoLoadEffect class=STrChOSelect>';
        m += '<option value="0">--Select--</option>';
        for (var efx in CM.thronestats.effects) m += '<option value="' + efx + '">' + CM.thronestats.effects[efx][1] + '</option>';
        m += '</select><input type=button class=STrChOButton id=STrChOThroneAutoLoad value="Auto Load">';
        m += '</td></tr>';

        m += '</table>';
        m += '</div>';

        m += '<div class=STrChOHeader>&nbsp;RULES LIST&nbsp;</div>';

        m += '<div>';
        m += '<table class=STrChOSectionTable>';
        m += '<tr><td align=center>';
        m += 'Sort By Card Type: <select id=STrChOThroneSalvageSortCard class=STrChOSelect>';
        m += '<option value="0">--Select--</option>';
        for (tct = 0; tct < throneCardTypes.length; tct++) m += '  <option value="' + throneCardTypes[tct] + '">' + throneCardTypes[tct].capitalizeFirstLetter() + '</option>';
        m += '</select>';
        m += '</td></tr>';
        m += '<tr><td align=center>';
        m += '<b>Salvager Will Keep Items Matching These Rules <i><div class=divNoWrap id=STrChOThroneRuleCount></div></i></b>';
        m += '</td></tr>';
        m += '<tr><td align=center>';
        m += '<div align=center>';
        m += '<table align=center width=100%>';
        m += '<tr>';
        m += '<td align=left><input id=STrChOThroneButtonSaveItem type=button class=STrChOButton value="Save Rules">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
        m += '<input id=STrChOThroneClearAllRules type=button class=STrChOButton value="Clear All Rules"></td>';
        m += '<td align=right>'
        m += '<input id=STrChOThroneButtonLoadItem type=button class=STrChOButton value="Load Rules">';
        m += '<input class=STrChOButton type=button id=STrChOThroneFileDrop onclick="document.getElementById(\'STrChOThroneFileLoadItem\').click()" value="Browse...">';
        m += '<input id=STrChOThroneFileLoadItem style="visibility: hidden; height:0px; width: 0px;" type=file>';
        m += '</td>';
        m += '</tr>';
        m += '</table>';
        m += '</div>';
        m += '</td></tr>';
        m += '<tr><td align=center>';
        m += '<div id=STrChOThroneRuleScroll style="position: static; width: 100%; height: ' + dlgHeight + '; overflow-x: hidden; overflow-y: auto;" >';
        m += '<div id=STrChOThroneRuleDisplay></div>';
        m += '</div>';
        m += '</td></tr>';
        m += '</table>';
        m += '</div>'; //end of STrChOSection
        m += '</div>';
		t.mydiv.innerHTML = '<div>' + m + '</div>';

        var header = document.getElementsByClassName('STrChOHeader');
        for (var head=0;head<header.length;head++) {
            header[head].addEventListener('click', sectionOpener, false);
        }

        t.displayNumberSalvaged();

        if (STrChOThroneSalvageData.active)
            t.setStatus('Loading...');
        else
            t.setStatus('Powered Off');

        document.getElementById('STrChOThroneClearAllRules').addEventListener('click', function() {
            STrChOThroneSalvageData.ruleSet = [];
            SAVESTrChOThroneSalvageData();
            t.buildThroneRuleDisplay();
        }, false);

        document.getElementById('STrChOThroneAutoLoad').addEventListener('click', function () {
            var effectId = document.getElementById('STrChOThroneAutoLoadEffect').value;
            if (effectId == 0) return;
            for (var category in STrChOThroneStatsGrid) {
                var faction = 'any';
                var type = category;
                var conditions = [];
                for (var i = 1; i < 6; i++) {
                    if (STrChOThroneStatsGrid[category][i][effectId] == 1) {
                        var slots = [];
                        for (var slotChecker = 1; slotChecker < 6; slotChecker++) slots.push(slotChecker==i);
                        var effectName = CM.thronestats.effects[effectId][1];
                        var buffDebuff = 'b';
                        if (effectName.indexOf(" Debuff") != -1) buffDebuff = "d";
                        var effectName = effectName.split(" Debuff")[0];
                        var c = new ThroneCondition(true, 1, effectName, buffDebuff, slots);
                        conditions.push(c);
                    }
                }
                if (conditions.length > 0) {
                    var rule = new ThroneRule(type, faction, conditions, true);
                    t.addRule(rule);
                }
            }
            SAVESTrChOThroneSalvageData();
            t.buildThroneRuleDisplay();
        }, false);

        document.getElementById('STrChOThroneSalvagePower').addEventListener('click', function () {
            t.togglePower(this);
        }, false);

        t.createRow();

        t.buildThroneRuleDisplay();

        document.getElementById('STrChOThroneSalvageSortCard').addEventListener('change', function() {
            t.buildThroneRuleDisplay();
        }, false);

        document.getElementById('STrChOThroneAddRow').addEventListener('click', function () {
            t.createRow();
        }, false);

        document.getElementById('STrChOThroneSalvageQuality').addEventListener('click', function () {
            t.setSalvageQuality(this.value);
        }, false);

        document.getElementById('STrChOThroneSalvageQuality').value = STrChOThroneSalvageData.minQuality;

        document.getElementById('STrChOThroneSaveNum').addEventListener('change', function () {
            STrChOThroneSalvageData.throneSaveNum = parseInt(document.getElementById('STrChOThroneSaveNum').value);
            if (STrChOThroneSalvageData.throneSaveNum < 0) STrChOThroneSalvageData.throneSaveNum = 0;
            SAVESTrChOThroneSalvageData();
        }, false);

        document.getElementById('STrChOThroneAdvancedReset').addEventListener('click', function() {
            var cardtype = document.getElementById('STrChOThroneCardTypeAdvanced');
            cardtype.selectedIndex = 0;
            t.clearAdvancedStats();
            t.setAdvancedStatsToAny();
        }, false);

        t.setAdvancedStatsToAny();

        document.getElementById('STrChOThroneAddRuleAdvanced').addEventListener('click', function() {
            t.createAdvancedRule();
        }, false);

        document.getElementById('STrChOThroneCardTypeAdvanced').addEventListener('change', function() {
            var selectedValue = document.getElementById('STrChOThroneCardTypeAdvanced').value;
            t.clearAdvancedStats();
            if (selectedValue == 'any') {
                t.setAdvancedStatsToAny();
            } else {
                t.filterAdvancedStats(selectedValue);
            }
        }, false);

        document.getElementById('STrChOThroneAddRule').addEventListener('click', function () {
            t.createRule();
        }, false);


        document.getElementById('STrChOThroneButtonSaveItem').addEventListener('click', function () {
            var uriContent = 'data:application/octet-stream,' + encodeURIComponent(JSON.stringify(STrChOThroneSalvageData.ruleSet));
            var newWindow = window.open(uriContent, 'file.txt');
        }, false);


        document.getElementById('STrChOThroneButtonLoadItem').addEventListener('click', function () {
            var fileInput = document.getElementById("STrChOThroneFileLoadItem");
            var files = fileInput.files;
            if (files.length == 0) {
                alert('Please Select A File');
                return;
            }
            var file = files[0];

            var reader = new FileReader();

            reader.onload = function (e) {
                var output = e.target.result;
                STrChOThroneSalvageData.ruleSet = JSON.parse(output);
                STrChOThroneSalvageData.active = false;
                clearInterval(Tabs.throneSalvager.sTimer);
                clearInterval(Tabs.throneSalvager.delTimer);
                Tabs.throneSalvager.deleting = false;
                SAVESTrChOThroneSalvageData();
                Tabs.throneSalvager.show();
                alert('Throne Salvage Settings Now Loaded From File');
            };
            reader.readAsText(file);

        }, false);


        if (STrChOThroneSalvageData.upgradedToDelete.length > 0) {
            // some items were left over that need to be deleted
            for (k = 0; k < STrChOThroneSalvageData.upgradedToDelete.length; k++) {
                var id = STrChOThroneSalvageData.upgradedToDelete[k];
                // if the item is not longer in the inventory, remove the id
                if (!uW.kocThroneItems[id]) {
                    STrChOThroneSalvageData.upgradedToDelete.splice(k, 1); // Remove item from array
                    SAVESTrChOThroneSalvageData();
                    k--;
                }
            }

            // resume deleting things
            if (STrChOThroneSalvageData.active) {
                t.delItems = STrChOThroneSalvageData.upgradedToDelete;
                t.deleting = true;
                t.upgradeAndDelete();
            }
            else {
                // if the salvager is Powered Off, clear the list
                STrChOThroneSalvageData.upgradedToDelete = [];
                SAVESTrChOThroneSalvageData();
            }
        }
        // this check makes sure upgrading before deleting is still profitable
        t.upgradeProfit = (5 * CM.WorldSettings.getSettingAsNumber("AETHERSTONE_SALVAGE_MULTIPLIER", 500) > CM.thronestats.upgrade[1]["Stones"]);
        t.start();

	},

    setAdvancedStatsToAny: function() {
        for (var i = 1; i < STrChOQualityCount; i++) {
            var row = document.getElementById('STrChOThroneRow' + i + 'Advanced');
            row.options.add(new Option("none","None"));
            for (eff in CM.thronestats.effects) {
                var effectName = CM.thronestats.effects[eff][1];
                row.options.add(new Option(effectName, effectName));
            }
            row.options.add(new Option("Any Infantry", "Infantry"));
            row.options.add(new Option("Any Ranged", "Ranged"));
            row.options.add(new Option("Any Horsed", "Horsed"));
            row.options.add(new Option("Any Siege", "Siege"));
            row.options.add(new Option("Any Spellcaster", "Spellcaster"));
            row.options.add(new Option("Any Tower", "Tower"));
        }
    },

    clearAdvancedStats: function() {
        for (var i = 1; i < STrChOQualityCount; i++) {
            var row = document.getElementById('STrChOThroneRow' + i + 'Advanced');
            row.innerHTML = "";
        }
    },

    filterAdvancedStats: function(cardtype) {
        var t = Tabs.throneSalvager;
        cardtype = cardtype || 'any';

        if (cardtype == 'any') {
            t.setAdvancedStatsToAny();
            return;
        }

        document.getElementById("STrChOThroneRow1Advanced").options.add(new Option("none", "none"));
        document.getElementById("STrChOThroneRow2Advanced").options.add(new Option("none", "none"));
        document.getElementById("STrChOThroneRow3Advanced").options.add(new Option("none", "none"));
        document.getElementById("STrChOThroneRow4Advanced").options.add(new Option("none", "none"));
        document.getElementById("STrChOThroneRow5Advanced").options.add(new Option("none", "none"));

        for (eff in CM.thronestats.effects) {
            var effectName = CM.thronestats.effects[eff][1];
            if (STrChOThroneStatsGrid[cardtype][1][eff]) { document.getElementById("STrChOThroneRow1Advanced").options.add(new Option(effectName, effectName)); }
            if (STrChOThroneStatsGrid[cardtype][2][eff]) { document.getElementById("STrChOThroneRow2Advanced").options.add(new Option(effectName, effectName)); }
            if (STrChOThroneStatsGrid[cardtype][3][eff]) { document.getElementById("STrChOThroneRow3Advanced").options.add(new Option(effectName, effectName)); }
            if (STrChOThroneStatsGrid[cardtype][4][eff]) { document.getElementById("STrChOThroneRow4Advanced").options.add(new Option(effectName, effectName)); }
            if (STrChOThroneStatsGrid[cardtype][5][eff]) { document.getElementById("STrChOThroneRow5Advanced").options.add(new Option(effectName, effectName)); }
        }
    },

	hide: function () {},

	show: function () {
		var t = Tabs.throneSalvager;
        t.displayNumberSalvaged();
        t.buildThroneRuleDisplay();
	},

    updateThroneMenu: function () {
        if (!document.getElementById('STrChOExecuteSalvager')) return;
        document.getElementById('STrChOExecuteSalvager').innerHTML = 'Salvager ' + (STrChOThroneSalvageData.active ? 'ON' : 'OFF');
    },

    forceSalvage: function (throneId) {
        throneId = throneId || false;
        if (!throneId) return;
        var throneItem = uW.kocThroneItems[throneId];
        if (!throneItem) return;
        if (throneItem.jewel) {
            if (throneItem.jewel.valid) {
                var city_num = pickAetherSalvageCity();
                if (city_num == -1) city_num = 0;
                var city_id = Seed.cities[city_num][0];
                Tabs.STrChOJewels.removeJewel(city_id, throneId);
            }
        }
        SalvageThroneItem(throneId);
        CM.ThroneView.renderInventory(uW.kocThroneItems);
    },

    doDelete: function (id) {

        var t = Tabs.throneSalvager;
        if (!STrChOThroneSalvageData.active || !t.deleting) {
            t.deleting = false;
            return;
        }

        var item = uW.kocThroneItems[id];
        if (item == null || !item) return;

        if (item) t.setStatus('Salvaging ' + item.name);

        SalvageThroneItem(id);

    },

    removeItem: function (id, cityId, numStones) {

        var throne_item = uW.kocThroneItems[id];
        if (throne_item == null || !throne_item) return;

        var c = +(Seed.resources["city" + cityId]["rec5"][0]);
        var b = Seed.throne.slotEquip;

        Seed.resources["city" + cityId]["rec5"][0] = c + numStones;
        jQuery.each(b, function (g, h) {
            a = jQuery.inArray(id, h);
            if (a > -1) {
                h.splice(a, 1)
            }
        });

        delete uW.kocThroneItems[id];
        CM.ThroneView.renderInventory(uW.kocThroneItems);
    },

    // update items to +1 before deleting
    upgradeAndDelete: function () {
        var t = Tabs.throneSalvager;

        if (!STrChOThroneSalvageData.active || t.delItems.length == 0) {
            t.deleting = false;
            return;
        }

        var id = +t.delItems[0];

        // since simple +0 can be upgrade w/ near 100% success for 1500 a-stone and then salvaged for 2150
        // upgrade all these items 1 level
        if (STrChOThroneSalvageData.upgradeFirst && t.upgradeProfit) {

            var throne_item = uW.kocThroneItems[id];
            if (throne_item) {
                if (throne_item.quality <= STrChOThroneSalvageData.upgradeFirstQual && throne_item.level == 0
                            && (STrChOThroneSalvageData.upgradedToDelete.indexOf(id) < 0)) {
                    STrChOThroneSalvageData.upgradedToDelete.push(id);
                    SAVESTrChOThroneSalvageData();
                    Tabs.throneUpgrader.doUpgrade(+id, true);
                }
            }
            else {
                //item not found
            }
        }
        // delete the item
        t.delTimer = setTimeout(function () { t.doDelete(id) }, 4000);
    },

    // returns true if the item should be saved and not salvaged
    applyRules: function (id) {
        var t = Tabs.throneSalvager;
        for (r in STrChOThroneSalvageData.ruleSet) {
            var rule = STrChOThroneSalvageData.ruleSet[r];
            if (rule.ThroneApplyRule(id)) return true;
        }
        return false;
    },

    // Create the list of items to delete.
    // If 'test' is set to true, then broken/equipted items are included.
    buildList: function (test) {
        var t = Tabs.throneSalvager;

        var countItem = 0;
        var retList = [];

        for (k in uW.kocThroneItems) {
            var throne_item = uW.kocThroneItems[k];

            if (throne_item == null || !throne_item) continue;

            countItem++;

            // ignore these things
            if (throne_item.level != 0) continue;

            if (throne_item.unique > 0) continue;

            // in test mode, include these items
            // These items are at risk if they are repaired or unequiped.
            if (test != true) {
                if (throne_item.isEquipped) continue;
                if (throne_item.isBroken) continue;
            }

            // keep the first X items
            if (countItem <= STrChOThroneSalvageData.throneSaveNum) continue;

            // keep things w/ at least minQuality
            if (throne_item.quality >= STrChOThroneSalvageData.minQuality) continue;

            // check the rules
            if (t.applyRules(throne_item.id)) { //item was found
                if (STrChOThroneSalvageData.upgradeAutoFind) {
                    var found = false;
                    for (var i = 0; i < STrChOThroneQueueData.list.length; i++) {
                        var qItem = STrChOThroneQueueData.list[i];
                        if (qItem.item != throne_item.id) continue;
                        found = true;
                        break;
                    }
                    if (!found) {
                        ActionLog('Item: ' + throne_item.name + ' found and added to auto upgrade');
                        Tabs.throneUpgrader.addUpgradeItem(throne_item.id);
                    }
                }
                continue;
            }

            // passes all tests
            retList.push(throne_item.id);
        }
        return retList;
    },

    // do the actual discard of TR items
    doSalvage: function () {
        var t = Tabs.throneSalvager;

        if (!STrChOThroneSalvageData.active) {
            t.deleting = false;
            return;
        }

        if (t.deleting == true) return;

        t.deleting = true;
        t.setStatus('Salvaging items');

        t.delItems = t.buildList(false);

        if (t.delItems.length > 0) {
            // upgrade items from +0 to +1 first
            t.upgradeAndDelete();
        } else {
            // give enough time for the last delete to finish
            setTimeout(function () {
                t.deleting = false;
                t.setStatus('No items to salvage.  Waiting for next cycle.');
            }, 3000);
        }
    },

    start: function () {
        var t = Tabs.throneSalvager;
        if (STrChOThroneSalvageData.active) {
            t.sTimer = setInterval(t.doSalvage, 1 * 60 * 1000);
        }
    },

    addRule: function (rule) {
        STrChOThroneSalvageData.ruleSet.unshift(rule);
        SAVESTrChOThroneSalvageData();
    },

    readRows: function () {
        var t = Tabs.throneSalvager;
        var table = document.getElementById('STrChOThroneConditionTable');
        var rowCount = table.rows.length;

        var cType = document.getElementById('STrChOThroneCardType').value;
        var faction = document.getElementById('STrChOThroneFactionType').value;

        var conditions = [];
        for (i = 0; i < table.rows.length; i++) {
            var row = table.rows[i];
            if (row.id) {
                var s1 = document.getElementById(row.id + "ThroneSel1");
                var s2 = document.getElementById(row.id + "ThroneSel2");
                var s3 = document.getElementById(row.id + "ThroneSel3");
                var s4 = document.getElementById(row.id + "ThroneSel4");

                var slots = [];
                for (j = 1; j <= 5; j++) {
                    var ch = document.getElementById(row.id + "ThroneSlot" + j);
                    slots.push(ch.checked);
                }

                var c = new ThroneCondition(s1.value, s2.value, s3.value, s4.value, slots);
                conditions.push(c);
            }
        }
        var rule1 = new ThroneRule(cType, faction, conditions, false);
        t.addRule(rule1);
    },

    readAdvancedRows: function () {
        var t = Tabs.throneSalvager;
        var cType = document.getElementById('STrChOThroneCardTypeAdvanced').value;
        var faction = document.getElementById('STrChOThroneFactionTypeAdvanced').value;
        var conditions = [];
        for (var i = 1; i < 6; i++) {
            var row = document.getElementById("STrChOThroneRow" + i + "Advanced");
            if (row.selectedIndex == 0) continue;
            var slots = [];
            for (var slotChecker = 1; slotChecker < 6; slotChecker++) {
                slots.push(slotChecker==i);
            }
            var effectName = row.options[row.selectedIndex].value;
            var buffDebuff = "b";
            if (effectName.indexOf(" Debuff") != -1) buffDebuff = "d";
            var effectName = effectName.split(" Debuff")[0];
            var c = new ThroneCondition(true, 1, effectName, buffDebuff, slots);
            conditions.push(c);
        }
        if ( conditions.length > 0 ) {
            var rule1 = new ThroneRule(cType, faction, conditions, true);
            t.addRule(rule1);
        }
    },

    createRule: function () {
        var t = Tabs.throneSalvager;
        t.readRows();
        t.buildThroneRuleDisplay();
    },

    createAdvancedRule: function() {
        var t = Tabs.throneSalvager;
        t.readAdvancedRows();
        t.buildThroneRuleDisplay();
    },

    setSalvageQuality: function (qual) {
        STrChOThroneSalvageData.minQuality = qual;
        SAVESTrChOThroneSalvageData();
    },

    buildThroneRuleDisplay: function () {
        var t = Tabs.throneSalvager;

        function innerThroneRuleDisplay(dataset) {
            var innerM = '';
            for (i = 0; i < dataset.length; i++) {
                var rule = dataset[i];

                innerM += '<tr>';
                innerM += '<td width=90%><div class=STrChOThroneRule>';

                innerM += (rule.advancedrule ? 'Advanced Rule<br>' : 'Simple Rule<br>');

                innerM += ' Type: ' + rule.type;
                innerM += ' Faction: ' + rule.faction;

                for (ii = 0; ii < rule.conditions.length; ii++) {
                    var condition = rule.conditions[ii];

                    if (ii == 0)
                        innerM += '<br> Item';
                    else
                        innerM += '<br> <u>and</u>';

                    if (condition.mustHave != 'false')
                        innerM += ' must have ';
                    else
                        innerM += ' must NOT have ';

                    innerM += condition.number + 'x ';
                    innerM += condition.effect + ' ';

                    if (condition.buffType == 'b')
                        innerM += 'buff ';
                    else if (condition.buffType == 'd')
                        innerM += 'debuff ';
                    else
                        innerM += 'buff or debuff ';

                    innerM += ' in slot(s): ';

                    for (j = 0; j < condition.slots.length; j++) {
                        if (condition.slots[j]) innerM += (j + 1) + " ";
                    }

                }
                innerM += '</div></td>';
                innerM += '<td width=20% align=center>';
                innerM += '<input id=STrChOThroneEditRule' + i + ' class=STrChOButton type=button value="Edit">';
                innerM += '<input id=STrChOThroneDelRule' + i + ' class=STrChOButton type=button value="X">';
                innerM += '</td>';
                innerM += '</tr>';
            }
            return innerM;
        }

        var rd = document.getElementById('STrChOThroneRuleDisplay');
        var sortType = document.getElementById('STrChOThroneSalvageSortCard').value;

        var ruleCounter = 0;

        if (sortType != "0") {
            var sortedDataSet = [];
            for (var k = 0; k < STrChOThroneSalvageData.ruleSet.length; k++) {
                if (sortType == STrChOThroneSalvageData.ruleSet[k].type) {
                    sortedDataSet.unshift(STrChOThroneSalvageData.ruleSet[k]);
                }else {
                    sortedDataSet.push(STrChOThroneSalvageData.ruleSet[k]);
                }
            }
            rd.innerHTML = '<table width=100%>' + innerThroneRuleDisplay(sortedDataSet);
            ruleCounter = sortedDataSet.length;
            for (var j = 0; j < sortedDataSet.length; j++) {
                document.getElementById('STrChOThroneDelRule' + j).v1 = j;
                document.getElementById('STrChOThroneEditRule' + j).v1 = j;
                document.getElementById('STrChOThroneDelRule' + j).addEventListener('click', function () { t.deleteRule(this.v1, sortedDataSet); }, false);
                document.getElementById('STrChOThroneEditRule' + j).addEventListener('click', function () { t.editRule(this.v1, sortedDataSet); }, false);
            }
        } else {
            ruleCounter = STrChOThroneSalvageData.ruleSet.length;
            rd.innerHTML = '<table width=100%>' + innerThroneRuleDisplay(STrChOThroneSalvageData.ruleSet);
            for (var j = 0; j < STrChOThroneSalvageData.ruleSet.length; j++) {
                document.getElementById('STrChOThroneDelRule' + j).v1 = j;
                document.getElementById('STrChOThroneEditRule' + j).v1 = j;
                document.getElementById('STrChOThroneDelRule' + j).addEventListener('click', function () { t.deleteRule(this.v1, STrChOThroneSalvageData.ruleSet); }, false);
                document.getElementById('STrChOThroneEditRule' + j).addEventListener('click', function () { t.editRule(this.v1, STrChOThroneSalvageData.ruleSet); }, false);
            }
        }

        document.getElementById('STrChOThroneRuleCount').innerHTML = '(Total Rules: ' + ruleCounter + ')';

    },

    editRule: function (ruleIndex, sortedData)
    {
        var t = Tabs.throneSalvager;
        var rule = sortedData[ruleIndex];

        var divExpander = null;

        if (rule.advancedrule)
            divExpander = document.getElementById('STrChOThroneAdvancedRule');
        else
            divExpander = document.getElementById('STrChOThroneSimpleRule');

        divExpander.click();
        if (divExpander.childNodes[0].src == STrChORightArrow) divExpander.click();

        if (rule.advancedrule) {
            document.getElementById('STrChOThroneFactionTypeAdvanced').value = rule.faction;
            document.getElementById('STrChOThroneCardTypeAdvanced').value = rule.type;
            t.clearAdvancedStats();
            if (rule.type == 'any')
                t.setAdvancedStatsToAny();
            else
                t.filterAdvancedStats(rule.type);

            for (row = 0; row < rule.conditions.length; row++) {
                var condition = rule.conditions[row];
                var slotNumber = 0;
                for (s = 0; s < condition.slots.length; s++) {
                    if (condition.slots[s]) slotNumber = s+1;
                }
                var cell = document.getElementById('STrChOThroneRow' + slotNumber + 'Advanced');
                var STrChOEffect = condition.effect;
                if (condition.buffType == 'd') STrChOEffect += ' Debuff';
                cell.value = STrChOEffect;
            }

        } else {
            document.getElementById('STrChOThroneFactionType').value = rule.faction;
            document.getElementById('STrChOThroneCardType').value = rule.type;
            var STrChOThroneConditionTable = document.getElementById('STrChOThroneConditionTable');
            while (STrChOThroneConditionTable.rows.length > 1) STrChOThroneConditionTable.deleteRow(0);
            for (row = 0; row < rule.conditions.length; row++) {
                var condition = rule.conditions[row];
                t.createRow();
                STrChOThroneConditionTable = document.getElementById('STrChOThroneConditionTable');
                STrChOThroneConditionTable.rows[row].cells[0].children[0].value = condition.mustHave;
                STrChOThroneConditionTable.rows[row].cells[1].children[0].value = condition.number;
                STrChOThroneConditionTable.rows[row].cells[2].children[0].value = condition.effect;
                STrChOThroneConditionTable.rows[row].cells[3].children[0].value = condition.buffType;
                var slotCells = STrChOThroneConditionTable.rows[row].cells[4];
                for (s = 0; s < condition.slots.length; s++) {
                    if (condition.slots[s])
                        slotCells.children[s].checked = true;
                    else
                        slotCells.children[s].checked = false;
                }
            }
        }
        t.deleteRule(ruleIndex, sortedData);
    },

    // delete a rule from the ruleset
    deleteRule: function (ruleIndex, sortedData) {
        var t = Tabs.throneSalvager;
        sortedData.splice(ruleIndex, 1);
        var newDataSet = [];
        for (var i = 0; i < STrChOThroneSalvageData.ruleSet.length; i++) {
            for (var i2 = 0; i2 < sortedData.length; i2++) {
                if (STrChOThroneSalvageData.ruleSet[i] == sortedData[i2]) {
                    newDataSet.push(STrChOThroneSalvageData.ruleSet[i]);
                    break;
                }
            }
        }
        STrChOThroneSalvageData.ruleSet = newDataSet;
        SAVESTrChOThroneSalvageData();
        t.buildThroneRuleDisplay();
    },

    removeRow: function (row) {
        var t = Tabs.throneSalvager;
        var table = document.getElementById('STrChOThroneConditionTable');

        for (i = 0; i < table.rows.length; i++) {
            if (table.rows[i] == row) {
                table.deleteRow(i);
                break;
            }
        }
    },

    createRow: function () {
        var t = Tabs.throneSalvager;
        var table = document.getElementById('STrChOThroneConditionTable');
        var rowCount = table.rows.length;
        var row = table.insertRow(rowCount - 1);
        var rowId = "r" + t.rowNum;
        t.rowNum += 1;
        row.id = rowId;

        var h = '<td> <select class=STrChOSelect id="' + rowId + 'ThroneSel1"> <option value="true"></option><option value="false">NOT</option></select></td>';
        h += '<td> <select class=STrChOSelect id="' + rowId + 'ThroneSel2">';
        h += '  <option value="1">1x</option>';
        h += '  <option value="2">2x</option>';
        h += '  <option value="3">3x</option>';
        h += '  <option value="4">4x</option>';
        h += '  <option value="5">5x</option>';
        h += '</select></td>';
        h += '<td> <select class=STrChOSelect id="' + rowId + 'ThroneSel3">';
        h += '</select></td>';
        h += '<td> <select class=STrChOSelect id="' + rowId + 'ThroneSel4">';
        h += '  <option value="e">Either</option>';
        h += '  <option value="b">Buff</option>';
        h += '  <option value="d">Debuff</option>';
        h += '</select></td>';

        h += '<td>';
        h += '  <input class=STrChOCheckbox type=checkbox value="1" checked=true id="' + rowId + 'ThroneSlot1"/>1';
        h += '  <input class=STrChOCheckbox type=checkbox value="2" checked=true id="' + rowId + 'ThroneSlot2"/>2';
        h += '  <input class=STrChOCheckbox type=checkbox value="3" checked=true id="' + rowId + 'ThroneSlot3"/>3';
        h += '  <input class=STrChOCheckbox type=checkbox value="4" checked=true id="' + rowId + 'ThroneSlot4"/>4';
        h += '  <input class=STrChOCheckbox type=checkbox value="5" checked=true id="' + rowId + 'ThroneSlot5"/>5';
        h += '</td>';

        row.innerHTML = h;

        var effects = [];

        for (e in CM.thronestats.effects) {
            var effectName = CM.thronestats.effects[e][1].split(" Debuff")[0];
            if (effects.indexOf(effectName) < 0) effects.push(effectName);
        }

        var select = document.getElementById(rowId + "ThroneSel3");
        for (index in effects) {
            select.options.add(new Option(effects[index], effects[index]));
        }

        // add in options for troops specific effects
        select.options.add(new Option("Any Infantry", "Infantry"));
        select.options.add(new Option("Any Ranged", "Ranged"));
        select.options.add(new Option("Any Horsed", "Horsed"));
        select.options.add(new Option("Any Siege", "Siege"));
        select.options.add(new Option("Any Spellcaster", "Spellcaster"));
        select.options.add(new Option("Any Tower", "Tower"));

        var c = row.insertCell(5);
        //TODO: change to javascript
        var btn = $('<input class=STrChOButton type=button value="X" />');
        $(btn).click(function () { t.removeRow(row); });
        $(c).append(btn);
    },

    togglePower: function (obj) {
        var t = Tabs.throneSalvager;
        if (STrChOThroneSalvageData.active) {
            var btn = document.getElementById('STrChOThroneSalvagePower');
            STrChOThroneSalvageData.active = false;
            btn.value = "Salvager = OFF";
            t.setStatus('Powered Off');
            clearInterval(t.sTimer);
            clearInterval(t.delTimer);
            t.delItems = [];
            STrChOThroneSalvageData.upgradedToDelete = [];
            t.deleting = false;
        } else {
            if (STrChOGeneralOptions.throneSorter) {
                if (!confirm('SORTER WARNING: You will likely experience lowered salvage rates and potentially crashing if you have both sorter and salvager enabled.  Would you like to continue?')) return;
            }
            STrChOThroneSalvageData.active = true;
            var btn = document.getElementById('STrChOThroneSalvagePower');
            btn.value = "Salvager = ON";
            t.setStatus('Loading...');
            t.doSalvage();
            t.start();
        }
        SAVESTrChOThroneSalvageData();
        t.updateThroneMenu();
    },

    // put out a status message on the trSavlStatus div
    setStatus: function (msg) {
        document.getElementById('STrChOThroneSalvageStatus').innerHTML = msg;
    },

    displayNumberSalvaged: function () {
        var since = "";
        var rate = "";
        var now = new Date();

        if (!STrChOThroneSalvageData.since) STrChOThroneSalvageData.since = now.valueOf();

        var sinceD = new Date(STrChOThroneSalvageData.since);

        since = sinceD.toDateString().substring(3, 10) + " " + sinceD.toLocaleTimeString();
        var duration = now.valueOf() - STrChOThroneSalvageData.since + 1;
        duration = duration / 1000.0;
        rate = ' (' + addCommas(Math.round(STrChOThroneSalvageData.numSalvagedItems2 / duration * 86400)) + ' per day)';

        var m = "";
        m += '<div style="text-align: center;">';
        m += addCommas(STrChOThroneSalvageData.numSalvagedItems);
        m += ' items salvaged, ';
        m += addCommas(STrChOThroneSalvageData.numSalvagedItems2);
        m += ' items since ' + since + rate;
        m += '<input id=STrChOThroneTripOdometer class=STrChOButton type=button value="<-- Reset" /></div>';

        document.getElementById('STrChOThroneNumSalv').innerHTML = m;

        document.getElementById('STrChOThroneTripOdometer').addEventListener('click', function () {
            Tabs.throneSalvager.tripOdometer();
        }, false);

    },

    tripOdometer: function () {
        STrChOThroneSalvageData.numSalvagedItems2 = 0;
        var now = new Date();
        STrChOThroneSalvageData.since = now.valueOf();
        SAVESTrChOThroneSalvageData();
        Tabs.throneSalvager.displayNumberSalvaged();
    },

}

Tabs.throneRepair = {
	tabOrder: 103,
	tabLabel: 'REPAIR',
	tabColor: 'red',
    tabHeader: 'THRONE ROOM REPAIR',
    repairId: 0,
    repairEnd: 0,
    timerH: null,
    clearTimerH: null,

	init: function (div) {
		var t = Tabs.throneRepair;
		t.mydiv = div;

		var m = '<div class=STrChOHeader>' + t.tabHeader + '<div class=STrChOSaveSettings id=STrChOThroneRepairSaveSettings title="Save Repair Settings"></div><div class=STrChOLoadSettings id=STrChOThroneRepairLoadSettings title="Load Repair Settings"></div></div>';


        m += '<div style="height: ' + (dlgHeight - (dlgHeightOffset*2.5)) + 'px; width: ' + (dlgWidth - dlgWidthMenu) + 'px; margin-top:5px; margin-bottom:5px; overflow-x: auto; overflow-y: auto; position: static;">';
		m += '<div>';

        m += '<table class=STrChOSectionTable>';
        m += '<tr>';
        if (STrChOThroneRepairData.active) {
            m += '<td width=50%><input id=STrChOThroneRepairPower type=button class=STrChOButton value="Repair = ON"></td>';
        } else {
            m += '<td width=50%><input id=STrChOThroneRepairPower type=button class=STrChOButton value="Repair = OFF"></td>';
        }
        m += '<td width=50%><div class=divNoWrap align=center id=STrChOThroneRepairAetherDisplay></div></td>';
        m += '</tr>';
        m += '<tr><td colspan=2><hr class=STrChOHRCenter></td></tr>';
        m += '<tr><td colspan=2><div class=indent5 id=STrChOThroneRepairStatus><br></div></td></tr>';
        m += '<tr><td colspan=2><div class=indent5 id=STrChOThroneRepairLastResult><br></div></td></tr>';
        m += '</table>';
        m += '</div>';

        m += '<div class=STrChOHeader onmouseover="this.style.cursor=\'pointer\'"><img src="'+STrChORightArrow+'"/>&nbsp;SPEED UPS&nbsp;<img class=STrChOReverseImage src="'+STrChORightArrow+'"/></div>';

        m += '<div class=STrChOSection>';
        m += '<table class=STrChOSectionTable>';
        m += '<tr>';
        m += '<td colspan=3><input class=STrChOCheckbox type=checkbox id=STrChOThroneRepairHourglassLevelSpecific ' + (STrChOThroneRepairData.hourglassLevelSpecific ? "CHECKED" : "") + '>Only use hourglass for levels ';
        m += '<select class=STrChOSelect  id=STrChOThroneRepairHourglassLevel>';
        for (lvl = 1; lvl < STrChOMaxThroneLevel; lvl++) m += '<option value="' + lvl + '" ' + (STrChOThroneRepairData.hourglassLevel == lvl ? 'SELECTED' : '') + '>+' + lvl + '</option>';
        m += '</select> and higher</td>';
        m += '</tr>';
        m += '<tr>';
        m += '<td colspan=3><input class=STrChOCheckbox type=checkbox id=STrChOThroneRepairHourglassQualitySpecific ' + (STrChOThroneRepairData.hourglassQualitySpecific ? "CHECKED" : "") + '>Only use hourglass for qualities ';
        m += '<select class=STrChOSelect id=STrChOThroneRepairHourglassQuality>';
        for (qual = 1; qual <= STrChOMaxThroneQuality-1; qual++) m += '<option value="' + qual + '" ' + (STrChOThroneRepairData.hourglassQuality == qual ? 'SELECTED' : '') + '>' + throneCardQualities[qual].capitalizeFirstLetter() + '</option>';
        m += '</select> and higher</td>';
        m += '</tr>';
        m += '<tr>';
        m += '<td title="' + STrChOHourGlassTDLabel[1] + '"><input class=STrChOCheckbox type=checkbox id=STrChOThroneRepairUseSH ' + (STrChOThroneRepairData.useSH ? 'CHECKED' : '') + '><div class=divNoWrap>' + STrChOHourGlassName[1] + ' (<div class=divNoWrap id=STrChOThroneRepairUseSHLabel><font' + (uW.ksoItems[1].count < 100 ? ' color=red>' : '>') + uW.ksoItems[1].count + '</font></div>)</div></td>';
        m += '<td title="' + STrChOHourGlassTDLabel[2] + '"><input class=STrChOCheckbox type=checkbox id=STrChOThroneRepairUseKH ' + (STrChOThroneRepairData.useKH ? 'CHECKED' : '') + '><div class=divNoWrap>' + STrChOHourGlassName[2] + ' (<div class=divNoWrap id=STrChOThroneRepairUseKHLabel><font' + (uW.ksoItems[2].count < 100 ? ' color=red>' : '>') + uW.ksoItems[2].count + '</font></div>)</div></td>';
        m += '<td title="' + STrChOHourGlassTDLabel[3] + '"><input class=STrChOCheckbox type=checkbox id=STrChOThroneRepairUseGH ' + (STrChOThroneRepairData.useGH ? 'CHECKED' : '') + '><div class=divNoWrap>' + STrChOHourGlassName[3] + ' (<div class=divNoWrap id=STrChOThroneRepairUseGHLabel><font' + (uW.ksoItems[3].count < 100 ? ' color=red>' : '>') + uW.ksoItems[3].count + '</font></div>)</div></td>';
        m += '</tr>';
        m += '<tr>';
        m += '<td title="' + STrChOHourGlassTDLabel[4] + '"><input class=STrChOCheckbox type=checkbox id=STrChOThroneRepairUseMH ' + (STrChOThroneRepairData.useMH ? 'CHECKED' : '') + '><div class=divNoWrap>' + STrChOHourGlassName[4] + ' (<div class=divNoWrap id=STrChOThroneRepairUseMHLabel><font' + (uW.ksoItems[4].count < 100 ? ' color=red>' : '>') + uW.ksoItems[4].count + '</font></div>)</div></td>';
        m += '<td title="' + STrChOHourGlassTDLabel[5] + '"><input class=STrChOCheckbox type=checkbox id=STrChOThroneRepairUseAH ' + (STrChOThroneRepairData.useAH ? 'CHECKED' : '') + '><div class=divNoWrap>' + STrChOHourGlassName[5] + ' (<div class=divNoWrap id=STrChOThroneRepairUseAHLabel><font' + (uW.ksoItems[5].count < 100 ? ' color=red>' : '>') + uW.ksoItems[5].count + '</font></div>)</div></td>';
        m += '<td title="' + STrChOHourGlassTDLabel[6] + '"><input class=STrChOCheckbox type=checkbox id=STrChOThroneRepairUseWH ' + (STrChOThroneRepairData.useWH ? 'CHECKED' : '') + '><div class=divNoWrap>' + STrChOHourGlassName[6] + ' (<div class=divNoWrap id=STrChOThroneRepairUseWHLabel><font' + (uW.ksoItems[6].count < 100 ? ' color=red>' : '>') + uW.ksoItems[6].count + '</font></div>)</div></td>';
        m += '</tr>';
        m += '<tr>';
        m += '<td title="' + STrChOHourGlassTDLabel[7] + '"><input class=STrChOCheckbox type=checkbox id=STrChOThroneRepairUseDH ' + (STrChOThroneRepairData.useDH ? 'CHECKED' : '') + '><div class=divNoWrap>' + STrChOHourGlassName[7] + ' (<div class=divNoWrap id=STrChOThroneRepairUseDHLabel><font' + (uW.ksoItems[7].count < 100 ? ' color=red>' : '>') + uW.ksoItems[7].count + '</font></div>)</div></td>';
        m += '<td title="' + STrChOHourGlassTDLabel[8] + '"><input class=STrChOCheckbox type=checkbox id=STrChOThroneRepairUseEH ' + (STrChOThroneRepairData.useEH ? 'CHECKED' : '') + '><div class=divNoWrap>' + STrChOHourGlassName[8] + ' (<div class=divNoWrap id=STrChOThroneRepairUseEHLabel><font' + (uW.ksoItems[8].count < 100 ? ' color=red>' : '>') + uW.ksoItems[8].count + '</font></div>)</div></td>';
        m += '<td/>';
        m += '</tr>';
        m += '<tr>';
        m += '<td colspan=3><input class=STrChOCheckbox type=checkbox id=STrChOThroneRepairOverrideSpeedUps ' + (STrChOThroneRepairData.overrideSpeedUp ? "CHECKED" : "") + '>Override hourglasses by using ';
        m += '<select class=STrChOSelect  id=STrChOThroneRepairSpeedUp>';
        m += '<option value=0>None</option>';
        for (gls in STrChOHourGlassName) {
            m += '<option value=' + gls + ' ' + (STrChOThroneRepairData.useSpeedUp == gls ? 'SELECTED' : '') + '>' + STrChOHourGlassName[gls] + '</option>';
        }
        m += '</select> every time</td>';
        m += '</tr>';
        m += '</table>';
        m += '</div>';

        m += '<div class=STrChOHeader onmouseover="this.style.cursor=\'pointer\'"><img src="'+STrChORightArrow+'"/>&nbsp;REPAIR ITEMS&nbsp;<img class=STrChOReverseImage src="'+STrChORightArrow+'"/></div>';

        m += '<div class=STrChOSection>';
        m += '<table class=STrChOSectionTable>';

        m += '<tr><td>Queue By Level: <select class=STrChOSelect id=STrChOThroneRepairByLevel>';
        for (i = 1; i < STrChOMaxThroneLevel; i++) m += '<option value=' + i + '>+' + i + '</option>';
        m += '</select>&nbsp;<input id=STrChOThroneRepairByLevelAdd class=STrChOButton type=button value="Add"/></td></tr>';

        m += '<tr><td>Queue By Preset Tag: <select class=STrChOSelect id=STrChOThroneRepairPresetTagList>';
        var presetSlots = getObjectCollectionCount(Seed.throne.slotEquip);
        var presetsList = "";
        for (i = 1; i < presetSlots + 1; i++) presetsList += '<option value="' + i + '">' + i + ' (' + STrChOThronePresetData.presetNames[i] + ')</option>';
        m += presetsList;
        m += "</select>&nbsp;<input id=STrChOThroneRepairPresetTag class=STrChOButton type=button value='Add'/></td></tr>";

        m += '<tr><td><div style="max-width:90%;">Item: <select class=STrChOSelect style="white-space:nowrap;display:inline-block;max-width: 200px;" id=STrChOThroneRepairList>';
        m += '</select><input id=STrChOThroneRepairAdd type=button class=STrChOButton value="Add"/>&nbsp;<input id=STrChOThroneRepairAddAll class=STrChOButton type=button value="Add All">&nbsp;<input id=STrChOThroneRepairRefresh class=STrChOButton type=button value="Refresh List"></div></td></tr>';

        m += '</table>';
        m += '</div>';

        m += '<div class=STrChOHeader>&nbsp;REPAIR LIST&nbsp;</div>';

        m += '<div>';
        m += '<table class=STrChOSectionTable>';

        m += '<tr><td colspan=2>';
        m += '<div id=STrChOThroneRepairQScroll style="position: static; width: 100%; height: 350px; overflow-x: auto; overflow-y: auto;">';
        m += '<div id=STrChOThroneRepairQDiv></div>';
        m += '</div>';
        m += '</td></tr>';

        m += '<tr align=center><td><div><input style="float: left;" id=STrChOThroneRepairClear class=STrChOButton type=button value="Clear Queue"/></div></td><td><div><input style="float: right;" id=STrChOThroneRepairClearF class=STrChOButton type=button value="Clear Repaired"/></div></td></tr>';

        m += '</table>';
        m += '</div>';
        m += '</div>';
		t.mydiv.innerHTML = '<div>' + m + '</div>';

        document.getElementById('STrChOThroneRepairSaveSettings').addEventListener('click', function () {
            SaveSettingsToFile(STrChOThroneRepairData);
        }, false);
        document.getElementById('STrChOThroneRepairLoadSettings').addEventListener('click', function () {
            var loader = document.getElementById('STrChOSettingsFile');
            loader.addEventListener('change', function () {
                LoadSettingsFromFile(STrChOThroneRepairData, Tabs.throneRepair);
            }, false);
            loader.click();
        }, false);

        t.refreshAetherDisplay();

        var header = document.getElementsByClassName('STrChOHeader');
        for (var head=0;head<header.length;head++) {
            header[head].addEventListener('click', sectionOpener, false);
        }

        document.getElementById('STrChOThroneRepairUseWH').addEventListener('change', function () {
            STrChOThroneRepairData.useWH = document.getElementById('STrChOThroneRepairUseWH').checked;
            SAVESTrChOThroneRepairData();
            if (STrChOThroneRepairData.useWH) t.doAction();
        }, false);

        document.getElementById('STrChOThroneRepairUseDH').addEventListener('change', function () {
            STrChOThroneRepairData.useDH = document.getElementById('STrChOThroneRepairUseDH').checked;
            SAVESTrChOThroneRepairData();
            if (STrChOThroneRepairUseDH.useDH) t.doAction();
        }, false);

        document.getElementById('STrChOThroneRepairUseEH').addEventListener('change', function () {
            STrChOThroneRepairData.useEH = document.getElementById('STrChOThroneRepairUseEH').checked;
            SAVESTrChOThroneRepairData();
            if (STrChOThroneRepairData.useEH) t.doAction();
        }, false);

        document.getElementById('STrChOThroneRepairUseSH').addEventListener('change', function () {
            STrChOThroneRepairData.useSH = document.getElementById('STrChOThroneRepairUseSH').checked;
            SAVESTrChOThroneRepairData();
            if (STrChOThroneRepairData.useSH) t.doAction();
        }, false);

        document.getElementById('STrChOThroneRepairUseKH').addEventListener('change', function () {
            STrChOThroneRepairData.useKH = document.getElementById('STrChOThroneRepairUseKH').checked;
            SAVESTrChOThroneRepairData();
            if (STrChOThroneRepairData.useKH) t.doAction();
        }, false);

        document.getElementById('STrChOThroneRepairUseGH').addEventListener('change', function () {
            STrChOThroneRepairData.useGH = document.getElementById('STrChOThroneRepairUseGH').checked;
            SAVESTrChOThroneRepairData();
            if (STrChOThroneRepairData.useGH) t.doAction();
        }, false);

        document.getElementById('STrChOThroneRepairUseMH').addEventListener('change', function () {
            STrChOThroneRepairData.useMH = document.getElementById('STrChOThroneRepairUseMH').checked;
            SAVESTrChOThroneRepairData();
            if (STrChOThroneRepairData.useMH) t.doAction();
        }, false);

        document.getElementById('STrChOThroneRepairUseAH').addEventListener('change', function () {
            STrChOThroneRepairData.useAH = document.getElementById('STrChOThroneRepairUseAH').checked;
            SAVESTrChOThroneRepairData();
            if (STrChOThroneRepairData.useAH) t.doAction();
        }, false);

        document.getElementById('STrChOThroneRepairHourglassLevelSpecific').addEventListener('change', function () {
            STrChOThroneRepairData.hourglassLevelSpecific = document.getElementById('STrChOThroneRepairHourglassLevelSpecific').checked;
            SAVESTrChOThroneRepairData();
            t.doAction();
        }, false);

        document.getElementById('STrChOThroneRepairHourglassQualitySpecific').addEventListener('change', function () {
            STrChOThroneRepairData.hourglassQualitySpecific = document.getElementById('STrChOThroneRepairHourglassQualitySpecific').checked;
            SAVESTrChOThroneRepairData();
            t.doAction();
        }, false);

        document.getElementById('STrChOThroneRepairOverrideSpeedUps').addEventListener('change', function () {
            STrChOThroneRepairData.overrideSpeedUp = document.getElementById('STrChOThroneRepairOverrideSpeedUps').checked;
            SAVESTrChOThroneRepairData();
            if (STrChOThroneRepairData.overrideSpeedUp) t.doAction();
        }, false);

        document.getElementById('STrChOThroneRepairSpeedUp').addEventListener('change', function () {
            STrChOThroneRepairData.useSpeedUp = document.getElementById('STrChOThroneRepairSpeedUp').value;
            SAVESTrChOThroneRepairData();
        }, false);

        document.getElementById('STrChOThroneRepairHourglassLevel').addEventListener('change', function () {
            STrChOThroneRepairData.hourglassLevel = document.getElementById('STrChOThroneRepairHourglassLevel').value;
            SAVESTrChOThroneRepairData();
            t.doAction();
        }, false);

        document.getElementById('STrChOThroneRepairHourglassQuality').addEventListener('change', function () {
            STrChOThroneRepairData.hourglassQuality = document.getElementById('STrChOThroneRepairHourglassQuality').value;
            SAVESTrChOThroneRepairData();
            t.doAction();
        }, false);

        document.getElementById('STrChOThroneRepairPower').addEventListener('click', function () {
            t.togglePower(this);
        }, false);

        document.getElementById('STrChOThroneRepairByLevelAdd').addEventListener('click', function () {
            var t = Tabs.throneRepair;
            var level = document.getElementById('STrChOThroneRepairByLevel').value;
            for (trId in uW.kocThroneItems) {
                var throne_item = uW.kocThroneItems[trId];
                if (throne_item == null || !throne_item) continue;
                if (!throne_item.isBroken) continue;
                if (throne_item.level != level) continue;
                t.addQueue(trId);
            }
        }, false);

        document.getElementById('STrChOThroneRepairPresetTag').addEventListener('click', function () {
            var t = Tabs.throneRepair;
            var presetTagNum = document.getElementById('STrChOThroneRepairPresetTagList').value;
            var presetTag = getThronePresetObject(parseInt(presetTagNum));
            for (var ptId in presetTag) {
                var throne_item = uW.kocThroneItems[ptId];
                if (throne_item == null || !throne_item) continue;
                if (throne_item.isBroken) t.addQueue(ptId);
            }
        }, false);

        document.getElementById('STrChOThroneRepairClear').addEventListener('click', function () {
            t.deleteQueue();
        }, false);

        document.getElementById('STrChOThroneRepairClearF').addEventListener('click', function () {
            var temp = [];
            while (STrChOThroneRepairData.items.length > 0) {
                var trId = STrChOThroneRepairData.items.pop();
                var throne_item = uW.kocThroneItems[trId];
                if (throne_item == null || !throne_item) continue;
                if (throne_item.isBroken) temp.push(trId);
            }
            while (temp.length > 0) STrChOThroneRepairData.items.push(temp.pop());
            STrChOThroneRepairData.index = 0
            SAVESTrChOThroneRepairData();
            t.populateThroneRepairListBox();
            t.buildThroneRepairDisplay();
        }, false);

        document.getElementById('STrChOThroneRepairAdd').addEventListener('click', function () {
            t.addQueue();
        }, false);

        document.getElementById('STrChOThroneRepairAddAll').addEventListener('click', function () {
            t.addAllQueue();
        }, false);

        document.getElementById('STrChOThroneRepairRefresh').addEventListener('click', function () {
            t.populateThroneRepairListBox();
        }, false);

        if (STrChOThroneRepairData.active)
            t.setStatus('Loading...');
        else
            t.setStatus('Powered Off');

        t.refreshAetherDisplay();

        var d = 2 + Math.random() * 8;
        if (Seed.queue_throne != null && Seed.queue_throne.end != null) {
            var repairTimeLeft = Seed.queue_throne.end - unixTime();
            t.repairEnd = Seed.queue_throne.end;
            t.repairId = Seed.queue_throne.itemId;
            var n = new Date(t.repairEnd * 1000);

            t.setStatus("Waiting until " + n.toLocaleTimeString() + " for repair to complete.  Item: " + uW.kocThroneItems[t.repairId].name);
            if (STrChOThroneRepairData.useSH || STrChOThroneRepairData.useKH || STrChOThroneRepairData.useGH || STrChOThroneRepairData.useMH || STrChOThroneRepairData.useAH || STrChOThroneRepairData.useWH || STrChOThroneRepairData.useDH || STrChOThroneRepairData.useEH || (STrChOThroneRepairData.overrideSpeedUp && STrChOThroneRepairData.useSpeedUp > 0)) {
                var throneItem = uW.kocThroneItems[t.repairId];
                var trQuality = throneItem.quality;
                var trLevel = throneItem.level;
                var useThoseSpeedups = true;
                if (STrChOThroneRepairData.hourglassQualitySpecific && trQuality < STrChOThroneRepairData.hourglassQuality) useThoseSpeedups = false;
                if (STrChOThroneRepairData.hourglassLevelSpecific && trLevel < STrChOThroneRepairData.hourglassLevel) useThoseSpeedups = false;
                if (STrChOThroneRepairData.overrideSpeedUp) useThoseSpeedups = true;
                if (useThoseSpeedups) {
                    setTimeout(function () { t.doSpeedup(); }, 2000);
                }
            }
            setTimeout(t.clearRepair, (repairTimeLeft + 1) * 1000);
            if (repairTimeLeft > 0) d += repairTimeLeft;
        }

        t.populateThroneRepairListBox();
        t.buildThroneRepairDisplay();


        if (!STrChOThroneRepairData.active) t.setStatus("Powered Off");


        if (t.timerH == null) {
            t.timerH = setTimeout(t.doAction, d * 1000);
        }
	},

    refreshAetherDisplay : function () {
        document.getElementById('STrChOThroneRepairAetherDisplay').innerHTML = displayCityAstone();
    },

	hide: function () {},

	show: function () {
		var t = Tabs.throneRepair;
        t.refreshAetherDisplay();
        t.populateThroneRepairListBox();
        t.buildThroneRepairDisplay();
	},

    doRepair: function (rItem) {
        var t = Tabs.throneRepair;
        var params = uW.Object.clone(ajfx);

        if (STrChOThroneRepairData.active == false || rItem == 0 || uW.kocThroneItems[rItem] == null) return;

        var theItem = uW.kocThroneItems[rItem];

        params.action = 'timeRepair';
        params.throneRoomItemId = rItem;
        params.ctrl = 'throneRoom\\ThroneRoomServiceAjax';

        new AjaxRequest(uW.g_ajaxpath + "ajax/_dispatch53.php" + uW.g_ajaxsuffix, {
            method: "post",
            parameters: params,
            loading: true,
            onSuccess: function (transport) {

                var rslt = eval("(" + transport.responseText + ")");

                if (rslt.ok) {
                    var item = uW.kocThroneItems[rItem];
                    var startTime = unixTime();
                    var endTime = rslt.eta;
                    ActionLog('Starting repair for Throne Room item ' + item.name);
                    Seed.queue_throne.itemId = item.id;
                    Seed.queue_throne.start = startTime;
                    Seed.queue_throne.end = endTime;
                    t.repairId = item.id;
                    t.repairEnd = endTime;
                    var n = new Date(t.repairEnd * 1000);
                    t.setStatus("Repair begun ... Repair will be complete at " + n.toLocaleTimeString() + ". Item: " + item.name);
                    var secondsForRepair = t.repairEnd - startTime;
                    if (secondsForRepair < 0) secondsForRepair = 0;
                    CM.ThroneView.renderInventory(uW.kocThroneItems);
                    t.clearTimerH = setTimeout(t.clearRepair, (secondsForRepair + 1) * 1000);
                    t.buildThroneRepairDisplay();
                    if (STrChOThroneRepairData.useSH || STrChOThroneRepairData.useKH || STrChOThroneRepairData.useGH || STrChOThroneRepairData.useMH || STrChOThroneRepairData.useAH || STrChOThroneRepairData.useWH || STrChOThroneRepairData.useDH || STrChOThroneRepairData.useEH || (STrChOThroneRepairData.overrideSpeedUp && STrChOThroneRepairData.useSpeedUp > 0)) {
                        var throneItem = uW.kocThroneItems[t.repairId];
                        var trQuality = throneItem.quality;
                        var trLevel = throneItem.level;
                        var useThoseSpeedups = true;
                        if (STrChOThroneRepairData.hourglassQualitySpecific && trQuality < STrChOThroneRepairData.hourglassQuality) useThoseSpeedups = false;
                        if (STrChOThroneRepairData.hourglassLevelSpecific && trLevel < STrChOThroneRepairData.hourglassLevel) useThoseSpeedups = false;
                        if (STrChOThroneRepairData.overrideSpeedUp) useThoseSpeedups = true;
                        if (useThoseSpeedups) {
                            setTimeout(function () { t.doSpeedup(); }, 2000);
                        }
                    }
                }
                else {
                    if (rslt.msg == "Item is not broken") {
                        uW.kocThroneItems[rItem].isBroken = false;
                        t.clearRepair();
                    }

                    // regrab the end times in case this is caused by a manual repair
                    if (Seed.queue_throne && Seed.queue_throne.end && Seed.queue_throne.itemId) {
                        t.repairEnd = Seed.queue_throne.end;
                        t.repairId = Seed.queue_throne.itemId;
                    }

                }
                return;
            },
            onFailure: function (ttt) {
                // this usually means a repair is in progress (such as a manual repair). Grab the seed data (if possible)
                if (Seed.queue_throne && Seed.queue_throne.end) {
                    t.repairEnd = Seed.queue_throne.end;
                    t.repairId = Seed.queue_throne.itemId;
                }

                return;
            }
        });
        return;
    },


    togglePower: function (obj) {
        var t = Tabs.throneRepair;

        var STrChOThroneRepairPower = document.getElementById('STrChOThroneRepairPower');

        if (STrChOThroneRepairData.active) {
            STrChOThroneRepairData.active = false;
            STrChOThroneRepairPower.value = "Repair = OFF";
            t.setStatus("Powered Off");
            t.setResult("");

        } else {
            STrChOThroneRepairData.active = true;
            STrChOThroneRepairPower.value = "Repair = ON";
            t.setStatus("Powered On");
            t.setResult("");
            STrChOThroneUpgradeData.active = false;
            SAVESTrChOThroneUpgradeData();
            t.doAction();
        }

        if (!STrChOThroneRepairData.active) {

        }

        SAVESTrChOThroneRepairData();
        t.updateThroneMenu();

    },

    clearRepair: function () {
        var t = Tabs.throneRepair;
        var timeUntilDone = 0;

        if (t.repairEnd == 0) {
            return timeUntilDone;
        }
        timeUntilDone = t.repairEnd - unixTime();

        if (timeUntilDone <= 0) {
            // logit("clearing repair");
            if (t.repairId != 0 && uW.kocThroneItems[t.repairId] != null) {
                if (!uW.kocThroneItems[t.repairId].isBroken) {
                    t.setStatus("Repair time complete.");
                    document.getElementById('STrChOThroneRepairState' + t.repairId).className = "STrChOSuccess";
                } else {
                    uW.kocThroneItems[t.repairId].isBroken = false;
                    uW.kocThroneItems[t.repairId].brokenType = "";
                }
                t.repairId = 0;
            }

        }
        CM.ThroneView.renderInventory(uW.kocThroneItems);
        return timeUntilDone;
    },

    setStatus: function (s) {
        document.getElementById('STrChOThroneRepairStatus').innerHTML = "<div>" + s + "</div>";
    },

    setResult: function (s) {
        document.getElementById('STrChOThroneRepairLastResult').innerHTML = "<div>" + s + "</div>";
    },

    updateThroneMenu: function () {
        if (!document.getElementById('STrChOExecuteRepair')) return;
        document.getElementById('STrChOExecuteRepair').innerHTML = 'Repair ' + (STrChOThroneRepairData.active ? 'ON' : 'OFF');
    },

    deleteRepairItem: function (index) {
        // delete an item from the queue
        var t = Tabs.throneRepair;
        STrChOThroneRepairData.items.splice(index, 1);
        SAVESTrChOThroneRepairData();
        t.populateThroneRepairListBox();
        t.buildThroneRepairDisplay();
    },

    moveRepairUpRow: function (index) {
        if (index < 1) return;
        var t = Tabs.throneRepair;
        var q = STrChOThroneRepairData.items.splice(index, 1);
        STrChOThroneRepairData.items.splice(index - 1, 0, q);

        if (index == STrChOThroneRepairData.index)
            STrChOThroneRepairData.index--;
        else if (STrChOThroneRepairData.index == index - 1)
            STrChOThroneRepairData.index++;

        SAVESTrChOThroneRepairData();
        t.buildThroneRepairDisplay();
    },

    moveRepairDownRow: function (index) {
        if (index > (STrChOThroneRepairData.items.length - 2)) return;

        var t = Tabs.throneRepair;
        var q = STrChOThroneRepairData.items.splice(index, 1);
        STrChOThroneRepairData.items.splice(index + 1, 0, q);

        if (i == STrChOThroneRepairData.index)
            STrChOThroneRepairData.index++;
        else if (STrChOThroneRepairData.index == i + 1)
            STrChOThroneRepairData.index--;

        SAVESTrChOThroneRepairData();
        t.buildThroneRepairDisplay();

    },

    buildThroneRepairDisplay: function () {
        var t = Tabs.throneRepair;

        var STrChOThroneRepairQDiv = document.getElementById('STrChOThroneRepairQDiv');

        var totalRepairTime = t.calcRepairTime();

        var item_count = STrChOThroneRepairData.items.length;

        var m = '<table>';

        if (totalRepairTime > 0) m += '<caption><b><i>Total Repair Time (' + item_count + ' items): ' + repairTimeToText(totalRepairTime) + '</i></b></caption>';

        m += '<tr>';
        m += '<th width=10%>Remove</th>';
        m += '<th width=5%>Order</th>';
        m += '<th width=8%>Status</th>';
        m += '<th width=25%>Item</th>';
        m += '</tr>';

        if (item_count > 0) {
            for (var item_index = 0; item_index < item_count; item_index++) {
                var trId = STrChOThroneRepairData.items[item_index];

                if (trId == null) {
                    t.deleteRepairItem(item_index);
                    return;
                }
                var throne_item = uW.kocThroneItems[trId];
                if (throne_item == null || !throne_item) {
                    t.deleteRepairItem(item_index);
                    return;
                }

                m += '<tr>';
                m += '<td align=center><div id=STrChOThroneRepairRemove' + trId + ' class=STrChORemove></div></td>';
                m += '<td align=center><div class=STrChOUpRow id=STrChOThroneRepairUpRow' + trId + '></div><div class=STrChODownRow  id=STrChOThroneRepairDownRow' + trId + '></div></td>';
                m += '<td align=center><div id=STrChOThroneRepairState' + trId + '></div></td>';
                m += '<td align=center class=STrChOThroneRepairItemName><div id=STrChOThroneRepairItem' + trId + ' >' + throne_item.name + '</div></td>';
                m += '</tr>';
            }

            m += '</table>';

            STrChOThroneRepairQDiv.innerHTML = m;

            for (var item_index = 0; item_index < item_count; item_index++) {

                var trId = STrChOThroneRepairData.items[item_index];

                var throne_item = uW.kocThroneItems[trId];

                if (throne_item == null || !throne_item) continue;

                document.getElementById('STrChOThroneRepairItem' + trId).addEventListener('mouseover', function(A) {
                    A.stopPropagation();
                    var throneId = this.id.split('STrChOThroneRepairItem')[1];
                    var throneItem = uW.kocThroneItems[throneId];
                    var STrChOCard = document.getElementById('STrChOThroneRepairItem' + throneId);
                    CM.ThroneView.hoverItem(A, STrChOCard, throneItem);
                }, false);

                document.getElementById('STrChOThroneRepairRemove' + trId).setAttribute('v1', item_index);
                document.getElementById('STrChOThroneRepairRemove' + trId).addEventListener('click', function () {
                    var qIndex = this.getAttribute('v1');
                    t.deleteRepairItem(qIndex);
                }, false);

                document.getElementById('STrChOThroneRepairUpRow' + trId).setAttribute('v1', item_index);
                document.getElementById('STrChOThroneRepairUpRow' + trId).addEventListener('click', function () {
                    var qIndex = this.getAttribute('v1');
                    t.moveRepairUpRow(qIndex);
                }, false);

                document.getElementById('STrChOThroneRepairDownRow' + trId).setAttribute('v1', item_index);
                document.getElementById('STrChOThroneRepairDownRow' + trId).addEventListener('click', function () {
                    var qIndex = this.getAttribute('v1');
                    t.moveRepairDownRow(qIndex);
                }, false);

                var throne_item = uW.kocThroneItems[trId];
                if (!throne_item || !(throne_item.id)) {
                    document.getElementById('STrChOThroneRepairState' + trId).innerHTML = '<div style="text-align:center"> ??</div>';
                } else if (!throne_item.isBroken) {
                    document.getElementById('STrChOThroneRepairState' + trId).className = 'STrChOSuccess';
                } else if (throne_item.isBroken) {
                    if (trId == t.repairId) {
                        document.getElementById('STrChOThroneRepairState' + trId).className = 'STrChOHammer';
                    } else {
                        document.getElementById('STrChOThroneRepairState' + trId).className = 'STrChOBroken';
                    }
                }

            }
        } else {
            m += '</table>';

            STrChOThroneRepairQDiv.innerHTML = m;
        }
    },

    populateThroneRepairListBox: function () {
        var repairList = document.getElementById('STrChOThroneRepairList');
        var m = '<option value=0>--Items--</option>';

        var item_count = STrChOThroneRepairData.items.length;

        for (trId in uW.kocThroneItems) {
            var throne_item = uW.kocThroneItems[trId];
            if (throne_item == null || !throne_item) continue;
            if (!throne_item.isBroken) continue; //item not broken, move on

            var foundIt = false;
            for (var item_index = 0; item_index < item_count; item_index++) {
                if (trId == STrChOThroneRepairData.items[item_index]) {
                    foundIt = true;
                    break;
                }
            }
            if (!foundIt) {
                var optionText = throne_item.name;
                m += '<option value="' + trId + '">' + optionText + '</option>';
            }
        }
        repairList.innerHTML = m;
    },

    deleteQueue: function () {
        var t = Tabs.throneRepair
        STrChOThroneRepairData.items = [];
        SAVESTrChOThroneRepairData();
        t.populateThroneRepairListBox();
        t.buildThroneRepairDisplay();
    },

    addAllQueue: function () {
        var t = Tabs.throneRepair;

        for (trId in uW.kocThroneItems) {
            var throne_item = uW.kocThroneItems[trId];
            if (throne_item == null || !throne_item) continue;
            if (throne_item.isBroken) {
                t.addQueue(trId);
            }
        }

    },

    selectNext: function () {

        var l = STrChOThroneRepairData.items.length;
        for (i = 0; i < l; i++) {

            var throne_item = uW.kocThroneItems[STrChOThroneRepairData.items[i]];
            if (throne_item == null || !throne_item) continue;
            if ((throne_item != null) && (throne_item.isBroken)) {
                STrChOThroneRepairData.index = i;
                SAVESTrChOThroneRepairData();
                return;
            }
        }

        // if we get here, the queue is complete
        STrChOThroneRepairData.index = -1;

        SAVESTrChOThroneRepairData();
    },

    calcRepairTime: function () {
        var t = Tabs.throneRepair
        var item_count = STrChOThroneRepairData.items.length;
        var total_time = 0;
        for (var item_index = 0; item_index < item_count; item_index++) {
            var trId = STrChOThroneRepairData.items[item_index];
            var throne_item = uW.kocThroneItems[trId];
            if (throne_item == null || !throne_item) continue;
            var item_time = CM.thronestats.repairCostUpgrade[throne_item.level].Time;
            total_time += item_time;
        }
        return total_time;
    },

    addQueue: function (iD) {
        var t = Tabs.throneRepair;

        if (iD == null) {
            var trId = document.getElementById('STrChOThroneRepairList').value;
        } else {
            var trId = iD;
        }

        if (trId == 0 || trId == null) return;

        var item_count = STrChOThroneRepairData.items.length;

        if (item_count > 0) {
            for (var item_index = 0; item_index < item_count; item_index++) {
                if (trId == STrChOThroneRepairData.items[item_index]) return;
            }
        }

        STrChOThroneRepairData.items.push(trId);
        SAVESTrChOThroneRepairData();
        t.populateThroneRepairListBox();
        t.buildThroneRepairDisplay();
    },

    doSpeedup: function () {
        var t = Tabs.throneRepair;

        var endTime = t.repairEnd;
        var startTime = unixTime();
        var secondsForRepair = endTime - startTime;
        var divId = "";

        t.speedup = 0;

        if (secondsForRepair > 0 && STrChOThroneRepairData.overrideSpeedUp && STrChOThroneRepairData.useSpeedUp > 0) {
            t.speedup = STrChOThroneRepairData.useSpeedUp;
        } else {
            if (t.speedup == 0 && secondsForRepair >= HOURGLASSES_TIME_MIN_THRESHOLD.day25 && STrChOThroneRepairData.useAH && uW.ksoItems[8].count > 0) { t.speedup = 8; }
            if (t.speedup == 0 && secondsForRepair >= HOURGLASSES_TIME_MIN_THRESHOLD.hour24 && STrChOThroneRepairData.useAH && uW.ksoItems[7].count > 0) { t.speedup = 7; }
            if (t.speedup == 0 && secondsForRepair >= HOURGLASSES_TIME_MIN_THRESHOLD.hour15 && STrChOThroneRepairData.useAH && uW.ksoItems[6].count > 0) { t.speedup = 6; }
            if (t.speedup == 0 && secondsForRepair >= HOURGLASSES_TIME_MIN_THRESHOLD.hour8 && STrChOThroneRepairData.useAH && uW.ksoItems[5].count > 0) { t.speedup = 5; }
            if (t.speedup == 0 && secondsForRepair >= HOURGLASSES_TIME_MIN_THRESHOLD.hour25 && STrChOThroneRepairData.useMH && uW.ksoItems[4].count > 0) { t.speedup = 4; }
            if (t.speedup == 0 && secondsForRepair >= HOURGLASSES_TIME_MIN_THRESHOLD.hour1 && STrChOThroneRepairData.useGH && uW.ksoItems[3].count > 0) { t.speedup = 3; }
            if (t.speedup == 0 && secondsForRepair >= HOURGLASSES_TIME_MIN_THRESHOLD.minute15 && STrChOThroneRepairData.useKH && uW.ksoItems[2].count > 0) { t.speedup = 2; }
            if (t.speedup == 0 && secondsForRepair >= HOURGLASSES_TIME_MIN_THRESHOLD.minute1 && STrChOThroneRepairData.useSH && uW.ksoItems[1].count > 0) { t.speedup = 1; }
        }

        switch (t.speedup) {
            case "1":
            case 1:
                secondsForRepair -= HOURGLASSES_TIME.minute1;
                divId = 'STrChOThroneRepairUseSHLabel';
                break;
            case "2":
            case 2:
                secondsForRepair -= HOURGLASSES_TIME.minute15;
                divId = 'STrChOThroneRepairUseKHLabel';
                break;
            case "3":
            case 3:
                secondsForRepair -= HOURGLASSES_TIME.hour1;
                divId = 'STrChOThroneRepairUseGHLabel';
                break;
            case "4":
            case 4:
                secondsForRepair -= HOURGLASSES_TIME.hour25;
                divId = 'STrChOThroneRepairUseMHLabel';
                break;
            case "5":
            case 5:
                secondsForRepair -= HOURGLASSES_TIME.hour8;
                divId = 'STrChOThroneRepairUseAHLabel';
                break;
            case "6":
            case 6:
                secondsForRepair -= HOURGLASSES_TIME.hour15;
                divId = 'STrChOThroneRepairUseWHLabel';
                break;
            case "7":
            case 7:
                secondsForRepair -= HOURGLASSES_TIME.hour24;
                divId = 'STrChOThroneRepairUseDHLabel';
                break;
            case "8":
            case 8:
                secondsForRepair -= HOURGLASSES_TIME.day25;
                divId = 'STrChOThroneRepairUseEHLabel';
                break;
        }

        if (t.speedup != 0) {
            t.setResult('Used ' + uW.ksoItems[t.speedup].name);
            var divCount = uW.ksoItems[t.speedup].count - 1;
            var divSpeedups = document.getElementById(divId);
            divSpeedups.innerHTML = divCount;
            uW.modal_speedup_apply("throne", t.speedup, t.repairId);

            if (secondsForRepair <= 0) {
                secondsForRepair = 0;
                endTime = startTime;
                t.clearTimerH = setTimeout(t.clearRepair, 1000);
            } else {
                endTime = unixTime() + secondsForRepair;
                t.repairEnd = endTime;
                var n = new Date(t.repairEnd * 1000);
                var item = uW.kocThroneItems[t.repairId];
                if (item) {
                    t.setStatus("Repair begun ... Repair will be complete at " + n.toLocaleTimeString() + ". Item: " + item.name);
                    t.clearTimerH = setTimeout(t.clearRepair, secondsForRepair * 1000);
                }
            }
            t.buildThroneRepairDisplay();
            t.repairEnd = endTime;
            setTimeout(function () { t.doSpeedup(); }, 1000);
        }
    },

    doAction: function () {
        var t = Tabs.throneRepair;
        t.populateThroneRepairListBox();

        if (STrChOThroneUpgradeData.active) {
            t.setStatus('Waiting for upgrade tab to finish...');
            if (STrChOThroneRepairData.active) t.togglePower();
            return;
        }

        if (!STrChOThroneRepairData.active) {
            t.setStatus("Powered Off");
            return;
        } else {
            var retryTime = STrChOGeneralOptions.retryInterval;

            try {
                // check if repair is done
                var ti = t.clearRepair();
                if (ti <= 0) {
                    // repair is done

                    // set the index
                    t.selectNext();

                    if (STrChOThroneRepairData.index < 0) {
                        t.setStatus("Reached end of queue.")
                        t.setResult("");
                        SAVESTrChOThroneRepairData();
                    } else {
                        var throne_item = uW.kocThroneItems[STrChOThroneRepairData.items[STrChOThroneRepairData.index]];
                        if (throne_item) {
                            t.repairId = throne_item.id;
                            t.doRepair(throne_item.id);
                        }
                    }

                } else {
                    // come back after repair is complete
                    retryTime = ti + 5;
                    var n = new Date(t.repairEnd * 1000);
                    t.setStatus("Waiting until " + n.toLocaleTimeString() + " for repair to complete.  Item: " + uW.kocThroneItems[t.repairId].name);
                    if (STrChOThroneRepairData.useSH || STrChOThroneRepairData.useKH || STrChOThroneRepairData.useGH || STrChOThroneRepairData.useMH || STrChOThroneRepairData.useAH || STrChOThroneRepairData.useWH || STrChOThroneRepairData.useDH || STrChOThroneRepairData.useEH || (STrChOThroneRepairData.overrideSpeedUp && STrChOThroneRepairData.useSpeedUp > 0)) {
                        var throneItem = uW.kocThroneItems[t.repairId];
                        var trQuality = throneItem.quality;
                        var trLevel = throneItem.level;
                        var useThoseSpeedups = true;
                        if (STrChOThroneRepairData.hourglassQualitySpecific && trQuality < STrChOThroneRepairData.hourglassQuality) useThoseSpeedups = false;
                        if (STrChOThroneRepairData.hourglassLevelSpecific && trLevel < STrChOThroneRepairData.hourglassLevel) useThoseSpeedups = false;
                        if (STrChOThroneRepairData.overrideSpeedUp) useThoseSpeedups = true;
                        if (useThoseSpeedups) {
                            setTimeout(function () { t.doSpeedup(); }, 2000);
                        }
                        retryTime = 1;
                    }
                }
                CM.ThroneView.renderInventory(uW.kocThroneItems);
            } catch (e) {
            }
            // recycle
            clearTimeout(t.timerH);
            t.timerH = setTimeout(t.doAction, retryTime * 1000);
            t.buildThroneRepairDisplay();
        }
    },
}

Tabs.throneOrganizer = {
	tabOrder: 104,
	tabLabel: 'ORGANIZER',
	tabColor: 'red',
    tabHeader: 'THRONE ROOM ORGANIZER',
    throneItemLists: {},
    sortEffect: "none",
    buffType: "both",
    panelId: -1,
    panelType: "upgrade",
    panelNextLevel: 2,
    switchingPresets: false,
    thronePanelOpen: false,

	init: function (div) {
		var t = Tabs.throneOrganizer;
		t.mydiv = div;

        t.sortEffect = STrChOThroneUpgradeData.effectSelected;
        t.buffType = STrChOThroneUpgradeData.buffSelected;

        var throneEffects = [];
        for (efx in CM.thronestats.effects) {
			var throneEffectName = CM.thronestats.effects[efx][1].split(" Debuff")[0];
			if (throneEffects.indexOf(throneEffectName) < 0) throneEffects.push(throneEffectName);
        }

		var m = '<div class=STrChOHeader>' + t.tabHeader + '</div>';

        m += '<div>';
        m += '<table class=STrChOSectionTable>';
        m += '<tr><td>';

        m += 'Sort: <select class=STrChOSelect id=STrChOThroneSortEffects>';
        m += '<option value="none">--Effect--</option>';
        for (efx=0;efx<throneEffects.length;efx++) m += '<option value="' + throneEffects[efx] + '">' + throneEffects[efx] + '</option>';
        m += '</select>';
        m += '<select class=STrChOSelect id=STrChOThroneBuffType>';
        m += '<option value="both">Either</option>';
        m += '<option value="buff">Buff</option>';
        m += '<option value="debuff">Debuff</option>';
        m += '</select>';

        m += '<input id=STrChOThroneSortInactive class=STrChOCheckbox type=checkbox ' + (STrChOThroneUpgradeData.sortInactive ? ' CHECKED' : '') + '/> Include Inactive ';
        m += '<input id=STrChOThroneIgnoreBroken class=STrChOCheckbox type=checkbox ' + (STrChOThroneUpgradeData.ignoreBroken ? ' CHECKED' : '') + '/> Ignore Broken';
        m += '</td></tr>';
        m += '</table>';
        m += '</div>';

        m += '<div id=STrChOThroneOrganizerScroll style="position: static; width: ' + (dlgWidth -  (dlgWidthOffset + dlgWidthMenu)) + 'px; height: ' + (dlgHeight - (dlgHeightOffset*2.5)) + 'px; overflow-x: hidden; overflow-y: auto;">';


        m += '<div class=STrChOHeader onmouseover="this.style.cursor=\'pointer\'"><img src="'+STrChORightArrow+'"/>&nbsp;CARD FILTER&nbsp;<img class=STrChOReverseImage src="'+STrChORightArrow+'"/></div>';

        m += '<div class=STrChOSection>';
        m += '<table class=STrChOSectionTable cellspacing=0 cellpadding=0>';

        m += '<tr><td colspan=4>';
        m += 'Filter By Effects: <select class=STrChOSelect id=STrChOThroneFilterEffects>';
        m += '<option value="none">--Effect--</option>';
        for (efx=0;efx<throneEffects.length;efx++) m += '<option value="' + throneEffects[efx] + '">' + throneEffects[efx] + '</option>';
        m += '</select>';
        m += '<select class=STrChOSelect id=STrChOThroneFilterBuffType>';
        m += '<option value="buff">Buff</option>';
        m += '<option value="debuff">Debuff</option>';
        m += '</select>';
        m += '</td></tr>';

        m += '<tr><td colspan=4><hr class=STrChOHRCenter></td></tr>';

        m += '<tr><td>Faction</td><td>Quality</td><td>Level</td><td>Jewel</td></tr>';

        m += '<tr>';

        m += '<td><div id=STrChOThroneFactionFilterRow style="float: left; width: 100px; border:2px solid #ccc; height: 105px; overflow-y: scroll; background-color: white;">';
        for (var fact=0;fact<STrChOFactions.length;fact++) m += '<input id=STrChOThroneFaction' + STrChOFactions[fact] + ' class=STrChOCheckbox type=checkbox  CHECKED />' + String(STrChOFactions[fact]).capitalizeFirstLetter() + '<br />';
        m += '</div></td>';

        m += '<td><div id=STrChOThroneQualityFilterRow style="float: left; width: 120px; border:2px solid #ccc; height: 105px; overflow-y: scroll; background-color: white;">';
        for (var qual = 0; qual < throneCardQualities.length; qual++) m += '<input id=STrChOThroneQuality' + qual + ' class=STrChOCheckbox type=checkbox  CHECKED />' + throneCardQualities[qual].capitalizeFirstLetter() + '<br />';
        m += '<input id=STrChOThroneQualityUnique class=STrChOCheckbox type=checkbox CHECKED />Uniques<br />';
        m += '</div></td>';

        m += '<td><div id=STrChOThroneLevelFilterRow style="float: left; width: 120px; border:2px solid #ccc; height: 105px; overflow-y: scroll; background-color: white;">';
        for (lvl = 0; lvl <= STrChOMaxThroneLevel; lvl++) {
            m += '<input id=STrChOThroneLevel' + lvl + ' class=STrChOCheckbox type=checkbox CHECKED />' + lvl + '<br /> ';
        }
        m += '</div></td>';

        m += '<td><div id=STrChOThroneJewelFilterRow style="float: left; width: 120px; border:2px solid #ccc; height: 105px; overflow-y: scroll; background-color: white;">';
        m += '<input id=STrChOThroneJewelNone class=STrChOCheckbox type=checkbox CHECKED />No Jewel<br />';

        for (var jwl = 0; jwl < STrChOJewelQualities.length; jwl++) m += '<input id=STrChOThroneJewel' + (jwl+1) + ' class=STrChOCheckbox type=checkbox CHECKED />' + STrChOJewelQualities[jwl].capitalizeFirstLetter() + '<br /> ';

        m += '</div></td>';

        m += '</tr>';

        m += '<tr>';
        m += '<td/>';
        m += '<td><input style="width:120px;" id=STrChOThroneUnselectAllQualities class=STrChOButton type=button value="Unselect All"></td>';
        m += '<td><input style="width:120px;" id=STrChOThroneUnselectAllLevels class=STrChOButton type=button value="Unselect All"></td>';
        m += '<td><input style="width:120px;" id=STrChOThroneUnselectAllJewels class=STrChOButton type=button value="Unselect All"></td>';
        m += '</tr>';
        m += '<tr>';
        m += '<td/>';
        m += '<td><input style="width:120px;" id=STrChOThroneSelectAllQualities class=STrChOButton type=button value="Select All"></td>';
        m += '<td><input style="width:120px;" id=STrChOThroneSelectAllLevels class=STrChOButton type=button value="Select All"></td>';
        m += '<td><input style="width:120px;" id=STrChOThroneSelectAllJewels class=STrChOButton type=button value="Select All"></td>';
        m += '</tr>';

        m += '</table>';
        m += '</div>';

        for (var tct = 0; tct < throneCardTypes.length; tct++) {
            m += '<div class=STrChOThroneOrganizer onmouseover="this.style.cursor=\'pointer\'"><img src="'+STrChORightArrow+'"/>&nbsp;' + throneCardTypes[tct].toUpperCase() + '&nbsp;<img class=STrChOReverseImage src="'+STrChORightArrow+'"/></div>';
            m += '<div class=STrChOThroneOrganizerSection id=STrChOThroneCardSection' + throneCardTypes[tct] + '></div>';
        }

        //m += '</div>';
		t.mydiv.innerHTML = '<div>' + m + '</div>';

        var throneOrganizers = document.getElementsByClassName('STrChOThroneOrganizer');
        for (var throneOrg=0; throneOrg < throneOrganizers.length; throneOrg++) {
            throneOrganizers[throneOrg].addEventListener('click', function () {

                var imgs = this.childNodes;
                if (imgs[0].src == STrChODownArrow) {
                    imgs[0].src = STrChORightArrow
                    imgs[2].src = STrChORightArrow
                } else {
                    imgs[0].src = STrChODownArrow
                    imgs[2].src = STrChODownArrow
                }
                var section = this.nextSibling;
                if (section.className != 'STrChOThroneOrganizerSection') return;

                if (section.style.display == 'block')
                    section.style.display = 'none';
                else
                    section.style.display = 'block';

            }, false);
        }

        var header = document.getElementsByClassName('STrChOHeader');
        for (var head=0;head<header.length;head++) {
            header[head].addEventListener('click', sectionOpener, false);
        }

        document.getElementById('STrChOThroneSortEffects').value = STrChOThroneUpgradeData.effectSelected;
        document.getElementById('STrChOThroneBuffType').value = STrChOThroneUpgradeData.buffSelected;
        document.getElementById('STrChOThroneSortInactive').checked = STrChOThroneUpgradeData.sortInactive;
        document.getElementById('STrChOThroneIgnoreBroken').checked = STrChOThroneUpgradeData.ignoreBroken;

        document.getElementById('STrChOThroneFilterBuffType').addEventListener('change', function () {
            t.createThroneItemList();
            t.paintThroneTables();
        }, false);

        document.getElementById('STrChOThroneFilterEffects').addEventListener('change', function () {
            t.createThroneItemList();
            t.paintThroneTables();
        }, false);

        document.getElementById('STrChOThroneSortEffects').addEventListener('change', function () {
            t.sortEffect = this.value;
            STrChOThroneUpgradeData.effectSelected = t.sortEffect;
            SAVESTrChOThroneUpgradeData();
            t.createThroneItemList();
            t.paintThroneTables();
        }, false);

        document.getElementById('STrChOThroneBuffType').addEventListener('change', function () {
            t.buffType = this.value;
            STrChOThroneUpgradeData.buffSelected = t.buffType;
            SAVESTrChOThroneUpgradeData();
            t.createThroneItemList();
            t.paintThroneTables();
        }, false);

        document.getElementById('STrChOThroneSortInactive').addEventListener('click', function () {
            STrChOThroneUpgradeData.sortInactive = document.getElementById('STrChOThroneSortInactive').checked;
            SAVESTrChOThroneUpgradeData();
            t.createThroneItemList();
            t.paintThroneTables();
        }, false);

        document.getElementById('STrChOThroneIgnoreBroken').addEventListener('click', function () {
            STrChOThroneUpgradeData.ignoreBroken = document.getElementById('STrChOThroneIgnoreBroken').checked;
            SAVESTrChOThroneUpgradeData();
            t.createThroneItemList();
            t.paintThroneTables();
        }, false);

        document.getElementById('STrChOThroneUnselectAllQualities').addEventListener('click' , function () {
            for (var qual = 0; qual < throneCardQualities.length; qual++) document.getElementById('STrChOThroneQuality' + qual).checked = false;
            document.getElementById('STrChOThroneQualityUnique').checked = false;
            t.createThroneItemList();
            t.paintThroneTables();
        }, false);

        document.getElementById('STrChOThroneSelectAllQualities').addEventListener('click', function () {
            for (var qual = 0; qual < throneCardQualities.length; qual++) document.getElementById('STrChOThroneQuality' + qual).checked = true;
            document.getElementById('STrChOThroneQualityUnique').checked = true;
            t.createThroneItemList();
            t.paintThroneTables();
        }, false);

        document.getElementById('STrChOThroneQualityFilterRow').addEventListener('change', function () {
            t.createThroneItemList();
            t.paintThroneTables();
        }, false);


        document.getElementById('STrChOThroneUnselectAllJewels').addEventListener('click' , function () {
            for (var jwl = 0 ; jwl < STrChOJewelQualities.length; jwl ++ ) document.getElementById('STrChOThroneJewel' + (jwl+1)).checked = false;
            document.getElementById('STrChOThroneJewelNone').checked = false;
            t.createThroneItemList();
            t.paintThroneTables();
        }, false);

        document.getElementById('STrChOThroneSelectAllJewels').addEventListener('click', function () {
            for (var jwl = 0 ; jwl < STrChOJewelQualities.length; jwl ++ ) document.getElementById('STrChOThroneJewel' + (jwl+1)).checked = true;
            document.getElementById('STrChOThroneJewelNone').checked = true;
            t.createThroneItemList();
            t.paintThroneTables();
        }, false);

        document.getElementById('STrChOThroneJewelFilterRow').addEventListener('change', function () {
            t.createThroneItemList();
            t.paintThroneTables();
        }, false);

        document.getElementById('STrChOThroneUnselectAllLevels').addEventListener('click' , function () {
            for (lvl = 0; lvl <= STrChOMaxThroneLevel; lvl++) document.getElementById('STrChOThroneLevel' + lvl).checked = false;
            t.createThroneItemList();
            t.paintThroneTables();
        }, false);

        document.getElementById('STrChOThroneSelectAllLevels').addEventListener('click', function () {
            for (lvl = 0; lvl <= STrChOMaxThroneLevel; lvl++) document.getElementById('STrChOThroneLevel' + lvl).checked = true;
            t.createThroneItemList();
            t.paintThroneTables();
        }, false);

        document.getElementById('STrChOThroneLevelFilterRow').addEventListener('change', function () {
            t.createThroneItemList();
            t.paintThroneTables();
        }, false);


        document.getElementById('STrChOThroneFactionFilterRow').addEventListener('change', function () {
            t.createThroneItemList();
            t.paintThroneTables();
        }, false);

        t.createThroneItemList();
        t.paintThroneTables();

	},

	hide: function () {},

    showNextThroneLevel: function () {
        var t = Tabs.throneOrganizer;
        if (t.panelId < 0) return;
        var X = uW.kocThroneItems[t.panelId];
        if (X.level == STrChOMaxThroneLevel) return;
        var V = 'next';
        var P = t.panelType;

        var level = X.level || 0;
        var quality = X.quality || 0;

        var bump = t.panelNextLevel;

        if (P == 'enhance') {
            if ((quality + bump) > 5) {
                bump = 5 - quality;
            }
        }
        else if ((level + bump) > STrChOMaxThroneLevel) {
            bump = STrChOMaxThroneLevel - level;
        }

        var R = [],
            Q, Y, S, U, N = {},
            T, W;
        if (V == 'next') {
            if (P == 'enhance') {
                quality += bump;
                document.getElementById('nextStatContainer').firstChild.innerHTML = X.createPrefix();
            } else {
                if (P == "upgrade") {
                    level += bump;
                    document.getElementById('nextStatContainer').firstChild.innerHTML = 'Level ' + level;
                }
            }
        }

        $.each(X.effects, function (Z, aa) {
            Q = +(Z.split('slot')[1]);
            Y = CM.thronestats.effects[aa.id];
            S = CM.thronestats.tiers[aa.id][aa.tier];
            if (!S) CM.thronestats.tiers[aa.id][aa.tier - 1]
            var base = S.base || 0;
            var growth = S.growth || 0;

            U = +(base) + ((level * level + level) * +(growth) / 2);

            var wholeNumber = false;
            if (Math.round(U) == U) wholeNumber = true;

            if (wholeNumber)
                U = U.toFixed(0);
            else
                U = U.toFixed(2);

            if (Q % 2 == 0) {
                T = 'even'
            } else {
                T = 'odd'
            }
            if (Q <= quality) {
                if (U > 1) {
                    R.push('<li class="' + T + '">' + Y[1] + ' +' + U + '%</li>')
                } else {
                    R.push('<li class="' + T + '">' + Y[1] + ' ' + U + '%</li>')
                }
            } else {
                R.push('<li class="disabled ' + T + '">' + Y[1] + ' + ' + U + '%</li>')
            }
        });
        if (V == 'next') {
            if (P == 'enhance') {
                quality -= bump
            } else {
                if (P == 'upgrade') {
                    level -= bump;
                }
            }
        }
        if (V === 'next') {
            if (CM.ThronePanelController.isLastLevel(X, P)) {
                var nextStatContainer = document.getElementById('nextStatContainer');
                if (nextStatContainer.children.length < 3) {
                    W = '<div id=lockedStatIcon class=lock></div>';
                    nextStatContainer.innerHTML += W;
                }
            } else {
                var elem = document.getElementById('lockedStatIcon');
                if (elem) elem.parentNode.removeChild(elem);
            }
        }
        t.panelNextLevel++;
        document.getElementById('thronePanelStat2').innerHTML = R.join('');

        var lis = document.getElementById('thronePanelStat2').getElementsByTagName('li');
        for (var i =0; i<lis.length; i++) {
            var li = lis[i];
            li.addEventListener('mouseenter', function (Z) {
                uW.Tooltip.show(Z, this.innerHTML, [-180, 5]);
            }, false);
        }
    },

    createThroneItemList: function () {
        var t = Tabs.throneOrganizer;

        for (tct = 0; tct < throneCardTypes.length; tct++) t.throneItemLists[throneCardTypes[tct]] = new Array;
        for (throneId in uW.kocThroneItems) {
            var throneItem = uW.kocThroneItems[throneId];

            // apply filters
            var faction = throneItem.faction;
            var level = throneItem.level;
            var thronetype = throneItem.type;
            var quality = throneItem.quality;
            var unique = throneItem.unique != 0;

            var jewelQuality = 0;
            var isBroken = throneItem.isBroken;

            var noJewel = document.getElementById('STrChOThroneJewelNone').checked;
            var hasJewel = (throneItem.jewel == null ? false : true);
            if (hasJewel) jewelQuality = throneItem.jewel.quality;

            if (jewelQuality > 0) {
                if (!(document.getElementById('STrChOThroneJewel' + jewelQuality).checked)) continue;
            } else {
                if (!noJewel) continue;
            }

            if (STrChOThroneUpgradeData.ignoreBroken && isBroken) continue;
            if (!(document.getElementById('STrChOThroneQualityUnique').checked) && unique) continue;
            if (!(document.getElementById('STrChOThroneQuality' + quality).checked) && !unique) continue;
            if (!(document.getElementById('STrChOThroneFaction' + faction).checked)) continue;
            if (!(document.getElementById('STrChOThroneLevel' + level).checked)) continue;

            var filterEffect = document.getElementById('STrChOThroneFilterEffects').value;
            if (filterEffect != 'none') {
                var filterBuff = document.getElementById('STrChOThroneFilterBuffType').value;
                if (filterBuff == 'debuff') filterEffect += ' Debuff';
                var foundEffect = false;
                for (e in throneItem.effects) {
                    var N = throneItem.effects[e];
                    var effect = CM.thronestats.effects[N.id][1];
                    if (effect == filterEffect) {
                        foundEffect = true;
                        break;
                    }
                }

                if (!foundEffect) continue;
            }

            if (throneItem.isEquipped)
                t.throneItemLists[thronetype].unshift(throneItem);
            else
                t.throneItemLists[thronetype].push(throneItem);

        }
        t.sortThroneOrganizerLists();

    },

    paintThroneTables: function () {
        var t = Tabs.throneOrganizer;
        for (tct in t.throneItemLists) {
			var m = '<table><tr>';
			var divCards = document.getElementById('STrChOThroneCardSection' + tct);
			divCards.innerHTML = "<div></div>";
			for (idx = 0; idx < t.throneItemLists[tct].length; idx++) {
				var throneItem = t.throneItemLists[tct][idx];
				m += '<td><div class=STrChOThroneCard id=STrChOThroneCard' + throneItem.id + '>';
				m += BuildThroneCard(throneItem);
				m += '</div></td>';
			}
			m += '</tr></table>';
			divCards.innerHTML = '<div>' + m + '</div>';
        }
        var STrChOCards = document.getElementsByClassName('STrChOThroneCard');
        for (idx = 0; idx < STrChOCards.length; idx++) {
            STrChOCards[idx].addEventListener('click', function (A) {
                A.stopPropagation();
                var throneId = this.id.split('STrChOThroneCard')[1];
                var throneItem = uW.kocThroneItems[throneId];
                CardContextMenu(this, throneItem, true);
            }, false);
        }
        Tabs.thronePresets.paintTags();
    },

	show: function () {
		var t = Tabs.throneOrganizer;
        t.createThroneItemList();
        t.paintThroneTables();
	},

    sortThroneOrganizerLists: function () {
        var t = Tabs.throneOrganizer;
        STrChOThroneUpgradeData.sortInactive = document.getElementById('STrChOThroneSortInactive').checked;
        for (tct in t.throneItemLists) {
			t.throneItemLists[tct].sort(function (item1, item2) {
				return t.sortThroneOrganizerValue(item2) - t.sortThroneOrganizerValue(item1);
			});
        }
    },

    sortThroneOrganizerValue: function (item) {
        var t = Tabs.throneOrganizer;
        var retValue = 0.0;
        for (e in item.effects) {
            try {
                var N = item.effects[e];
                var effect = CM.thronestats.effects[N.id][1];

                var tier = CM.thronestats.tiers[N.id][N.tier];
                if (!tier) CM.thronestats.tiers[N.id][N.tier - 1]

                var B = +(e.split("slot")[1]);
                var base = tier.base || 0;
                var level = item.level || 0;
                var growth = tier.growth || 0;
                var quality = item.quality || 0;

                if (B > quality && !STrChOThroneUpgradeData.sortInactive) {
                    return +retValue;
                }

                var percent = +(base + ((level * level + level) * growth * 0.5));
                if ((effect == (t.sortEffect + " Debuff")) && (t.buffType != "buff")) {
                    retValue -= percent;
                }
                else if (effect == t.sortEffect && t.buffType != "debuff") {
                    retValue += percent;
                }
            } catch (e) {

            }

        }
        return +retValue;
    },

    unequipItem: function (I, preset) {
        var t = Tabs.throneOrganizer;
        if (!I) return;
        uW.AjaxCall.gPostRequest("ajax/_dispatch53.php", {
            ctrl: "throneRoom\\ThroneRoomServiceAjax",
            action: "unequipItem",
            itemId: I.id,
            presetId: preset
        }, function (u) {
            if (u.ok === true) {
                CM.ThroneView.clickItemUnequip(I);
            } else {
                CM.ModalManager.alert({
                    button_text: uW.g_js_strings.commonstr.ok,
                    text: u.msg,
                    "class": "craftFailure",
                    exe: function () {
                        uW.Modal.hideModalAll();
                        CM.ModalManager.close()
                    }
                })
            }
        }, function (u) {
        });
    },

    equipItem: function (I, preset) {
        if (!I) return;
        uW.AjaxCall.gPostRequest("ajax/_dispatch53.php", {
            ctrl: "throneRoom\\ThroneRoomServiceAjax",
            action: "equipItem",
            itemId: I.id,
            presetId: preset
        }, function (u) {
            if (u.ok === true) {
                CM.ThroneView.clickItemEquip(I);
            } else {
                CM.ModalManager.alert({
                    button_text: uW.g_js_strings.commonstr.ok,
                    text: u.msg,
                    "class": "craftFailure",
                    exe: function () {
                        uW.Modal.hideModalAll();
                        CM.ModalManager.close()
                    }
                })
            }
        }, function (u) {
        })
    },

}
Tabs.throneSorter = {
	tabOrder: 105,
	tabLabel: 'SORTER',
	tabColor: 'red',
    tabHeader: 'THRONE ROOM SORTER',
    STrChOLocalSwapFile: null,
    STrChOLocalSwapPresets: [],

	init: function (div) {
		var t = Tabs.throneSorter;
		t.mydiv = div;
	},


	hide: function () {},

	show: function () {
		var t = Tabs.throneSorter;

        t.STrChOLocalSwapFile = null;

		var m = '<div class=STrChOHeader>' + t.tabHeader + '</div>';

        m += '<div style="margin-top: 5px;">';
        m += '<table class=STrChOSectionTable>';
        m += '<tr><td>';
        if (STrChOGeneralOptions.throneSorter) {
            m += '<input type=button class=STrChOButton id=STrChOThroneSorterPower value="Sorter = ON">';
        } else {
            m += '<input type=button class=STrChOButton id=STrChOThroneSorterPower value="Sorter = OFF">';
        }
        m += '</td></tr>';
        m += '<tr><td colspan=3><b><font color=red>WARNINGS!</font></b></td></tr>';
        m += '<tr><td colspan=3>Sorter tab and throne panel will not sync until the other is redrawn by closing/reopening it.</td></tr>';
        m += '<tr><td colspan=3>Salvaging with throne sorter on, WILL decrease the rate of salvaging</td></tr>';
        m += '<tr><td colspan=3><hr class=STrChOHRCenter></td></tr>';
        m += '<tr><td class=indent5 colspan=3>&nbsp;';
        m += '<input id=STrChOSorterDefaults type=button class=STrChOButton value="Restore Default Order">';
        m += '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'
        m += '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'
        m += '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'
        m += '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'
        m += '<input id=STrChOSorterExport type=button class=STrChOButton value="Export">&nbsp;&nbsp;&nbsp;&nbsp;';
        m += '<input id=STrChOSorterImport type=button class=STrChOButton value="Import">&nbsp;';
        m += '<input id=STrChOSorterImportTrigger type=button class=STrChOButton value="Browse..."  onclick="document.getElementById(\'STrChOSorterImportLoadItem\').click()">';
        m += '<input hidden id=STrChOSorterImportLoadItem type=file>';
        m += '</td></tr>';
        m += '<tr><td colspan=3></td></tr>';
        m += '<tr>';

        m += '<td width=230px align=center style="vertical-align: top; text-align: middle;">';

        m += '<table width=100%>';
        m += '<tr><td align=center>';
        m += 'Slot: <select id=STrChOThroneSorterPreset class=STrChOSelect><option value="0">--Select--</option>';
        var presetSlots = getObjectCollectionCount(Seed.throne.slotEquip);
        for (var i = 1; i < presetSlots + 1; i++) {
            m += '<option value="' + i + '">' + i + ':' + STrChOThronePresetData.presetNames[i] + '</option>';
        }
        m += '</select><input type=button class=STrChOButton value="Select" id=STrChOThroneSorterPresetGo>';
        m += '</td></tr>';
        m += '<tr><td align=center>';
        m += '<b>SELECTED CARD:</b><br><div id=STrChOThroneSortCard></div>';
        m += '</td></tr>';
        m += '</table>';
        m += '</td>';


        m += '<td width=180px>';
        m += '<div id=STrChOThroneSorterInventoryList style="height: 405px; width: 180px; overflow-y: auto;">';

        if (STrChOThroneSorter.length == 0) resetThroneSorter();
        var row = 0;

        for (var idx = 0; idx < STrChOThroneSorter.length; idx++) {
            if (idx % 5 == 0) {
                row++;
                m += '<div id=STrChOThroneSorterInventoryRow' + row + ' class="active">';
            }

            var throneId = STrChOThroneSorter[idx];
            var throneItem = uW.kocThroneItems[throneId];
            if (!throneItem) continue;
            var className = '';
            className += throneItem.type + ' ';
            className += throneItem.faction + ' ';
            className += 'quality' + throneItem.quality;
            if (throneItem.unique > 0) className += ' unique' + throneItem.unique;

            img = getThroneImage(throneItem);

            if (t.STrChOLocalSwapFile == throneId) img = success_image;

            m += '<img id=STrChOThroneSorterInventoryIcon' + throneId + ' class=STrChOThroneSorterItem src="' + img + '" style="height: 30px; width: 30px;">';

            if (idx == STrChOThroneSorter.length-1 && idx % 5 != 4) m += '</div>';
            if (idx % 5 == 4) m += '</div>';
        }
        m += '</div>';
        m += '</td>';


        m += '<td width=230px align=center style="vertical-align: top; text-align: middle;">';
        m += '<b>HOVER CARD:</b><br><div id=STrChOThroneSortCardHover></div>';
        m += '</td>';

        m += '</tr>';
        m += '</table>';
        m += '</div>';

		t.mydiv.innerHTML = '<div>' + m + '</div>';

        t.displaySelectCard();

        document.getElementById('STrChOThroneSorterPresetGo').addEventListener('click', function() {
            if (!STrChOGeneralOptions.throneSorter) return;
            if (t.STrChOLocalSwapFile != null) return;
            var STrChOThroneSorterPreset = document.getElementById('STrChOThroneSorterPreset');
            if (STrChOThroneSorterPreset.value == 0) return;
            var STrChOThroneSorterPresetGo = document.getElementById('STrChOThroneSorterPresetGo');
            var STrChOThroneSortCard = document.getElementById('STrChOThroneSortCard');
            if (STrChOThroneSorterPresetGo.value == 'Select') {

                var equipped_items = Seed.throne.slotEquip[STrChOThroneSorterPreset.value];
                STrChOThroneSortCard.innerHTML = equipped_items.length + ' Cards Selected<br>From Slot ' + STrChOThroneSorterPreset.value;
                for (var ei = 0; ei < equipped_items.length; ei++) {
                    var throneId = parseInt(equipped_items[ei]);
                    t.STrChOLocalSwapPresets.push(throneId);
                    document.getElementById('STrChOThroneSorterInventoryIcon' + throneId).src = success_image;
                }
                STrChOThroneSorterPreset.disabled = true;
                STrChOThroneSorterPresetGo.value = 'Unselect';
            } else {
                STrChOThroneSortCard.innerHTML = 'No Card(s) Selected';
                for (var ei = 0; ei < t.STrChOLocalSwapPresets.length; ei++) {
                    var throneId = t.STrChOLocalSwapPresets[ei];
                    document.getElementById('STrChOThroneSorterInventoryIcon' + throneId).src = getThroneImage(uW.kocThroneItems[throneId]);
                }
                t.STrChOLocalSwapPresets = [];
                STrChOThroneSorterPresetGo.value = 'Select';
                STrChOThroneSorterPreset.disabled = false;
            }
        }, false);

        document.getElementById('STrChOThroneSorterPower').addEventListener('click', function () {
            t.togglePower(this);
        }, false);

        var STrChOThroneSorterItems = document.getElementsByClassName('STrChOThroneSorterItem');

        for (var idx = 0; idx < STrChOThroneSorterItems.length; idx++) {
            var STrChOThroneSorterItem = STrChOThroneSorterItems[idx];
            STrChOThroneSorterItem.addEventListener('mouseover', function(A) {
                A.stopPropagation();
                var throneId = this.id.split('STrChOThroneSorterInventoryIcon')[1];
                var throneItem = uW.kocThroneItems[throneId];
                document.getElementById('STrChOThroneSortCardHover').innerHTML = howManyThroneSlots(throneId) + '<br>' + BuildThroneCard(throneItem);
            }, false);

            STrChOThroneSorterItem.addEventListener('mouseout', function(A) {
                A.stopPropagation();
                var throneId = this.id.split('STrChOThroneSorterInventoryIcon')[1];
                var throneItem = uW.kocThroneItems[throneId];
                document.getElementById('STrChOThroneSortCardHover').innerHTML = '';
            }, false);


            STrChOThroneSorterItem.addEventListener('contextmenu', function(A) {
                A.preventDefault();
                if (!STrChOGeneralOptions.throneSorter) return;
                if (t.STrChOLocalSwapPresets.length > 0) {
                    var thisThroneId = parseInt(this.id.split('STrChOThroneSorterInventoryIcon')[1]);
                    var foundIndex = 0;
                    var tempSwapper = [];
                    for (var i = 0; i < STrChOThroneSorter.length; i++) {
                        var throneId = parseInt(STrChOThroneSorter[i]);
                        if (thisThroneId == throneId) {
                            foundIndex = i;
                            break;
                        }
                        if (t.STrChOLocalSwapPresets.indexOf(throneId) == -1) {  //not found in local swap list
                            tempSwapper.unshift(throneId);
                        }

                    }
                    for (var i = 0; i < t.STrChOLocalSwapPresets.length; i++ ) {
                        tempSwapper.unshift(parseInt(t.STrChOLocalSwapPresets[i]));
                    }
                    for (var i = foundIndex; i < STrChOThroneSorter.length; i++) {
                        var throneId = parseInt(STrChOThroneSorter[i]);
                        if (t.STrChOLocalSwapPresets.indexOf(throneId) == -1) { //not found in swap list
                            tempSwapper.unshift(throneId);
                        }
                    }
                    t.STrChOLocalSwapPresets = [];
                    STrChOThroneSorter = [];
                    while (tempSwapper.length > 0) STrChOThroneSorter.push(tempSwapper.pop());
                    SAVESTrChOThroneSorter();
                    t.show();
                    return;
                }

                var throneId = this.id.split('STrChOThroneSorterInventoryIcon')[1];
                var throneItem = uW.kocThroneItems[throneId];
                if (!throneItem || throneItem == null) {
                    if (t.STrChOLocalSwapFile == throneId) $(this).remove();
                    t.STrChOLocalSwapFile = null;
                    setThroneSorter(true);
                    SAVESTrChOThroneSorter();
                    t.show();
                    return;
                }
                if (t.STrChOLocalSwapFile == null) {
                    t.STrChOLocalSwapFile = throneId;
                    this.src = success_image;
                    t.displaySelectCard();
                } else {
                    if (t.STrChOLocalSwapFile == throneId) {
                        t.STrChOLocalSwapFile = null;
                        this.src = getThroneImage(throneItem);
                        t.displaySelectCard();
                        return;
                    }

                    var img = document.getElementById('STrChOThroneSorterInventoryIcon' + t.STrChOLocalSwapFile);
                    img.src = getThroneImage(uW.kocThroneItems[t.STrChOLocalSwapFile]);


                    var fromTile = document.getElementById('STrChOThroneSorterInventoryIcon' + t.STrChOLocalSwapFile);
                    var fromTilePosition = 0;
                    var child = fromTile;
                    while( (child = child.previousSibling) != null ) fromTilePosition++;

                    var toTile = document.getElementById('STrChOThroneSorterInventoryIcon' + throneId);
                    var toTilePosition = 0;
                    child = this;
                    while( (child = child.previousSibling) != null ) toTilePosition++;

                    var fromParent = fromTile.parentElement;
                    var toParent = toTile.parentElement;

                    var fromDelete = fromParent.children[fromTilePosition];
                    var toDelete = toParent.children[toTilePosition];

                    if (fromParent != toParent) { //simple swap
                        $(fromDelete).remove();
                        $(toDelete).remove();
                        fromParent.insertBefore(toTile, fromParent.childNodes[fromTilePosition]);
                        toParent.insertBefore(fromTile, toParent.childNodes[toTilePosition]);
                    } else { //little more tricky
                        var newRow = [];
                        for (var idx = 0; idx < fromParent.children.length; idx++) {
                            if (idx == fromTilePosition) {
                                newRow.unshift(toTile);
                            } else if (idx == toTilePosition) {
                                newRow.unshift(fromTile);
                            } else {
                                newRow.unshift(fromParent.children[idx]);
                            }
                        }
                        while (fromParent.hasChildNodes()) fromParent.removeChild(fromParent.lastChild);
                        while (newRow.length > 0) fromParent.appendChild(newRow.pop());
                    }
                    t.STrChOLocalSwapFile = null;
                    t.displaySelectCard();
                    setThroneSorter(true);
                    SAVESTrChOThroneSorter();
                    t.show();
                }
            }, false);
        }

        document.getElementById('STrChOSorterDefaults').addEventListener('click', function () {
            resetThroneSorter();
            t.STrChOLocalSwapFile = null;
            var cmContainerOpen = (document.getElementsByClassName('cmModalContainer').length == 1 ? true : false);
            if (cmContainerOpen) {
                var titlebar = document.getElementsByClassName('primarytitlebar')[0];
                var closebutton = titlebar.children[2];
                closebutton.click();
                setTimeout(function () { CM.ThroneView.openThrone(); }, 100);
            }
            t.show();
        }, false);

        document.getElementById('STrChOSorterExport').addEventListener('click', function () {
            if (STrChOThroneSorter.length == 0) return;
            uriContent = 'data:application/octet-stream,' + encodeURIComponent(JSON.stringify(STrChOThroneSorter));
            newWindow = window.open(uriContent, 'file.txt');
        }, false);

        document.getElementById('STrChOSorterImport').addEventListener('click', function () {
            var fileInput = document.getElementById("STrChOSorterImportLoadItem");
            var files = fileInput.files;
            if (files.length==0) {
                alert('Please Select A File');
                return;
            }
            var file = files[0];

            var reader = new FileReader();

            reader.onload = function (e) {
				var output = e.target.result;
				STrChOThroneSorter = JSON.parse(output);
                SAVESTrChOThroneSorter();
                t.show();
                alert('Throne Sorted Order Now Loaded From File');
            };
            reader.readAsText(file);
        }, false);


    },

    togglePower: function (obj) {
        var t = Tabs.throneSorter;

        var STrChOThroneSorterPower = document.getElementById('STrChOThroneSorterPower');

        if (STrChOGeneralOptions.throneSorter) {
            STrChOGeneralOptions.throneSorter = false;
            STrChOThroneSorterPower.value = "Sorter = OFF";
        } else {
            if (STrChOThroneSalvageData.active) {
                if (!confirm('SORTER WARNING: You will likely experience lowered salvage rates and potentially crashing if you have both sorter and salvager enabled.  Would you like to continue?')) return;
            }
            STrChOGeneralOptions.throneSorter = true;
            STrChOThroneSorterPower.value = "Sorter = ON";
        }
        SAVESTrChOThroneSorter();

        var cmContainerOpen = (document.getElementsByClassName('cmModalContainer').length == 1 ? true : false);
        if (cmContainerOpen) {
            var titlebar = document.getElementsByClassName('primarytitlebar')[0];
            var closebutton = titlebar.children[2];
            closebutton.click();
            setTimeout(function () { CM.ThroneView.openThrone(); }, 100);
        }

        t.updateThroneMenu();

    },

    updateThroneMenu: function () {
        if (!document.getElementById('STrChOExecuteSorter')) return;
        document.getElementById('STrChOExecuteSorter').innerHTML = 'Sorter ' + (STrChOGeneralOptions.throneSorter ? 'ON' : 'OFF');
    },


    displaySelectCard: function () {
        var t = Tabs.throneSorter;
        if (t.STrChOLocalSwapFile == null) {
            document.getElementById('STrChOThroneSortCard').innerHTML = "No Card(s) Selected";
        } else {
            var throneItem = uW.kocThroneItems[t.STrChOLocalSwapFile];
            document.getElementById('STrChOThroneSortCard').innerHTML = howManyThroneSlots(t.STrChOLocalSwapFile) + '<br>' + BuildThroneCard(throneItem);
        }
    },

}

Tabs.throneEnhStats = {
	tabOrder: 106,
	tabLabel: 'ENH&nbsp;STATS',
	tabColor: 'red',
    tabHeader: 'THRONE ROOM ENHANCEMENT STATS',

	init: function (div) {
		var t = Tabs.throneEnhStats;
		t.mydiv = div;
        t.buildThroneEnhStatsDisplay();
	},

	hide: function () {},

	buildThroneEnhStatsDisplay: function () {

        var t = Tabs.throneEnhStats;

		var m = '<div class=STrChOHeader>' + t.tabHeader + '</div>';

//        m += '<div style="height: ' + (dlgHeight - (dlgHeightOffset*2.5)) + 'px; width: ' + (dlgWidth - (dlgWidthOffset*2.5)) + 'px; margin-top:5px; margin-bottom:5px; overflow-x: auto; overflow-y: auto; position: static;">';
        m += '<div style="height: ' + (dlgHeight - (dlgHeightOffset*2.5)) + 'px; width: ' + (dlgWidth - dlgWidthMenu) + 'px; margin-top:5px; margin-bottom:5px; overflow-x: auto; overflow-y: auto; position: static;">';

        m += '<table class=STrChOStats align=center cellspacing=0>';

        m += '<tr valign=top align=center><th colspan=' + (STrChOMaxThroneQuality + 2) + '>Enhancing Numbers  (successes/failures)</th></tr>';

        m += '<tr valign=top align=center><th></th>';
        for (qual = 0; qual <= STrChOMaxThroneQuality; qual++) m += '<td style="font-weight: bold;" class="td' + (qual % 2 + 1) + '"  >' + throneCardQualities[qual].capitalizeFirstLetter() + '&nbsp;</td>';
        m += '</tr>';

        var st = [0, 0, 0, 0, 0, 0, 0];
        var ft = [0, 0, 0, 0, 0, 0, 0];

        for (lvl = 0; lvl <= STrChOMaxThroneLevel; lvl++) {
            m += '<tr valign=top align=center>';
            m += '<th>';
            if (lvl != 0) m += '+';
            m += lvl + '</th>';
            for (qual = 0; qual < (STrChOMaxThroneQuality+1); qual++) {
                if (STrChOThroneUpgradeStats.enhanceSuccess[qual][lvl] == null) STrChOThroneUpgradeStats.enhanceSuccess[qual][lvl] = 0;
                if (STrChOThroneUpgradeStats.enhanceFailure[qual][lvl] == null) STrChOThroneUpgradeStats.enhanceFailure[qual][lvl] = 0;
                st[qual] += STrChOThroneUpgradeStats.enhanceSuccess[qual][lvl];
                ft[qual] += STrChOThroneUpgradeStats.enhanceFailure[qual][lvl];
                m += '<td class="td' + (qual % 2) + '"  >' + STrChOThroneUpgradeStats.enhanceSuccess[qual][lvl] + ' / ' + STrChOThroneUpgradeStats.enhanceFailure[qual][lvl] + '</td>';
            }
            m += '</tr>';
        }

        m += '<tr valign=top align=center><th> Totals: </th>';
        for (qual = 0; qual < (STrChOMaxThroneQuality+1); qual++) m += '<td style="font-weight: bold;" class="td' + (qual % 2) + '" >' + st[qual] + ' / ' + ft[qual] + '</td>';
        m += '</tr>';

        m += '<TR valign=top align=center><th> Percents: </th>';
        for (qual = 0; qual < (STrChOMaxThroneQuality+1); qual++) {
            m += '<td style="font-weight: bold;" class="td' + (qual % 2) + '" >';
            if ((st[qual] + ft[qual]) == 0)
                m += "--";
            else {
                var perc = (100 * st[qual] / (st[qual] + ft[qual]));
                m += perc.toFixed(2) + '%';
            }
            m += '</td>';
        }
        m += '</tr>';

        m += '</table>';
        m += '</div>';

        m += '<center><input type=button class=STrChOButton value="Clear Stats" id=STrChOThroneEnhStatsClear></center>';

		t.mydiv.innerHTML = '<div>' + m + '</div>';

        document.getElementById('STrChOThroneEnhStatsClear').addEventListener('click', function () {

            var t = Tabs.throneEnhStats;
            for (lvl = 0; lvl <= STrChOMaxThroneLevel; lvl++) {
                for (qual = 0; qual < (STrChOMaxThroneQuality+1); qual++) {
                    STrChOThroneUpgradeStats.enhanceSuccess[qual][lvl] = null;
                    STrChOThroneUpgradeStats.enhanceFailure[qual][lvl] = null;
                }
            }
            SAVESTrChOThroneUpgradeStats();
            t.buildThroneEnhStatsDisplay();

        }, false);

    },

	show: function () {
		var t = Tabs.throneEnhStats;
        t.buildThroneEnhStatsDisplay();
	},
}

Tabs.throneUpgStats = {
	tabOrder: 107,
	tabLabel: 'UPG&nbsp;STATS',
	tabColor: 'red',
    tabHeader: 'THRONE ROOM UPGRADE STATS',

	init: function (div) {
		var t = Tabs.throneUpgStats;
		t.mydiv = div;
        t.buildThroneUpgStatsDisplay();
	},

	hide: function () {},

	buildThroneUpgStatsDisplay: function () {

		var t = Tabs.throneUpgStats;

		var m = '<div class=STrChOHeader>' + t.tabHeader + '</div>';

        m += '<div style="height: ' + (dlgHeight - (dlgHeightOffset*2.5)) + 'px; width: ' + (dlgWidth - (dlgWidthOffset*2.5)) + 'px; margin-top:5px; margin-bottom:5px; overflow-x: auto; overflow-y: auto; position: static;">';
        m += '<table class=STrChOStats align=center cellspacing=0>';

        m += '<tr valign=top align=center><th colspan=' + (STrChOMaxThroneLevel+2) + '>Upgrading Numbers  (successes/failures)</TH></TR>';

        m += '<tr valign=top align=center><th></th>';
        for (lvl = 0; lvl < STrChOMaxThroneLevel; lvl++) m += '<td style="font-weight: bold;" class="td' + (lvl % 2) + '"  >&nbsp;+' + (lvl + 1) + '&nbsp;</td>';
        m += '</tr>';

        var st = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0,0,0,0];  //TODO: change when game changes max throne level (currently 52)
        var ft = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0,0,0,0];

        for (qual = 0; qual <= STrChOMaxThroneQuality; qual++) {
            m += '<tr valign=top align=center><th>' + throneCardQualities[qual].capitalizeFirstLetter() + '</th>';
            for (lvl = 0; lvl < STrChOMaxThroneLevel; lvl++) {
                if (STrChOThroneUpgradeStats.upgradeSuccess[qual][lvl] == null || isNaN(STrChOThroneUpgradeStats.upgradeSuccess[qual][lvl])) STrChOThroneUpgradeStats.upgradeSuccess[qual][lvl] = 0;
                if (STrChOThroneUpgradeStats.upgradeFailure[qual][lvl] == null || isNaN(STrChOThroneUpgradeStats.upgradeFailure[qual][lvl])) STrChOThroneUpgradeStats.upgradeFailure[qual][lvl] = 0;
                st[lvl] += STrChOThroneUpgradeStats.upgradeSuccess[qual][lvl];
                ft[lvl] += STrChOThroneUpgradeStats.upgradeFailure[qual][lvl];

                m += '<td class="td' + (lvl % 2) + '"  >';
                m += STrChOThroneUpgradeStats.upgradeSuccess[qual][lvl] + ' / ' + STrChOThroneUpgradeStats.upgradeFailure[qual][lvl];
                m += '</td>';
            }
            m += '</tr>';
        }

        m += '<tr valign=top align=center><th> Totals: </th>';
        for (lvl = 0; lvl < STrChOMaxThroneLevel; lvl++) m += '<td style="font-weight: bold;" class="td' + (lvl % 2) + '"  >' + st[lvl] + " / " + ft[lvl] + '</td>';
        m += '</tr>';

        m += '<tr valign=top align=center><th> Percents: </th>';
        for (lvl = 0; lvl < STrChOMaxThroneLevel; lvl++) {
            m += '<td style="font-weight: bold;" class="td' + (lvl % 2) + '"  >';
            if ((st[lvl] + ft[lvl]) == 0)
                m += '--';
            else {
                var perc = (100 * st[lvl] / (st[lvl] + ft[lvl]));
                m += perc.toFixed(2) + '%';
            }
            m += '</td>';
        }
        m += '</tr>';

        m += '</table>';
        m += '</div>';

        m += '<center><input type=button class=STrChOButton value="Clear Stats" id=STrChOThroneUpgStatsClear></center>';

		t.mydiv.innerHTML = '<div>' + m + '</div>';

        document.getElementById('STrChOThroneUpgStatsClear').addEventListener('click', function () {
            var t = Tabs.throneUpgStats;
            for (lvl = 0; lvl <= STrChOMaxThroneLevel; lvl++) {
                for (qual = 0; qual < (STrChOMaxThroneQuality+1); qual++) {
                    STrChOThroneUpgradeStats.upgradeSuccess[qual][lvl] = null;
                    STrChOThroneUpgradeStats.upgradeFailure[qual][lvl] = null;
                }
            }
            SAVESTrChOThroneUpgradeStats();
            t.buildThroneUpgStatsDisplay()
        }, false);

    },

	show: function () {
        var t = Tabs.throneUpgStats;
        t.buildThroneUpgStatsDisplay();
	},
}

Tabs.thronePresets = {
	tabOrder: 108,
	tabLabel: 'PRESETS',
	tabColor: 'red',
    tabHeader: 'THRONE ROOM PRESETS',
    broke_count: 0,
    broke_items: 0,
    delay: 1000,

	init: function (div) {
		var t = Tabs.thronePresets;
		t.mydiv = div;
        //t.show();
	},

	hide: function () {},

    refreshBrokeMightDisplay: function () {
        document.getElementById('STrChOThroneMightBroke').innerHTML = getThroneBrokeMight();
    },

	show: function () {
		var t = Tabs.thronePresets;

		var m = '<div class=STrChOHeader>' + t.tabHeader + '<div class=STrChOSaveSettings id=STrChOThronePresetsSaveSettings title="Save Presets Settings"></div><div class=STrChOLoadSettings id=STrChOThronePresetsLoadSettings title="Load Presets Settings"></div></div>';
        m += '<div style="height: ' + (dlgHeight - (dlgHeightOffset*2.5)) + 'px; width: ' + (dlgWidth - dlgWidthMenu) + 'px; margin-top:5px; margin-bottom:5px; overflow-x: auto; overflow-y: auto; position: static;">';
        m += '<table>';
        m += '<tr><td width=100%>Preset Color: <select class=STrChOSelect id=STrChOThronePresetColor>';
        m += '<option ' + (STrChOThronePresetData.presetColor == "#FFFFFF" ? 'SELECTED ' : '') + 'value="#FFFFFF">White</option>';
        m += '<option ' + (STrChOThronePresetData.presetColor == "#808080" ? 'SELECTED ' : '') + 'value="#808080">Gray</option>';
        m += '<option ' + (STrChOThronePresetData.presetColor == "#FF0000" ? 'SELECTED ' : '') + 'value="#FF0000">Red</option>';
        m += '<option ' + (STrChOThronePresetData.presetColor == "#FFFF00" ? 'SELECTED ' : '') + 'value="#FFFF00">Yellow</option>';
        m += '<option ' + (STrChOThronePresetData.presetColor == "#00FF00" ? 'SELECTED ' : '') + 'value="#00FF00">Lime</option>';
        m += '<option ' + (STrChOThronePresetData.presetColor == "#00FFFF" ? 'SELECTED ' : '') + 'value="#00FFFF">Aqua</option>';
        m += '<option ' + (STrChOThronePresetData.presetColor == "#0000FF" ? 'SELECTED ' : '') + 'value="#0000FF">Blue</option>';
        m += '<option ' + (STrChOThronePresetData.presetColor == "#FF00FF" ? 'SELECTED ' : '') + 'value="#FF00FF">Fuchsia</option>';
        m += '</select>';
        m += '&nbsp;&nbsp;&nbsp;General Color: <select class=STrChOSelect id=STrChOThroneTagColor>';
        m += '<option ' + (STrChOThronePresetData.tagColor == "#FFFFFF" ? 'SELECTED ' : '') + 'value="#FFFFFF">White</option>';
        m += '<option ' + (STrChOThronePresetData.tagColor == "#808080" ? 'SELECTED ' : '') + 'value="#808080">Gray</option>';
        m += '<option ' + (STrChOThronePresetData.tagColor == "#FF0000" ? 'SELECTED ' : '') + 'value="#FF0000">Red</option>';
        m += '<option ' + (STrChOThronePresetData.tagColor == "#FFFF00" ? 'SELECTED ' : '') + 'value="#FFFF00">Yellow</option>';
        m += '<option ' + (STrChOThronePresetData.tagColor == "#00FF00" ? 'SELECTED ' : '') + 'value="#00FF00">Lime</option>';
        m += '<option ' + (STrChOThronePresetData.tagColor == "#00FFFF" ? 'SELECTED ' : '') + 'value="#00FFFF">Aqua</option>';
        m += '<option ' + (STrChOThronePresetData.tagColor == "#0000FF" ? 'SELECTED ' : '') + 'value="#0000FF">Blue</option>';
        m += '<option ' + (STrChOThronePresetData.tagColor == "#FF00FF" ? 'SELECTED ' : '') + 'value="#FF00FF">Fuchsia</option>';
        m += '</select>';
        m += '&nbsp;&nbsp;&nbsp;Active Color: <select class=STrChOSelect id=STrChOThroneActiveColor>';
        m += '<option ' + (STrChOThronePresetData.activeColor == "#FFFFFF" ? 'SELECTED ' : '') + 'value="#FFFFFF">White</option>';
        m += '<option ' + (STrChOThronePresetData.activeColor == "#808080" ? 'SELECTED ' : '') + 'value="#808080">Gray</option>';
        m += '<option ' + (STrChOThronePresetData.activeColor == "#FF0000" ? 'SELECTED ' : '') + 'value="#FF0000">Red</option>';
        m += '<option ' + (STrChOThronePresetData.activeColor == "#FFFF00" ? 'SELECTED ' : '') + 'value="#FFFF00">Yellow</option>';
        m += '<option ' + (STrChOThronePresetData.activeColor == "#00FF00" ? 'SELECTED ' : '') + 'value="#00FF00">Lime</option>';
        m += '<option ' + (STrChOThronePresetData.activeColor == "#00FFFF" ? 'SELECTED ' : '') + 'value="#00FFFF">Aqua</option>';
        m += '<option ' + (STrChOThronePresetData.activeColor == "#0000FF" ? 'SELECTED ' : '') + 'value="#0000FF">Blue</option>';
        m += '<option ' + (STrChOThronePresetData.activeColor == "#FF00FF" ? 'SELECTED ' : '') + 'value="#FF00FF">Fuchsia</option>';
        m += '</select>(Requires Refresh)</td></tr>';
        m += '<tr><td>';
        m += '<input type=button class=STrChOButton id=STrChOThroneClearTags value="Clear All Tags">&nbsp;&nbsp;';
        m += '<input type=button class=STrChOButton id=STrChOThroneClearAllPresetTags value="Clear All Preset Tags">&nbsp;&nbsp;';
        m += '<input type=button class=STrChOButton id=STrChOThroneSaveAllPresetTags value="Save All Preset Tags">&nbsp;&nbsp;';
        //m += '<input type=button id=trExportPresetTags value="Export Preset Tags">';
        m += '</td></tr>';
        m += '<tr><td>';
        m += '<input type=checkbox class=STrChOCheckbox id=STrChOThroneShowMight ' + (STrChOThronePresetData.showThroneMight ? 'CHECKED' : '') + '/>Show Might on Posts';
        m += '&nbsp;&nbsp;&nbsp;<input type=checkbox class=STrChOCheckbox id=STrChOThroneShowName ' + (STrChOThronePresetData.showThroneName ? 'CHECKED' : '') + '/>Show Preset Name on Posts';
        m += '</td></tr>';
        m += '</table>';


        m += '<div class=STrChOHeader id=STrChOThronePresetNaming onmouseover="this.style.cursor=\'pointer\'"><img src="'+STrChORightArrow+'"/>&nbsp;PRESET NAMING&nbsp;<img class=STrChOReverseImage src="'+STrChORightArrow+'"/></div>';

        m += '<div class=STrChOSection>';
        m += '<table class=STrChOSectionTable>';
        var presetSlots = getObjectCollectionCount(Seed.throne.slotEquip);
        var presetsList = "";
        for (i = 1; i < presetSlots + 1; i++) {
            presetsList += '<option value="' + i + '">' + i + '</option>';
        }
        for (i = 1; i < presetSlots + 1; i++) {
            m += '<tr>';
            m += '<td><input class="STrChOThronePresetSlotPost STrChOButton" type=button id=STrChOThronePreset' + i + ' value="Post Slot"></td>';
            m += '<td><input class="STrChOThronePresetTagPost STrChOButton" type=button id=STrChOThronePreset' + i + ' value="Post Tag"></td>';
            m += '<td>&nbsp;<b>Preset ' + i + ': </b></td>';
            m += '<td><input class=STrChOThronePresetNameEntry type=text size=15 id=STrChOThronePresetName' + i + ' value="' + STrChOThronePresetData.presetNames[i] + '"></td>';
            m += '<td><input class="STrChOThronePresetCopyTo STrChOButton" type=button id=STrChOThronePreset' + i + ' value="Copy To"><select class=STrChOSelect id=STrChOThronePresetCopyToWhat' + i + '>' + presetsList + '</select></td>';
            m += '<td><input class="STrChOThronePresetSave STrChOButton" type=button id=STrChOThronePreset' + i + ' value="Save"></td>';

            if (getThronePresetTagCount(i) != 0) {
                m += '<td><input class="STrChOThronePresetClear STrChOButton" type=button id=STrChOThronePreset' + i + ' value="Clear"></td>';
                m += '<td><input class="STrChOThronePresetExcel STrChOButton" type=button id=STrChOThronePreset' + i + ' value="Excel"></td>';
            } else {
                m += '<td/><td/>';
            }
            m += '</tr>';
        }
        m += '</table>';
        m += '</div>';

        m += '<div class=STrChOHeader onmouseover="this.style.cursor=\'pointer\'"><img src="'+STrChORightArrow+'"/>&nbsp;THRONE ROOM BREAKING&nbsp;<img class=STrChOReverseImage src="'+STrChORightArrow+'"/></div>';

        m += '<div class=STrChOSection>';
        m += '<table class=STrChOSectionTable>';
        m += '<tr><td><div id=STrChOThroneMightBroke>You have 0 throne room might broken</div></td></tr>';
        m += '<tr><td><input type=checkbox checked class=STrChOCheckbox id=STrChOThroneExcludePresets>Exclude Tagged Presets</td></tr>';
        m += '<tr><td><input type=checkbox checked class=STrChOCheckbox id=STrChOThroneExcludeTags>Exclude Regular Tagged</td></tr>';
        m += '<tr><td>Break Items Level <select class=STrChOSelect id=STrChOThroneBreakLevelLow>';
        for (lvl = 1; lvl < STrChOMaxThroneLevel; lvl++) {
            m += '<option value=' + lvl + '>+' + lvl + '</option>';
        }
        m += '</select> or Higher</td></tr>';
        m += '<tr><td>Break Items Level <select class=STrChOSelect id=STrChOThroneBreakLevelHigh>';
        for (lvl = 1; lvl < STrChOMaxThroneLevel; lvl++) {
            m += '<option value=' + lvl + (lvl == STrChOMaxThroneLevel - 1 ? ' SELECTED' : '') + '>+' + lvl + '</option>';
        }
        m += '</select> or Lower</td></tr>';

        m += '<tr><td><input type=button class=STrChOButton id=STrChOThroneBreakAll value="Break Now"><font color=red><i>(all options above will reset after refresh)</i></font></td></tr>';
        m += '<tr><td><div id=STrChOThroneBreakCounter></div></td></tr>';
        m += '<tr><td><hr></td></tr>';
        m += '<tr><td>Break Equiped Throne Room Only<select class=STrChOSelect id=STrChOThronePresetEquipBreak>' + presetsList + '</select><input type=button class=STrChOButton id=STrChOThronePresetEquipBreakNow value="Break Now"></td></tr>';
        m += '<tr><td>Break Tagged Preset Only<select class=STrChOSelect id=STrChOThronePresetTaggedBreak>' + presetsList + '</select><input type=button class=STrChOButton id=STrChOThronePresetTaggedBreakNow value="Break Now"></td></tr>';
        m += '<tr><td>Break <input type=number class=STrChOText id=STrChOThroneMightBreak oncontextmenu="return false;"> Throne Might <input type=button class=STrChOButton id=STrChOThroneMightBreakNow value="Break Now"></td></tr>';
        m += '</table>';
        m += '</div>';
        m += '</div>';
		t.mydiv.innerHTML = '<div>' + m + '</div>';

        document.getElementById('STrChOThronePresetsSaveSettings').addEventListener('click', function () {
            SaveSettingsToFile(STrChOThronePresetData);
        }, false);
        document.getElementById('STrChOThronePresetsLoadSettings').addEventListener('click', function () {
            var loader = document.getElementById('STrChOSettingsFile');
            loader.addEventListener('change', function () {
                LoadSettingsFromFile(STrChOThronePresetData, Tabs.thronePresets);
            }, false);
            loader.click();
        }, false);

        var header = document.getElementsByClassName('STrChOHeader');
        for (var head=0;head<header.length;head++) {
            header[head].addEventListener('click', sectionOpener, false);
        }

        t.refreshBrokeMightDisplay();

        document.getElementById('STrChOThroneShowMight').addEventListener('change', function () {
            STrChOThronePresetData.showThroneMight = document.getElementById('STrChOThroneShowMight').checked;
            SAVESTrChOThronePresetData();
        }, false);

        document.getElementById('STrChOThroneShowName').addEventListener('change', function () {
            STrChOThronePresetData.showThroneName = document.getElementById('STrChOThroneShowName').checked;
            SAVESTrChOThronePresetData();
        }, false);

        document.getElementById('STrChOThroneSaveAllPresetTags').addEventListener('click', function () {
            for (i = 1; i < presetSlots + 1; i++) {
                t.addPresetTags(i);
            }
            t.show();
            document.getElementById('STrChOThronePresetNaming').click();
        }, false);

        document.getElementById('STrChOThroneClearTags').addEventListener('click', function () {
            t.clearAllTagItems();
        }, false);

        document.getElementById('STrChOThroneClearAllPresetTags').addEventListener('click', function () {
            t.clearAllPresetTagItems();
            t.show();
            document.getElementById('STrChOThronePresetNaming').click();
        }, false);

        document.getElementById('STrChOThroneActiveColor').addEventListener('change', function () {
            STrChOThronePresetData.activeColor = document.getElementById('STrChOThroneActiveColor').value;
            SAVESTrChOThronePresetData();
        }, false);

        document.getElementById('STrChOThronePresetColor').addEventListener('change', function () {
            STrChOThronePresetData.PresetColor = document.getElementById('STrChOThronePresetColor').value;
            SAVESTrChOThronePresetData();
        }, false);

        document.getElementById('STrChOThroneTagColor').addEventListener('change', function () {
            STrChOThronePresetData.tagColor = document.getElementById('STrChOThroneTagColor').value;
            SAVESTrChOThronePresetData();
        }, false);

        document.getElementById('STrChOThroneMightBreak').addEventListener('keydown', function (e) {
            // Allow: backspace, delete, tab, escape, enter and .
            if (e.keyCode == 46 || e.keyCode == 8 || e.keyCode == 9 || e.keyCode == 27 || e.keyCode == 13 || e.keyCode == 110 || e.keyCode == 190 ||
            // Allow: Ctrl+A
                (e.keyCode == 65 && e.ctrlKey === true) ||
            // Allow: home, end, left, right
                (e.keyCode >= 35 && e.keyCode <= 39) ||
            // Allow: F5
                (e.keyCode == 116))
            {
                // let it happen, don't do anything
                return;
            }

            // Ensure that it is a number and stop the keypress
            if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105) || e.keyCode == 190 || e.keyCode == 110 )
            {
                e.preventDefault();
            }
        }, false);



        document.getElementById('STrChOThroneMightBreak').addEventListener('keyup', function (e) {
            document.getElementById('STrChOThroneMightBreak').value = document.getElementById('STrChOThroneMightBreak').value.replace('.','');
            document.getElementById('STrChOThroneMightBreak').value = document.getElementById('STrChOThroneMightBreak').value.replace(',','');
        }, false);


        function BreakIt( cardsToBreak ) {
            var t = Tabs.thronePresets;

            if (!cardsToBreak || cardsToBreak == null) return;

            if (cardsToBreak.length == 0) {
                alert('No throne items to break');
                return;
            }

            t.broke_count = cardsToBreak.length;

            //t.setBreakStatus();

            t.broke_items = 0;

            //var items_broke = 0;  //this will be the counter for the # of throne items broke

            for (var i = 0; i < cardsToBreak.length; i++) {  //loop through all the throne items to be broke

                var citytobreakfrom = 0;  //start at the first city {the index is 0-based}

                var throne_item = uW.kocThroneItems[cardsToBreak[i]];  //get the next throne item in the collection

                var curr_level = throne_item.level;  //get the current level of the throne item

                var throne_id = throne_item.id;  //get the throne item id

                //var curr_might = throne_item

                if (curr_level == STrChOMaxThroneLevel) continue;  //if for some reason a card at the max level makes it through the list then continue to the next in the list

                var cost_to_upgrade = CM.thronestats.upgrade[curr_level + 1].Stones;  //get the cost of stones to upgrade to the next level

                while (citytobreakfrom < 8) {  //loop through all the 8 cities checking for astone to upgrade for the break feature

                    stones_in_city = parseInt(Seed.resources["city" + Seed.cities[citytobreakfrom][0]]["rec5"][0]);  //get the astone count for the city

                    if (cost_to_upgrade + STrChOBreakBuffer <= stones_in_city) break;  //if you have the astone in the city then stop searching cities and do the upgrade

                    citytobreakfrom = citytobreakfrom + 1;  //search to the next city in the loop

                }

                if (citytobreakfrom == 8) continue;  //if you make it to 8, then you've exhausted all the cities astone search for this throne item, move to the next one

                var params = uW.Object.clone(ajfx);
                params.ctrl = 'throneRoom\\ThroneRoomServiceAjax';
                params.action = 'upgradeLevel';
                params.throneRoomItemId = throne_id;
                params.buffItemId = 0;
                params.payment = "aetherstone";
                params.cityId = Seed.cities[citytobreakfrom][0];

                //items_broke = items_broke + 1;
                t.broke_items += 1;

                Seed.resources["city" + Seed.cities[citytobreakfrom][0]]["rec5"][0] = Seed.resources["city" + Seed.cities[citytobreakfrom][0]]["rec5"][0] - cost_to_upgrade;

                new AjaxRequest(uW.g_ajaxpath + "ajax/_dispatch53.php" + uW.g_ajaxsuffix, {
                    method: "post",
                    parameters: params,
                    loading: true,
                    onSuccess: function (transport) {
                        try {
                            var rslt = eval("(" + transport.responseText + ")");
                            if (rslt.ok) {
                                if (rslt.updateSeed) uW.update_seed(rslt.updateSeed);
                            }

                            if (rslt.gems > 0) {
                                alert("UNEXPECTED ERROR: 'BREAK TR' accidentally spent gems.... Stopping now!");
                                ActionLog('BREAK TR accidentally spent gems!  Stopping now!');
                                RefreshCamelot();
                                return;
                            }

                            //if (rslt.success) i--;

                        } catch (e) {
                        }
                    },
                    onFailure: function (rrr) {
                        CM.ThroneView.renderInventory(uW.kocThroneItems);
                    }
                });

            }

            CM.ThroneView.renderInventory(uW.kocThroneItems);
            if (t.broke_items == 0) {
                alert('No Items broken. (NOTE: check astone levels if items should have been broke)');
            } else {
                alert('Breaking TR complete.  ' + t.broke_items + ' Throne items were broken.  Page will now refresh.');
                RefreshCamelot();
            }
        }

        document.getElementById('STrChOThroneBreakAll').addEventListener('click', function () {
            if (!confirm('You cannot undo this action, are you sure you want to break your throne room?')) return;
            var excludePresets = document.getElementById('STrChOThroneExcludePresets').checked;
            var excludeTags = document.getElementById('STrChOThroneExcludeTags').checked;
            var breakLevelLow = document.getElementById('STrChOThroneBreakLevelLow').value;
            var breakLevelHigh = document.getElementById('STrChOThroneBreakLevelHigh').value;
            var allTaggedPresets = [];
            if (excludePresets) {
                for (i = 1; i < presetSlots + 1; i++) {
                    if (getThronePresetTagCount(i) != 0) {
                        var thisPreset = getThronePresetObject(i);
                        for (throneId in thisPreset) {
                            var throne_item = uW.kocThroneItems[throneId];
                            if (throne_item == null || !throne_item) continue;
                            if (throne_item.level == STrChOMaxThroneLevel) continue;
                            if (throne_item.level < breakLevelLow || throne_item.level > breakLevelHigh) continue;
                            allTaggedPresets.push(throneId);
                        }
                    }
                }
            }
            var throneToBreak = [];
            for (trId in uW.kocThroneItems) {
                var throne_item = uW.kocThroneItems[trId];
                if (throne_item == null || !throne_item) continue;
                if (throne_item.isBroken) continue;
                if (excludeTags && STrChOThronePresetData.taggedItems[trId]) continue;
                if (allTaggedPresets.indexOf(trId) != -1) continue;
                if (throne_item.level == STrChOMaxThroneLevel) continue;
                if (throne_item.level < breakLevelLow || throne_item.level > breakLevelHigh) continue;

                throneToBreak.push(trId);
            }
            delete allTaggedPresets;

            BreakIt(throneToBreak);

        }, false);


        document.getElementById('STrChOThroneMightBreakNow').addEventListener('click', function () {
            document.getElementById('STrChOThroneMightBreak').value = document.getElementById('STrChOThroneMightBreak').value.replace('.','');
            document.getElementById('STrChOThroneMightBreak').value = document.getElementById('STrChOThroneMightBreak').value.replace(',','');
            var mightReach = document.getElementById('STrChOThroneMightBreak').value;
            if (!isNumeric(mightReach)) return;
            if (!confirm('You cannot undo this action, are you sure you want to break?')) return;
            var throneToBreak = [];
            var mightTally = 0;
            for (var throneId in uW.kocThroneItems) {
                if (mightTally >= mightReach) break;
                var throne_item = uW.kocThroneItems[throneId];
                var throne_might = CM.ThroneView.getMightBonus(throne_item);
                mightTally += throne_might;
                throneToBreak.push(throneId);
            };
            BreakIt(throneToBreak);
        }, false);

        document.getElementById('STrChOThronePresetEquipBreakNow').addEventListener('click', function () {
            if (!confirm('You cannot undo this action, are you sure you want to break?')) return;
            var throneToBreak = [];
            var equipped_items = Seed.throne.slotEquip[Seed.throne.activeSlot];
            for (ei = 0; ei < equipped_items.length; ei++) { throneToBreak.push(equipped_items[ei]); }
            BreakIt(throneToBreak);
        }, false);

        document.getElementById('STrChOThronePresetTaggedBreakNow').addEventListener('click', function () {
            if (!confirm('You cannot undo this action, are you sure you want to break?')) return;
            var throneToBreak = [];
            var STrChOThronePresetTaggedBreak = document.getElementById('STrChOThronePresetTaggedBreak').value;
            var thronePreset = getThronePresetObject(parseInt(STrChOThronePresetTaggedBreak));
            for (var throneId in thronePreset) throneToBreak.push(throneId);
            BreakIt(throneToBreak);
        }, false);

        function isNumeric(n) { return !isNaN(parseFloat(n)) && isFinite(n); }


        // read the preset names and descriptions
        var STrChOThronePresetNameEntry = document.getElementsByClassName('STrChOThronePresetNameEntry');
        for (var elem=0; elem<STrChOThronePresetNameEntry.length;elem++) {
            STrChOThronePresetNameEntry[elem].addEventListener('change', function () {
                var id = this.id;
                var num = id.split('STrChOThronePresetName')[1];
                var presetName = this.value;
                if (presetName == "") {
                    presetName = "undefined";
                    this.value = presetName;
                }
                STrChOThronePresetData.presetNames[num] = presetName;
                SAVESTrChOThronePresetData();
            }, false);
            STrChOThronePresetNameEntry[elem].addEventListener('blur', function () {
                var id = this.id;
                var num = id.split('STrChOThronePresetName')[1];
                var presetName = this.value;
                if (presetName == "") {
                    presetName = "undefined";
                    this.value = presetName;
                    STrChOThronePresetData.presetNames[num] = presetName;
                    SAVESTrChOThronePresetData();
                }
            }, false);
        }

        var STrChOThronePresetTagPost = document.getElementsByClassName('STrChOThronePresetTagPost');
        for (var elem=0; elem<STrChOThronePresetTagPost.length;elem++) {
            STrChOThronePresetTagPost[elem].addEventListener('click', function () {
                var id = this.id;
                var num = id.split('STrChOThronePreset')[1];
                postThronePreset(num);
            }, false);
        }

        var STrChOThronePresetSlotPost = document.getElementsByClassName('STrChOThronePresetSlotPost');
        for (var elem=0; elem<STrChOThronePresetSlotPost.length;elem++) {
            STrChOThronePresetSlotPost[elem].addEventListener('click', function () {
                var id = this.id;
                var num = id.split('STrChOThronePreset')[1];
                postThroneSlot(num);
            }, false);
        }

        var STrChOThronePresetCopyTo = document.getElementsByClassName('STrChOThronePresetCopyTo');
        for (var elem=0; elem<STrChOThronePresetCopyTo.length;elem++) {
            STrChOThronePresetCopyTo[elem].addEventListener('click', function () {
                var id = this.id;
                var sourceNum = id.split("STrChOThronePreset")[1];
                var destNum = document.getElementById("STrChOThronePresetCopyToWhat" + sourceNum).value;
                var copyName = document.getElementById("STrChOThronePresetName" + sourceNum).value;
                t.copyPresetTags(sourceNum, destNum, copyName);
                t.show();
                document.getElementById('STrChOThronePresetNaming').click();
            }, false);
        }

        var STrChOThronePresetClear = document.getElementsByClassName('STrChOThronePresetClear');
        for (var elem=0; elem<STrChOThronePresetClear.length;elem++) {
            STrChOThronePresetClear[elem].addEventListener('click', function () {
                var id = this.id;
                var num = id.split("STrChOThronePreset")[1];
                t.clearPresetTags(num);
                t.show();
                document.getElementById('STrChOThronePresetNaming').click();
            }, false);
        }

        var STrChOThronePresetExcel = document.getElementsByClassName('STrChOThronePresetExcel');
        for (var elem=0; elem<STrChOThronePresetExcel.length;elem++) {
            STrChOThronePresetExcel[elem].addEventListener('click', function () {
                var id = this.id;
                var num = id.split("STrChOThronePreset")[1];
                ExportThronePresetToExcel(num);
            }, false);
        }

        var STrChOThronePresetSave = document.getElementsByClassName('STrChOThronePresetSave');
        for (var elem=0; elem<STrChOThronePresetSave.length;elem++) {
            STrChOThronePresetSave[elem].addEventListener('click', function () {
                var id = this.id;
                var num = id.split("STrChOThronePreset")[1];
                t.addPresetTags(num);
                t.show();
                document.getElementById('STrChOThronePresetNaming').click();
            }, false);
        }

  	},

    paintTags: function () {

        var equipped_items = Seed.throne.slotEquip[Seed.throne.activeSlot];

        for (ei = 0; ei < equipped_items.length; ei++) {
            var throneId = equipped_items[ei];
            $("#throneInventoryItem" + throneId).children(".activeBorderThrone").remove(); //remove any tag first before applying the tag to avoid doubling, trippling up on the borders, etc
            $("#throneInventoryItem" + throneId).prepend("<div class='activeBorderThrone'></div>");
        }

        for (p in STrChOThronePresetData.taggedItems) {
            $("#throneInventoryItem" + p).children(".tagBorderThrone").remove(); //remove any tag first before applying the tag to avoid doubling, trippling up on the borders, etc
            $("div#throneInventoryItem" + p).prepend("<div class='tagBorderThrone'></div>");
        }

        for (idx = 1; idx < (STrChOMaxPresets+1); idx++) {
            var preset = getThronePresetObject(idx);
            if (getObjectCollectionCount(preset) > 0) {
                for (p in preset) {
                    $("#throneInventoryItem" + p).children(".presetBorderThrone").remove(); //remove any tag first before applying the tag to avoid doubling, trippling up on the borders, etc
                    $("#throneInventoryItem" + p).prepend("<div class='presetBorderThrone'></div>");
                }
            }
        }

        if (STrChOGeneralOptions.showJewels) {
            for (trId in uW.kocThroneItems) {
                var throne_item = uW.kocThroneItems[trId];
                if (!throne_item.jewel) continue;
                if (throne_item.jewel.valid && !throne_item.isBroken) {
                    $("#throneInventoryItem" + throne_item.id).children(".jewelIcon").remove();
                    $("div#throneInventoryItem" + throne_item.id).append("<div class='jewelIcon'><img style='float:right;' src='" + STrChOJewelImages[throne_item.jewel.quality] + "'></div>");
                }
            }
        }

        $("#advisorContainer").click(function () { ThroneMenuPopup('advisorContainer'); });
        $("#heroContainer").click(function () { ThroneMenuPopup('heroContainer'); });
        $("#chairContainer").click(function () { ThroneMenuPopup('chairContainer'); });
        $("#candelabrumContainer").click(function () { ThroneMenuPopup('candelabrumContainer'); });
        $("#tableContainer").click(function () { ThroneMenuPopup('tableContainer'); });
        $("#windowContainer").click(function () { ThroneMenuPopup('windowContainer'); });
        $("#bannerContainer").click(function () { ThroneMenuPopup('bannerContainer'); });
        $("#trophyContainer").click(function () { ThroneMenuPopup('trophyContainer'); });
        $("#statueContainer").click(function () { ThroneMenuPopup('statueContainer'); });
        $("#petContainer").click(function () { ThroneMenuPopup('petContainer'); });
        $("#tapestryContainer").click(function () { ThroneMenuPopup('tapestryContainer'); });
        $("#pillarContainer").click(function () { ThroneMenuPopup('pillarContainer'); });

        function ThroneMenuPopup(displayContainer) {
            var throneType = displayContainer.split('Container')[0];
            for (var trId in uW.kocThroneItems) {
                var throne_item = uW.kocThroneItems[trId];
                if (throne_item == null || !throne_item) continue;
                if (throne_item.type == throneType && throne_item.isEquipped) {
                    var thisDiv = document.getElementById(displayContainer);
                    CardContextMenu(thisDiv, throne_item, false);
                    break;
                }
            }
        };


    },

    unequipAllItems: function (presetIndex) {

        if (Seed.throne.activeSlot != presetIndex) {
            Seed.throne.activeSlot = presetIndex;
        }

        var t = Tabs.throneOrganizer;

        if (t.switchingPresets) {
            alert("still unequipping");
            return;
        }

        if (!confirm('Are you sure you want to unequip all items?')) return;

        var c = 0;
        t.switchingPresets = true;

        // grab the list of items equipped in the slot about to be switched to
        var delay = 7;

        var equipped_items = Seed.throne.slotEquip[presetIndex];

        var counter = equipped_items.length;

        var items = [];

        for (i = 0; i < counter; i++) items.push(equipped_items[i]);

        while (counter > 0) {
            var throne_item = uW.kocThroneItems[items.pop()];

            var goUnequip = function (I2, s) {
                return function () {
                    Tabs.throneOrganizer.unequipItem(I2, s);
                };
            }

            setTimeout(goUnequip(throne_item, presetIndex), c * delay * 1000); // have to wait at least 5 seconds between switches
            c++;
            counter--;
        }

        setTimeout(function () {
            t.switchingPresets = false;
            alert("all throne items unequipped")
        }, c * delay * 1000 + 1000);

    },

    equipPresetTags: function (presetIndex) {

        if (Seed.throne.activeSlot != presetIndex) {
            Seed.throne.activeSlot = presetIndex;
        }

        var t = Tabs.throneOrganizer;

        var preset = getThronePresetObject(presetIndex);

        if (t.switchingPresets) {
            alert("still equipping");
            return;
        }

        if (getObjectCollectionCount(preset) == 0) {
            alert("preset is empty");
            return;
        }

        var c = 0;
        t.switchingPresets = true;

        var delay = 7;

        var types_equiped = [];

        for (p in preset) {

            // only equip the items not already equipped
            var throne_item = uW.kocThroneItems[p];

            types_equiped.push(throne_item.type);

            if (!throne_item.isEquipped) {

                var goEquip = function (I2, s) {
                    return function () {
                        Tabs.throneOrganizer.equipItem(I2, s);
                    };
                }

                setTimeout(goEquip(throne_item, presetIndex), c * delay * 1000); // have to wait at least 5 seconds between switches
                c++;
            }

        }

        var equipped_items = Seed.throne.slotEquip[presetIndex];

        var counter = equipped_items.length;

        var items_to_unequip = [];

        for (i = 0; i < counter; i++) {
            var throne_item = uW.kocThroneItems[equipped_items[i]];
            var idx = types_equiped.indexOf(throne_item.type);
            if (idx == -1) { //item in equipped items is not found among the types that were equipped, so unequip it

                var goUnequip = function (I2, s) {
                    return function () {
                        Tabs.throneOrganizer.unequipItem(I2, s);
                    };
                }

                setTimeout(goUnequip(throne_item, presetIndex), c * delay * 1000); // have to wait at least 5 seconds between switches
                c++;

            }
        }

        setTimeout(function () {
            t.switchingPresets = false;
            alert("preset #" + presetIndex + " loaded from tagged preset")
        }, (c * (delay * 1000)) + 1000);

    },

    copyPresetTags: function (sourcePresetNumber, destinationPresetNumber, presetName) {
        var pSource = getThronePresetObject(parseInt(sourcePresetNumber));
        var pDestination = getThronePresetObject(parseInt(destinationPresetNumber));
        for (var p in pDestination) delete pDestination[p];
        for (var p in pSource) pDestination[p] = true;
        STrChOThronePresetData.presetNames[destinationPresetNumber] = presetName + " (copy)";
        SAVESTrChOThronePresetData();
    },


    addPresetTags: function (presetIndex) {  //presetIndex should be passed in as base 0 to index into the presetTaggedItems array
        var t = Tabs.thronePresets;

        var preset = getThronePresetObject(parseInt(presetIndex));

        var equipped_items = Seed.throne.slotEquip[parseInt(presetIndex)];

        for (var p in preset) delete preset[p];

        for (ei = 0; ei < equipped_items.length; ei++) {
            var throneId = equipped_items[ei];
            preset[throneId] = true;
            $("#throneInventoryItem" + throneId).prepend("<div class='presetBorderThrone'></div>");
            SAVESTrChOThronePresetData();
        }

        t.paintTags();

    },

    clearPresetTags: function (presetIndex) {
        var preset = getThronePresetObject(parseInt(presetIndex));
        for (var p in preset) {
            delete preset[p];
            $("#throneInventoryItem" + p).children(".presetBorderThrone").remove();
            SAVESTrChOThronePresetData();
        }
    },

    removeTagItem: function (itemId) {
        if (STrChOThronePresetData.taggedItems[itemId]) {
            delete STrChOThronePresetData.taggedItems[itemId];
            $("#throneInventoryItem" + itemId).children(".tagBorderThrone").remove();
            SAVESTrChOThronePresetData();
        }
    },

    addTagItem: function (itemId) {
        STrChOThronePresetData.taggedItems[itemId] = true;
        $("#throneInventoryItem" + itemId).prepend("<div class='tagBorderThrone'></div>");
        SAVESTrChOThronePresetData();
    },

    addAllTagItems: function() {
        var t = Tabs.thronePresets;
        t.clearAllTagItems();
        for (trId in uW.kocThroneItems) {
            STrChOThronePresetData.taggedItems[trId] = true;
            $("#throneInventoryItem" + trId).prepend("<div class='tagBorderThrone'></div>");
        }
        SAVESTrChOThronePresetData();
    },

    clearAllTagItems: function () {
        var taggedReverse = [];
        for (k in STrChOThronePresetData.taggedItems) taggedReverse.push(k);
        var len = taggedReverse.length;
        while (len--) {
            var trID = taggedReverse[len];
            delete STrChOThronePresetData.taggedItems[trID];
            $("#throneInventoryItem" + trID).children(".tagBorderThrone").remove();
            SAVESTrChOThronePresetData();
        }
    },

    clearAllPresetTagItems: function () {
        if (!confirm('Are you sure you want to clear all preset tag items?')) return;
        var presetCount = getObjectCollectionCount(Seed.throne.slotEquip) + 1;
        for (i = 1; i < presetCount; i++) {
            document.getElementById('STrChOThronePresetName' + i).value = "undefined";
            STrChOThronePresetData.presetNames[i] = "undefined";
            var preset = getThronePresetObject(i);
            for (var p in preset) {
                delete preset[p];
                $("#throneInventoryItem" + p).children(".presetBorderThrone").remove();
                SAVESTrChOThronePresetData();
            }
        }
    },

    setBreakStatus: function() {
        var t = Tabs.thronePresets;
        var remaining = t.broke_count - t.broke_items;
        var m =  "Items Remaining: " + remaining;
        m += "<br>Time Remaining: " + (remaining * (t.delay/1000)) + " Seconds";
        document.getElementById('STrChOThroneBreakCounter').innerHTML = m;
    },


}

Tabs.thronePreview = {
	tabOrder: 109,
	tabLabel: 'PREVIEW',
	tabColor: 'red',
    tabHeader: 'THRONE ROOM PREVIEW',
    equipingPreview: false,

	init: function (div) {
		var t = Tabs.thronePreview;
		t.mydiv = div;
	},

	hide: function () {},

	show: function () {
		var t = Tabs.thronePreview;

        var presetSlots = getObjectCollectionCount(Seed.throne.slotEquip);

        var presetsTagList = "";

        for (i = 1; i < presetSlots + 1; i++) {
            presetsTagList += '<option value="' + i + '">' + i + ' (' + STrChOThronePresetData.presetNames[i] + ')</option>';
        }


		var m = '<div class=STrChOHeader>' + t.tabHeader + '</div>';
        m += '<div style="height: ' + (dlgHeight - (dlgHeightOffset*2.5)) + 'px; width: ' + (dlgWidth - dlgWidthMenu) + 'px; margin-top:5px; margin-bottom:5px; overflow-x: auto; overflow-y: auto; position: static;">';

        m += '<table>';
        m += '<tr>';
        m += '<td colspan=3>';
        m += '<input type=button class=STrChOButton value="Reset" id=STrChOThronePreviewReset>&nbsp;&nbsp;||&nbsp;&nbsp;';
        m += '<input type=button class=STrChOButton value="Post Stats to Chat" id=STrChOThronePreviewPost>&nbsp;';
        m += '<input type=button class=STrChOButton value="Export to Excel" id=STrChOThronePreviewExcel>&nbsp;';
        m += '<br>';
        m += '<input type=button class=STrChOButton value="Export To Text" id=STrChOThronePreviewExport>&nbsp;&nbsp;||&nbsp;&nbsp;';
        m += '<input type=button class=STrChOButton value="Load Text Export" id=STrChOThronePreviewExportLoad>';
        m += '<input type=button class=STrChOButton value="Browse..." id=STrChOThronePreviewExportLoadItemTrigger onclick="document.getElementById(\'STrChOThronePreviewExportLoadItem\').click()">';
        m += '<input hidden id=STrChOThronePreviewExportLoadItem type=file>';
        m += '<br>';
        m += '<input type=button class=STrChOButton value="Equip To" id=STrChOThronePreviewEquip><b>&nbsp;Slot&nbsp;</b><select class=STrChOSelect style="width:25%;" id=STrChOThronePreviewEquipValue>' + presetsTagList + '</select>&nbsp;&nbsp;<font color="black"><b>(5 sec/card load)</b></font>';
        m += '<br>';
        m += '<font color=red><b><i>NOTE: Server will update new slot design, but a refresh will be required to update client side</i></b></font>';
        m += '<br>';
        m += '<input type=button class=STrChOButton value="Load From" id=STrChOThronePreviewLoadPreset><b>&nbsp;Slot&nbsp;</b><select class=STrChOSelect style="width:25%;" id=STrChOThronePreviewLoadPresetValue>' + presetsTagList + '</select>&nbsp;&nbsp;';
        m += '<br>';
        m += '<input type=button class=STrChOButton value="Copy To" id=STrChOThronePreviewCopyTo><b>&nbsp;Preset Tag&nbsp;</b><select class=STrChOSelect style="width:25%;" id=STrChOThronePreviewCopyToValue>' + presetsTagList + '</select>&nbsp;&nbsp;';
        m += '<br>';
        m += '<input type=button class=STrChOButton value="Load From" id=STrChOThronePreviewLoadPresetTag><b>&nbsp;Preset Tag&nbsp;</b><select class=STrChOSelect style="width:25%;" id=STrChOThronePreviewLoadPresetTagValue>' + presetsTagList + '</select>&nbsp;&nbsp;';
        m += '<br>';
        m += '<input type=button class=STrChOButton value="Auto Build By Effect" id=STrChOThronePreviewAutoBuild><b>&nbsp;Effect&nbsp;</b><select class=STrChOSelect style="width:25%;" id=STrChOThronePreviewAutoBuildEffect>';
        m += '<option value="0">--Effects--</option>';
        for (efx in CM.thronestats.effects) m += '<option value="' + efx + '">' + CM.thronestats.effects[efx][1] + '</option>';
        m += '</select>&nbsp;&nbsp;';
        m += '</td>';
        m += '</tr>';
        m += '</table>';



        m += '<div class=STrChOHeader onmouseover="this.style.cursor=\'pointer\'"><img src="'+STrChORightArrow+'"/>&nbsp;PREVIEW STATS&nbsp;<img class=STrChOReverseImage src="'+STrChORightArrow+'"/></div>';

        m += '<div class=STrChOSection style="position: static; width: 100%; height: 380px; overflow-x: auto; overflow-y: auto;">';
        m += '<table class=STrChOSectionTable>';
        m += '<tr><td>';
        m += '<div id=STrChOThronePreviewDetails></div>';
        m += '</td></tr>';
        m += '</table>';
        m += '</div>';


        m += '<div class=STrChOHeader onmouseover="this.style.cursor=\'pointer\'"><img src="'+STrChORightArrow+'"/>&nbsp;PREVIEW CARDS&nbsp;<img class=STrChOReverseImage src="'+STrChORightArrow+'"/></div>';

        m += '<div class=STrChOSection style="position: static; width: 100%; height: 380px; overflow-x: auto; overflow-y: auto;">';
        m += '<table class=STrChOSectionTable>';

        m += '<tr>';
        for (idx = 0; idx < throneCardTypes.length; idx++) {
            if (idx % 3 == 0) m += '</tr><tr>';
            m += '<td width=33% valign=top>';
            m += '<div id=STrChOThroneHover' + throneCardTypes[idx] + '>';
            m += '<table>';
            m += '<tr><td><b>' + throneCardTypes[idx].toUpperCase() + '<b></td></tr>';
            m += '<tr><td><select class=STrChOSelect id=STrChOThronePreviewValue' + throneCardTypes[idx] + ' style="white-space:nowrap;display:inline-block;max-width: 150px;">';
            m += '<option value=0>--Items--</option>';
            m += '</select></td></tr>';
            m += '<tr><td><div id=STrChOThronePreviewCard' + throneCardTypes[idx] + '></div></td></tr>';
            m += '</table>';
            m += '</div>';
            m += '</td>';
        }
        m += '</tr>';

        m += '</table>';
        m += '</div>';


        m += '</div>';
		t.mydiv.innerHTML = '<div>' + m + '</div>';

        for (throneId in uW.kocThroneItems) {
            var throneItem = uW.kocThroneItems[throneId];
            var throneType = throneItem.type;
            var elemSelect = document.getElementById('STrChOThronePreviewValue' + throneType);
            elemSelect.options.add(new Option(throneItem.name, throneId));
            if (STrChOThronePresetData.previewThrone[throneId]) {
                elemSelect.value = throneId;
                var throneCard = BuildThroneCard(throneItem);
                document.getElementById('STrChOThronePreviewCard' + throneType).innerHTML = throneCard;
            }
        }

        for (idx = 0; idx < throneCardTypes.length; idx++) {

            document.getElementById('STrChOThronePreviewCard' + throneCardTypes[idx]).addEventListener('click', function(A) {
                A.stopPropagation();
                var throneType = this.id.split('STrChOThronePreviewCard')[1];
                var STrChOPreviewValue = document.getElementById('STrChOThronePreviewValue' + throneType);
                var throneId = STrChOPreviewValue.value;
                var throneItem = uW.kocThroneItems[throneId];
                if (!throneItem || throneItem ==0) return;
                CardContextMenu(this, throneItem, true);
            }, false);

            document.getElementById('STrChOThronePreviewValue' + throneCardTypes[idx]).addEventListener('change', function() {
                var throne_Type = this.id.split('STrChOThronePreviewValue')[1];
                var trId = this.value;
                t.loadThronePreviewCard(trId, throne_Type);
            }, false);

            document.getElementById('STrChOThronePreviewValue' + throneCardTypes[idx]).addEventListener('keyup', function() {
                var throne_Type = this.id.split('STrChOThronePreviewValue')[1];
                var trId = this.value;
                t.loadThronePreviewCard(trId, throne_Type);
            }, false);

        }

        var header = document.getElementsByClassName('STrChOHeader');
        for (var head=0;head<header.length;head++) {
            header[head].addEventListener('click', sectionOpener, false);
        }

        document.getElementById('STrChOThronePreviewDetails').innerHTML = t.getPreviewThroneDetails();

        document.getElementById('STrChOThronePreviewExcel').addEventListener('click', function() {
            ExportThroneToExcel(true);
        }, false);

        document.getElementById('STrChOThronePreviewPost').addEventListener('click', function () {
            t.postPreviewThroneDetails();
        }, false);

        document.getElementById('STrChOThronePreviewReset').addEventListener('click', function () {
            t.resetPreview();
        }, false);

        document.getElementById('STrChOThronePreviewExportLoad').addEventListener('click', function () {
            var fileInput = document.getElementById("STrChOThronePreviewExportLoadItem");
            var files = fileInput.files;
            if (files.length==0) {
                alert('Please Select A File');
                return;
            }
            var file = files[0];

            var reader = new FileReader();

            reader.onload = function (e) {
				var output = e.target.result;
				STrChOThronePresetData.previewThrone = JSON.parse(output);
                SAVESTrChOThronePresetData();
                t.show();
                alert('Preview Throne Now Loaded From File');
            };
            reader.readAsText(file);
        }, false);

        document.getElementById('STrChOThronePreviewExport').addEventListener('click', function() {
            uriContent = 'data:application/octet-stream,' + encodeURIComponent(JSON.stringify(STrChOThronePresetData.previewThrone));
            newWindow = window.open(uriContent, 'file.txt');
        }, false);

        document.getElementById('STrChOThronePreviewCopyTo').addEventListener('click', function () {
            var presetNum = document.getElementById('STrChOThronePreviewCopyToValue').value;
            var presetTag = getThronePresetObject(parseInt(presetNum));
            for (var p in presetTag) delete presetTag[p];
            for (var p in STrChOThronePresetData.previewThrone) presetTag[p] = true;
            STrChOThronePresetData.presetNames[presetNum] = "PREVIEW";
            document.getElementById('STrChOThronePresetName' + presetNum).value = "PREVIEW";
            SAVESTrChOThronePresetData();
            t.show();
        }, false);

        document.getElementById('STrChOThronePreviewLoadPreset').addEventListener('click', function () {
            var presetIndex = document.getElementById('STrChOThronePreviewLoadPresetValue').value;
            var equipped_items = Seed.throne.slotEquip[presetIndex];
            var counter = equipped_items.length;
            t.resetPreview();
            for (var ei = 0; ei < counter; ei++) {
                var throne_item = uW.kocThroneItems[equipped_items[ei]];
                if (throne_item == null || !throne_item) continue;
                STrChOThronePresetData.previewThrone[throne_item.id] = true;
            }
            SAVESTrChOThronePresetData();
            t.show();

        }, false);

        document.getElementById('STrChOThronePreviewAutoBuild').addEventListener('click', function () {
            var EffectId = document.getElementById('STrChOThronePreviewAutoBuildEffect').value;

            if (EffectId == 0) return;

            var EffectName = CM.thronestats.effects[EffectId][1];
            var isBuff = true;
            if (EffectName.indexOf(" Debuff") != -1) isBuff = false;


            function eCard() {
                this.id = 0;
                this.type = '';
                this.total  = 0;
            }

            var EffectedCards = [];

            for (tct = 0; tct < throneCardTypes.length; tct++) EffectedCards[throneCardTypes[tct]] = new Array;

            for (var throneId in uW.kocThroneItems) {
                var throneItem = uW.kocThroneItems[throneId];
                var totalEffects = 0;
                for (var effect in throneItem.effects) {
                    var fx = throneItem.effects[effect];
                    if (fx.id == EffectId) {
                        var tier = CM.thronestats.tiers[fx.id][fx.tier];
                        if (!tier) CM.thronestats.tiers[fx.id][fx.tier - 1]
                        var base = tier.base || 0;
                        var level = throneItem.level || 0;
                        var growth = tier.growth || 0;
                        var percent = +(base + ((level * level + level) * growth * 0.5));
                        totalEffects += percent;
                    }
                }
                if (totalEffects != 0) {
                    var thisCard = new eCard();
                    thisCard.id = throneId;
                    thisCard.total = totalEffects;
                    thisCard.type = throneItem.type;
                    if (EffectedCards[thisCard.type].length > 0) {
                        if (isBuff && EffectedCards[thisCard.type][0].total > thisCard.total) continue;
                        if (!isBuff && EffectedCards[thisCard.type][0].total < thisCard.total) continue;
                        EffectedCards[thisCard.type][0] = thisCard;
                    } else {
                        EffectedCards[thisCard.type].push(thisCard);
                    }

                }
            }
            t.resetPreview();
            for (tct = 0; tct < throneCardTypes.length; tct++) {
                if (EffectedCards[throneCardTypes[tct]].length > 0) {
                    var thisCard = EffectedCards[throneCardTypes[tct]][0];
                    t.loadThronePreviewCard(thisCard.id, thisCard.type);
                }
            }
            SAVESTrChOThronePresetData();
        }, false);

        document.getElementById('STrChOThronePreviewLoadPresetTag').addEventListener('click', function () {
            var presetNum = document.getElementById('STrChOThronePreviewLoadPresetTagValue').value;
            var presetTag = getThronePresetObject(parseInt(presetNum));
            t.resetPreview();
            for (var p in presetTag) STrChOThronePresetData.previewThrone[p] = true;
            SAVESTrChOThronePresetData();
            t.show();

        }, false);

        document.getElementById('STrChOThronePreviewEquip').addEventListener('click', function () {
            var t = Tabs.thronePreview;

            var presetIndex = document.getElementById('STrChOThronePreviewEquipValue').value;

            if (t.equipingPreview) {
                alert("still equipping");
                return;
            }

            if (getObjectCollectionCount(STrChOThronePresetData.previewThrone) == 0) return;

            var c = 0;
            t.equipingPreview = true;

            var delay = 7;

            var types_equiped = [];

            var goEquip = function (I2, s) {
                return function () {
                    Tabs.throneOrganizer.equipItem(I2, s);
                };
            }

            for (var trId in STrChOThronePresetData.previewThrone) {
                var throne_item = uW.kocThroneItems[trId];
                if (throne_item == null || !throne_item) continue;
                setTimeout(goEquip(throne_item, presetIndex), c * delay * 1000); // have to wait at least 5 seconds between switches

                c++;

            }
            setTimeout(function () {
                t.equipingPreview = false;
                alert("equipping to slot " + presetIndex + " from PREVIEW complete")
            }, (c * (delay * 1000)) + 1000);

        }, false);
	},

    loadThronePreviewCard: function(throneId, throneType) {
        var t = Tabs.thronePreview;
        var throneCard = '';
        if (throneId != 0) {
            var throneItem = uW.kocThroneItems[throneId];
            if (!throneItem || throneItem ==0) {
                throneCard = '';
            } else {
                throneCard = BuildThroneCard(throneItem);
            }
        }
        document.getElementById('STrChOThronePreviewCard' + throneType).innerHTML = throneCard;

        document.getElementById('STrChOThronePreviewValue' + throneType).value = throneId;

        for (pId in STrChOThronePresetData.previewThrone) {
            var throne_item = uW.kocThroneItems[pId];
            if (throne_item == null || !throne_item) continue;
            if (throne_item.type == throneType) {
                delete STrChOThronePresetData.previewThrone[pId];
                break;
            }
        }

        if (throneId != 0) STrChOThronePresetData.previewThrone[throneId] = true

        SAVESTrChOThronePresetData();

        document.getElementById('STrChOThronePreviewDetails').innerHTML = t.getPreviewThroneDetails();
    },

    getPreviewThroneDetails: function () {
        var t = Tabs.thronePreview;
        var previewPreset = [];
        for (var trId in STrChOThronePresetData.previewThrone) previewPreset.push(trId);

        var stringPreviewThrone = GenerateThronePresetEffectsString(previewPreset, true);
        if (stringPreviewThrone == "") {
            stringPreviewThrone = "No Stats To Preview";
        } else {
            stringPreviewThrone = "<b>PREVIEW STATS:</b>\n" + stringPreviewThrone;
        }
        return stringPreviewThrone;
    },

    postPreviewThroneDetails: function () {
        var t = Tabs.thronePreview;
        var previewPreset = [];
        for (var trId in STrChOThronePresetData.previewThrone) previewPreset.push(trId);

        var stringPreviewThrone = GenerateThronePresetEffectsString(previewPreset, true);
        if (stringPreviewThrone == "") {
            return;
        } else {
            var table = stringPreviewThrone.split("</div><div>");
            stringPreviewThrone = table.join("||");
            stringPreviewThrone = stringPreviewThrone.replace("<div>", ":::. |TR PREVIEW STATS:||");
            stringPreviewThrone = stringPreviewThrone.replace("</div>", "");
            sendChat(stringPreviewThrone);
        }
        return;

    },

    resetPreview: function () {
        var t = Tabs.thronePreview;

        for (trId in STrChOThronePresetData.previewThrone) delete STrChOThronePresetData.previewThrone[trId];
        SAVESTrChOThronePresetData();

        for (idx = 0; idx < throneCardTypes.length; idx++) {
            document.getElementById('STrChOThronePreviewCard' + throneCardTypes[idx]).innerHTML = "";
            document.getElementById('STrChOThronePreviewValue' + throneCardTypes[idx]).value = 0;
        }

        document.getElementById('STrChOThronePreviewDetails').innerHTML = t.getPreviewThroneDetails();
    },

}

Tabs.throneCompare = {
	tabOrder: 110,
	tabLabel: 'COMPARE',
	tabColor: 'red',
    tabHeader: 'THRONE ROOM COMPARE',

	init: function (div) {
		var t = Tabs.throneCompare;
		t.mydiv = div;

		var m = '<div class=STrChOHeader>' + t.tabHeader + '</div>';

        m += '<div>';
        m += '<center>';
        m += '<table>';

        m += '<tr>';
        m += '<td align=center><b>CARD 1</b></td>';
        m += '<td align=center><b>CARD 2</b></td>';
        m += '</tr>';

        m += '<tr>';
        m += '<td>';
        m += '<b>Item Type:</b><select class=STrChOSelect id=STrChOThroneCompareType1 style="width: 40%;">';
        m += '<option value="0">--ALL--</option>';
        for (var i = 0; i < throneCardTypes.length; i++) m += '<option value="' + throneCardTypes[i] + '">' + throneCardTypes[i].capitalizeFirstLetter() + '</option>';
        m += '</select>';
        m += '</td>';
        m += '<td>';
        m += '<b>Item Type:</b><select class=STrChOSelect id=STrChOThroneCompareType2 style="width: 40%;">';
        m += '<option value="0">--ALL--</option>';
        for (var i = 0; i < throneCardTypes.length; i++) m += '<option value="' + throneCardTypes[i] + '">' + throneCardTypes[i].capitalizeFirstLetter() + '</option>';
        m += '</select>';
        m += '</td>';
        m += '</tr>';

        m += '<tr>';
        m += '<td>';
        m += '<b>Throne Item:</b><br/><select class=STrChOSelect id=STrChOThroneCompareId1 style="width: 95%;">';
        m += '<option value="0">--Items--</option>';
        for (var throneId in uW.kocThroneItems) m += '<option value="' + throneId + '">' + uW.kocThroneItems[throneId].name + ' </option>';
        m += '</select>';
        m += '</td>';
        m += '<td>';
        m += '<b>Throne Item:</b><br/><select class=STrChOSelect id=STrChOThroneCompareId2 style="width: 95%;">';
        m += '<option value="0">--Items--</option>';
        for (var throneId in uW.kocThroneItems) m += '<option value="' + throneId + '">' + uW.kocThroneItems[throneId].name + ' </option>';
        m += '</select>';
        m += '</td>';
        m += '</tr>';

        m += '<tr>';
        m += '<td>';
        m += '<div id=STrChOThroneCompareCard1></div>';
        m += '</td>';
        m += '<td>';
        m += '<div id=STrChOThroneCompareCard2></div>';
        m += '</td>';
        m += '</tr>';

        m += '</table>';
        m += '</center>';
        m += '</div>';

		t.mydiv.innerHTML = '<div>' + m + '</div>';

        document.getElementById('STrChOThroneCompareId1').addEventListener('change', function () { t.loadCard(this, 'STrChOThroneCompareCard1'); }, false);

        document.getElementById('STrChOThroneCompareId2').addEventListener('change', function () { t.loadCard(this, 'STrChOThroneCompareCard2'); }, false);

        document.getElementById('STrChOThroneCompareId1').addEventListener('keyup', function () { t.loadCard(this, 'STrChOThroneCompareCard1'); }, false);

        document.getElementById('STrChOThroneCompareId2').addEventListener('keyup', function () { t.loadCard(this, 'STrChOThroneCompareCard2'); }, false);

        document.getElementById('STrChOThroneCompareType1').addEventListener('change', function () { t.filterItems(this, 'STrChOThroneCompareId1', 'STrChOThroneCompareCard1'); }, false);

        document.getElementById('STrChOThroneCompareType2').addEventListener('change', function () { t.filterItems(this, 'STrChOThroneCompareId2', 'STrChOThroneCompareCard2'); }, false);

        document.getElementById('STrChOThroneCompareType1').addEventListener('keyup', function () { t.filterItems(this, 'STrChOThroneCompareId1', 'STrChOThroneCompareCard1'); }, false);

        document.getElementById('STrChOThroneCompareType2').addEventListener('keyup', function () { t.filterItems(this, 'STrChOThroneCompareId2', 'STrChOThroneCompareCard2'); }, false);

    },

    sendToCompare: function (Id) {
        var t = Tabs.throneCompare;
        var throneItem = uW.kocThroneItems[Id];
        var card1 = document.getElementById('STrChOThroneCompareId1');
        var card2 = document.getElementById('STrChOThroneCompareId2');
        var obj = '';
        if (card1.value == 0)
            obj = '1';
        else if (card2.value == 0)
            obj = '2';
        else
            obj = '1';

        document.getElementById('STrChOThroneCompareType' + obj).value = throneItem.type;
        t.filterItems(document.getElementById('STrChOThroneCompareType' + obj), ('STrChOThroneCompareId' + obj), ('STrChOThroneCompareCard' + obj));
        document.getElementById('STrChOThroneCompareId' + obj).value = Id;
        t.loadCard(document.getElementById('STrChOThroneCompareId' + obj), ('STrChOThroneCompareCard' + obj));
    },

    loadCard: function (objectItem, objectName) {
        var div = document.getElementById(objectName);
        if (objectItem.value == 0)
            div.innerHTML = '';
        else
            div.innerHTML = BuildThroneCard(uW.kocThroneItems[objectItem.value]);
    },

    filterItems: function (objectItem, objectIdName, objectName) {
        document.getElementById(objectName).innerHTML = '';
        var select = document.getElementById(objectIdName);
        select.value = 0;
        var m = '<option value="0">--Items--</option>';
        if (objectItem.value == 0) {
            for (var throneId in uW.kocThroneItems) {
                m += '<option value="' + throneId + '">' + uW.kocThroneItems[throneId].name + '</option>';
            }
        } else {
            for (var throneId in uW.kocThroneItems) {
                if (uW.kocThroneItems[throneId].type == objectItem.value)
                    m += '<option value="' + throneId + '">' + uW.kocThroneItems[throneId].name + '</option>';
            }
        }
        select.innerHTML = m;
    },


	hide: function () {},

	show: function () {},
}

Tabs.throneUniques = {
	tabOrder: 111,
	tabLabel: 'UNIQUES',
	tabColor: 'red',
    tabHeader: 'THRONE ROOM UNIQUES',
    UniqueItems : null,
    selectedCard: 0,
    selectedType: 0,
    selectedLevel: 1,

	init: function (div) {
		var t = Tabs.throneUniques;
		t.mydiv = div;

        t.UniqueItems = CM.WorldSettings.getSettingAsObject("TR_UNIQUE_ITEMS");
        for (k in t.UniqueItems) {
            var throne_item = t.UniqueItems[k];
            if (parseInt(throne_item.Id) < 29000) delete t.UniqueItems[k];
            if (parseInt(throne_item.Id) == 30262 || parseInt(throne_item.Id) == 30264 || parseInt(throne_item.Id) == 30266) { throne_item.Name = throne_item.Name + ' ('+uW.g_js_strings.commonstr[CM.CHAMPION.getFactionClasses(throne_item.Faction)].toLowerCase()+')';};
            if (parseInt(throne_item.Id) == 30261 || parseInt(throne_item.Id) == 30263 || parseInt(throne_item.Id) == 30265) { throne_item.Name = throne_item.Name + ' ('+uW.g_js_strings.commonstr[CM.CHAMPION.getFactionClasses(throne_item.Faction)].toLowerCase()+')';};
            if (parseInt(throne_item.Id) == 30230 || parseInt(throne_item.Id) == 30240 || parseInt(throne_item.Id) == 30250) { throne_item.Name = throne_item.Name + ' ('+uW.g_js_strings.commonstr[CM.CHAMPION.getFactionClasses(throne_item.Faction)].toLowerCase()+')';};
            if (parseInt(throne_item.Id) == 30231 || parseInt(throne_item.Id) == 30241 || parseInt(throne_item.Id) == 30251) { throne_item.Name = throne_item.Name + ' ('+uW.g_js_strings.commonstr[CM.CHAMPION.getFactionClasses(throne_item.Faction)].toLowerCase()+')';};
        }

		var m = '<div class=STrChOHeader>' + t.tabHeader + '</div>';
        m += '<div style="height: ' + (dlgHeight - (dlgHeightOffset*2.5)) + 'px; width: ' + (dlgWidth - dlgWidthMenu) + 'px; margin-top:5px; margin-bottom:5px; overflow-x: auto; overflow-y: auto; position: static;">';

        m += '<center><table>';
        m += '<tr><td><div style="max-width:100%;"><b>Item Type:</b><select class=STrChOSelect id=STrChOThroneUniqueType style="width: 40%;">';
        m += '<option value="0">--ALL--</option>';
        for (var i = 0; i < throneCardTypes.length; i++) m += '<option value="' + throneCardTypes[i] + '">' + throneCardTypes[i].capitalizeFirstLetter() + '</option>';
        m += '</select></div></td></tr>';

        m += '<tr><td><div style="max-width:100%;"><b>Throne Item:</b><br/><select class=STrChOSelect id=STrChOThroneUnique style="width: 95%;">';
        m += '<option value="0">--Items--</option>';
        for (k in t.UniqueItems) {
            var throne_item = t.UniqueItems[k];
            if (throne_item == null || !throne_item) continue;
            m += '<option value="' + k + '">' + throne_item.Name + ' </option>';
        }
        m += '</select></div></td></tr>';

        m += '<tr><td><div style="max-width:100%;"><b>Level:</b><select class=STrChOSelect id=STrChOThroneUniqueLevel style="width: 40%;">';
        m += '<option value="1" selected>+1</option>';
        for (lvl = 2; lvl < STrChOMaxThroneLevel + 1; lvl++) m += '<option value="' + lvl + '">+' + lvl + '</option>';
        m += '</select></div></td></tr>';

        m += '<tr><td><div id=STrChOThroneUniqueCard></div></td></tr>';

        m += '</table>';

        m += '</div>';
		t.mydiv.innerHTML = '<div>' + m + '</div>';

        document.getElementById('STrChOThroneUniqueType').addEventListener('change', function () {
            t.selectedType = document.getElementById('STrChOThroneUniqueType').value;
            t.selectedCard = 0;
            t.FilterUniques();
            document.getElementById('STrChOThroneUniqueCard').innerHTML = '';
        }, false);

        document.getElementById('STrChOThroneUnique').addEventListener('change', function () {
            t.selectedCard = document.getElementById('STrChOThroneUnique').value;
            if (t.selectedCard != 0) t.SwitchUnique();
        }, false);

        document.getElementById('STrChOThroneUniqueLevel').addEventListener('change', function () {
            t.selectedLevel = document.getElementById('STrChOThroneUniqueLevel').value;
            if (t.selectedCard != 0) t.SwitchUnique();
        }, false);

	},

	hide: function () {},

	show: function () {},

    FilterUniques: function (cardType) {
        var t = Tabs.throneUniques;
        var throneList = document.getElementById('STrChOThroneUnique');
        throneList.options.length = 0;
        var throneOption = document.createElement('option');
        throneOption.text = '--Items--';
        throneOption.value = 0;
        throneList.add(throneOption);
        for (k in t.UniqueItems) {
            var throne_item = t.UniqueItems[k];
            if (throne_item == null || !throne_item) continue;
            if (throneCardTypes[throne_item.Type-1] == t.selectedType || t.selectedType == 0) {
                var throneOption = document.createElement('option');
                throneOption.text = throne_item.Name;
                throneOption.value = k;
                throneList.add(throneOption);
            }
        }
    },

    SwitchUnique: function () {
        var t = Tabs.throneUniques;
        var div = document.getElementById('STrChOThroneUniqueCard');
        var m = ConvertUniqueAndBuildThroneCard(t.selectedCard, t.selectedLevel);
        m += t.GetUniqueInventory(t.selectedCard);
        div.innerHTML = m;
        var STrChOThroneUseUnique = document.getElementById('STrChOThroneUseUnique');
        if (!STrChOThroneUseUnique) return;
        STrChOThroneUseUnique.addEventListener('click', function() {
            var uniqueId = this.getAttribute('uid');
            var uniqueCount = parseInt(document.getElementById('STrChOThroneUniqueCount').innerHTML);
            uniqueCount--;
            document.getElementById('STrChOThroneUniqueCount').innerHTML = uniqueCount;
            CM.ItemController.use(uniqueId);
        }, false);
    },


    GetUniqueInventory: function (uniqueId) {
        var m = '<br><b>Throne Room</b><br>';
        var throneitems = {};
        for (throneId in uW.kocThroneItems) {
            var throneItem = uW.kocThroneItems[throneId];
            if (throneItem.unique == uniqueId) {
                if (throneitems[throneItem.level]) {
                    throneitems[throneItem.level]++;
                } else {
                    throneitems[throneItem.level] = 1;
                }
            }
        }
        var gotitem = false;
        for (lvl in throneitems) {
            gotitem = true;
            m += 'You have ' + throneitems[lvl] + ' at level ' + lvl + '<br>';
        }
        if (!gotitem) m += 'You have none in your throne room.<br>';

        m += '<br><b>Inventory</b><br>';
        var inventory = Seed.items['i' + uniqueId];
        m += 'You have <div class=divNoWrap id=STrChOThroneUniqueCount>' + (inventory ? inventory : '0') + '</div> in your inventory.';
        if ((inventory?inventory:0) != 0) m += '<br><b><a id=STrChOThroneUseUnique uid="' + uniqueId + '">Add To Throne Room</a></b>';
        return m;
    },

}

Tabs.throneCaps = {
	tabOrder: 112,
	tabLabel: 'CAPS',
	tabColor: 'red',
    tabHeader: 'THRONE ROOM CAPS',

	init: function (div) {
		var t = Tabs.throneCaps;
		t.mydiv = div;

		var m = '<div class=STrChOHeader>' + t.tabHeader + '</div>';

        m += '<div class=indent5>';
        m += '<table cellpadding=0 cellspacing=0 width=100% align=center>';
        m += '<tr><td width=50% align=left><b>Boost</b></td><td width=25% align=left><b>Max</b></td><td width=25% align=left><b>Min</b></td></tr>';
        m += '</table>';
        m += '</div>';

        m += '<div class=indent5 style="height: ' + (dlgHeight - (dlgHeightOffset*2.5)) + 'px; width: ' + (dlgWidth - dlgWidthMenu) + 'px; margin-top:5px; margin-bottom:5px; overflow-x: auto; overflow-y: auto; position: static;">';

        m += '<table cellpadding=0 cellspacing=0 width=100% align=center>';
        for (var boost in CM.thronestats.boosts) {
            var cap = CM.thronestats.boosts[boost];
            m += '<tr class=trTabLined>';
            m += '<td width=50%>' + cap.BoostName + '</td>';
            m += '<td width=25%>' + cap.Max + ((cap.CapType == "percent") ? '%' : '') + '</td>';
            m += '<td width=25%>' + ((cap.Min == "none") ? 'None' : cap.Min + '%') + '</td>';
            m += '</tr>';
        }
        m += '</table>';
        m += '</div>';
		t.mydiv.innerHTML = '<div>' + m + '</div>';

	},

	hide: function () {},

	show: function () {},
}

Tabs.champUpgrader = {
	tabOrder: 200,
	tabLabel: 'UPGRADER',
	tabColor: 'brown',
  tabHeader: 'CHAMP HALL UPGRADER',
  myDiv: null,
  repairId: 0,
  repairEnd: 0,
  timerH: null,
  clearTimerH: null,
  speedup: 0,
  upgradePath: {
    0: { maxLev: 2, nextQual: 2 },
    1: { maxLev: 2, nextQual: 2 },
    2: { maxLev: 3, nextQual: 4 },
    3: { maxLev: 3, nextQual: 4 },
    4: { maxLev: 4, nextQual: 5 }
  },

	init: function (div) {
		var t = Tabs.champUpgrader;
		t.mydiv = div;
		var m = '<div class=STrChOHeader>' + t.tabHeader + '<div class=STrChOSaveSettings id=STrChOChampUpgraderSaveSettings title="Save Upgrader Settings"></div><div class=STrChOLoadSettings id=STrChOChampUpgraderLoadSettings title="Load Upgrader Settings"></div></div>';

    m += '<div style="height: ' + (dlgHeight - (dlgHeightOffset*2.5)) + 'px; width: ' + (dlgWidth - dlgWidthMenu) + 'px; margin-top:5px; margin-bottom:5px; overflow-x: auto; overflow-y: auto; position: static;">';

		m += '<div>';
    m += '<table class=STrChOSectionTable>';
    m += '<tr>';

    if (STrChOChampUpgradeData.active) {
        m += '<td width=33%><input id=STrChOChampUpgradePower type=button class=STrChOButton value="Upgrader = ON"></td>';
    } else {
        m += '<td width=33%><input id=STrChOChampUpgradePower type=button class=STrChOButton value="Upgrader = OFF"></td>';
    }
    m += '<td width=33%><div class=divNoWrap><input class=STrChOCheckbox id=STrChOChampOneItem type=checkbox ' + (STrChOChampQueueData.oneItem ? ' CHECKED' : '') + '/>Upgrade 1 At A Time</div></td>';
    m += '<td width=33%><div class=divNoWrap align=center id=STrChOChampAetherDisplay></div></td>';
    m += '</tr>';
    m += '<tr><td colspan=3><hr class=STrChOHRCenter></td></tr>';
    m += '<tr><td colspan=3><div class=indent5 id=STrChOChampUpgradeStatus><br></div></td></tr>';
    m += '<tr><td colspan=3><div class=indent5 id=STrChOChampLastResult><br></div></td></tr>';
    m += '</table>';
    m += '</div>';

    m += '<div class=STrChOHeader onmouseover="this.style.cursor=\'pointer\'"><img src="'+STrChORightArrow+'"/>&nbsp;SPEED UPS&nbsp;<img class=STrChOReverseImage src="'+STrChORightArrow+'"/></div>';

    m += '<div class=STrChOSection>';
    m += '<table class=STrChOSectionTable>';
    m += '<tr>';
    m += '<td colspan=3><input class=STrChOCheckbox type=checkbox id=STrChOChampHourglassLevelSpecific ' + (STrChOChampUpgradeData.hourglassLevelSpecific ? "CHECKED" : "") + '>Only use hourglass for levels ';
    m += '<select class=STrChOSelect  id=STrChOChampHourglassLevel>';
    for (i = 1; i < STrChOMaxChampLevel; i++) m += '<option value=' + i + ' ' + (STrChOChampUpgradeData.hourglassLevel == i ? 'SELECTED' : '') + '>' + i + '</option>';
    m += '</select> and higher</td>';
    m += '</tr>';
    m += '<tr>';
    m += '<td colspan=3><input class=STrChOCheckbox type=checkbox id=STrChOChampHourglassQualitySpecific ' + (STrChOChampUpgradeData.hourglassQualitySpecific ? "CHECKED" : "") + '>Only use hourglass for qualities ';
    m += '<select class=STrChOSelect id=STrChOChampHourglassQuality>';
    for (i = 1; i <= STrChOMaxChampQuality-1; i++) {
        m += '<option value=' + i + ' ' + (STrChOChampUpgradeData.hourglassQuality == i ? 'SELECTED' : '') + '>' + champCardQualities[i].capitalizeFirstLetter() + '</option>';
    }
    m += '</select> and higher</td>';
    m += '</tr>';
    m += '<tr>';
    m += '<td title="' + STrChOHourGlassTDLabel[1] + '"><input class=STrChOCheckbox type=checkbox id=STrChOChampUseSH ' + (STrChOChampUpgradeData.useSH ? 'CHECKED' : '') + '><div class=divNoWrap>' + STrChOHourGlassName[1] + ' (<div class=divNoWrap id=STrChOChampUseSHLabel><font' + (uW.ksoItems[1].count < 100 ? ' color=red>' : '>') + uW.ksoItems[1].count + '</font></div>)</div></td>';
    m += '<td title="' + STrChOHourGlassTDLabel[2] + '"><input class=STrChOCheckbox type=checkbox id=STrChOChampUseKH ' + (STrChOChampUpgradeData.useKH ? 'CHECKED' : '') + '><div class=divNoWrap>' + STrChOHourGlassName[2] + ' (<div class=divNoWrap id=STrChOChampUseKHLabel><font' + (uW.ksoItems[2].count < 100 ? ' color=red>' : '>') + uW.ksoItems[2].count + '</font></div>)</div></td>';
    m += '<td title="' + STrChOHourGlassTDLabel[3] + '"><input class=STrChOCheckbox type=checkbox id=STrChOChampUseGH ' + (STrChOChampUpgradeData.useGH ? 'CHECKED' : '') + '><div class=divNoWrap>' + STrChOHourGlassName[3] + ' (<div class=divNoWrap id=STrChOChampUseGHLabel><font' + (uW.ksoItems[3].count < 100 ? ' color=red>' : '>') + uW.ksoItems[3].count + '</font></div>)</div></td>';
    m += '</tr>';
    m += '<tr>';
    m += '<td title="' + STrChOHourGlassTDLabel[4] + '"><input class=STrChOCheckbox type=checkbox id=STrChOChampUseMH ' + (STrChOChampUpgradeData.useMH ? 'CHECKED' : '') + '><div class=divNoWrap>' + STrChOHourGlassName[4] + ' (<div class=divNoWrap id=STrChOChampUseMHLabel><font' + (uW.ksoItems[4].count < 100 ? ' color=red>' : '>') + uW.ksoItems[4].count + '</font></div>)</div></td>';
    m += '<td title="' + STrChOHourGlassTDLabel[5] + '"><input class=STrChOCheckbox type=checkbox id=STrChOChampUseAH ' + (STrChOChampUpgradeData.useAH ? 'CHECKED' : '') + '><div class=divNoWrap>' + STrChOHourGlassName[5] + ' (<div class=divNoWrap id=STrChOChampUseAHLabel><font' + (uW.ksoItems[5].count < 100 ? ' color=red>' : '>') + uW.ksoItems[5].count + '</font></div>)</div></td>';
    m += '<td title="' + STrChOHourGlassTDLabel[6] + '"><input class=STrChOCheckbox type=checkbox id=STrChOChampUseWH ' + (STrChOChampUpgradeData.useWH ? 'CHECKED' : '') + '><div class=divNoWrap>' + STrChOHourGlassName[6] + ' (<div class=divNoWrap id=STrChOChampUseWHLabel><font' + (uW.ksoItems[6].count < 100 ? ' color=red>' : '>') + uW.ksoItems[6].count + '</font></div>)</div></td>';
    m += '</tr>';
    m += '<tr>';
    m += '<td title="' + STrChOHourGlassTDLabel[7] + '"><input class=STrChOCheckbox type=checkbox id=STrChOChampUseDH ' + (STrChOChampUpgradeData.useDH ? 'CHECKED' : '') + '><div class=divNoWrap>' + STrChOHourGlassName[7] + ' (<div class=divNoWrap id=STrChOChampUseDHLabel><font' + (uW.ksoItems[7].count < 100 ? ' color=red>' : '>') + uW.ksoItems[7].count + '</font></div>)</div></td>';
    m += '<td title="' + STrChOHourGlassTDLabel[8] + '"><input class=STrChOCheckbox type=checkbox id=STrChOChampUseEH ' + (STrChOChampUpgradeData.useEH ? 'CHECKED' : '') + '><div class=divNoWrap>' + STrChOHourGlassName[8] + ' (<div class=divNoWrap id=STrChOChampUseEHLabel><font' + (uW.ksoItems[8].count < 100 ? ' color=red>' : '>') + uW.ksoItems[8].count + '</font></div>)</div></td>';
    m += '<td/>';
    m += '</tr>';
    m += '<tr>';
    m += '<td colspan=3><input class=STrChOCheckbox type=checkbox id=STrChOChampOverrideSpeedUps ' + (STrChOChampUpgradeData.overrideSpeedUp ? "CHECKED" : "") + '>Override hourglasses by using ';
    m += '<select class=STrChOSelect  id=STrChOChampSpeedUp>';
    m += '<option value=0>None</option>';
    for (gls in STrChOHourGlassName) {
        m += '<option value=' + gls + ' ' + (STrChOChampUpgradeData.useSpeedUp == gls ? 'SELECTED' : '') + '>' + STrChOHourGlassName[gls] + '</option>';
    }
    m += '</select> every time</td>';
    m += '</tr>';
    m += '</table>';
    m += '</div>';

    m += '<div class=STrChOHeader onmouseover="this.style.cursor=\'pointer\'"><img src="'+STrChORightArrow+'"/>&nbsp;BOOST ITEMS&nbsp;<img class=STrChOReverseImage src="'+STrChORightArrow+'"/></div>';

    m += '<div class=STrChOSection>';
    m += '<table class=STrChOSectionTable>';
    m += '<tr>';
    m += '<td><input class=STrChOCheckbox type=checkbox ' + (STrChOChampUpgradeData.useLOM ? "CHECKED" : "") + ' id=STrChOChampUseLOM><div class=divNoWrap>Lesser Orb of Metallurgy (<div class=divNoWrap id=STrChOChampUseLOMLabel>' + uW.ksoItems[21001].count + '</div>)</div></td>';
    m += '<td><input class=STrChOCheckbox type=checkbox ' + (STrChOChampUpgradeData.useGOM ? "CHECKED" : "") + ' id=STrChOChampUseGOM><div class=divNoWrap>Greater Orb of Metallurgy (<div class=divNoWrap id=STrChOChampUseGOMLabel>' + uW.ksoItems[21002].count + '</div>)</div></td>';
    m += '<td>Quality <select class=STrChOSelect  id=STrChOChampUseQuality>';
    for (i = 0; i <= STrChOMaxChampQuality-1; i++) {
        m += '<option value="' + i + '" ' + (STrChOChampUpgradeData.useQuality == i ? 'SELECTED' : '')  + '>' + champCardQualities[i].capitalizeFirstLetter() + '</option>';
    }
    m += '</select> and higher</td>';
    m += '</tr>';

    m += '<tr>';
    m += "<td><input class=STrChOCheckbox type=checkbox " + (STrChOChampUpgradeData.useJT ? "CHECKED" : "") + " id=STrChOChampUseJT><div style='white-space:nowrap;display:inline-block;'>Journeyman Smith's Token (<div style='white-space:nowrap;display:inline-block;' id=STrChOChampUseJTLabel>" + uW.ksoItems[21051].count + "</div>)</div></td>";
    m += "<td><input class=STrChOCheckbox type=checkbox " + (STrChOChampUpgradeData.useST ? "CHECKED" : "") + " id=STrChOChampUseST><div style='white-space:nowrap;display:inline-block;'>Smith's Token (<div style='white-space:nowrap;display:inline-block;' id=STrChOChampUseSTLabel>" + uW.ksoItems[21052].count + "</div>)</div></td>";
    m += '<td>Level <select id="STrChOChampUseLevel">';
    for (i = 1; i <= STrChOMaxChampLevel-1; i++) {
        m += '<option value="' + i + '" ' + (STrChOChampUpgradeData.useLevel == i ? 'SELECTED' : '') + '> +' + i + '</option>';
    }
    m += '</select> and higher</td>';
    m += '</tr>';
    m += '<tr>';
    m += "<td><input class=STrChOCheckbox type=checkbox " + (STrChOChampUpgradeData.useET ? "CHECKED" : "") + " id=STrChOChampUseET><div style='white-space:nowrap;display:inline-block;'>Expert Smith's Token (<div style='white-space:nowrap;display:inline-block;' id=STrChOChampUseETLabel>" + uW.ksoItems[21058].count + "</div>)</div></td>";
    m += "<td/>";
    m += "<td/>";
    m += "</tr>";

    m += '<tr><td colspan=3>';
    m += '<input class=STrChOCheckbox id=STrChOChampUseAutoTokens type=checkbox ' + (STrChOChampUpgradeData.useAutoTokens ? 'CHECKED ' : '') + '/> Use Auto Forged Upgrade When Min Level ';
    m += '<select id=STrChOChampUseAutoTokensMin class=STrChOSelect>';
    for (var lvl = 0; lvl < STrChOMaxChampLevel; lvl++) m += '<option value="' + lvl + '" ' + (STrChOChampUpgradeData.useAutoTokensMin == lvl ? 'SELECTED ' : '') + '>+' + lvl + '</option>';
    m += '</select> & Max Level ';
    m += '<select id=STrChOChampUseAutoTokensMax class=STrChOSelect>';
    for (var lvl = 0; lvl < STrChOMaxChampLevel; lvl++) m += '<option value="' + lvl + '" ' + (STrChOChampUpgradeData.useAutoTokensMax == lvl ? 'SELECTED ' : '') + '>+' + lvl + '</option>';
    m += '</select>';

    m += '</table>';
    m += '</div>';

    m += '<div class=STrChOHeader onmouseover="this.style.cursor=\'pointer\'"><img src="'+STrChORightArrow+'"/>&nbsp;UPGRADE ITEMS&nbsp;<img class=STrChOReverseImage src="'+STrChORightArrow+'"/></div>';

    m += '<div class=STrChOSection>';
    m += '<table class=STrChOSectionTable>';
    m += '<tr>';
    m += '<td colspan=4>Enhance All Quality <select class=STrChOSelect id=STrChOChampEnhanceAllQuality>';
    for (i = 0; i <= STrChOMaxChampQuality-1; i++) {
        m += '<option value="' + i + '">' + champCardQualities[i].capitalizeFirstLetter() + '</option>';
    }
    m += '</select> To Quality <select class=STrChOSelect id=STrChOChampEnhanceAllQualityTo>';
    for (i = 1; i <= STrChOMaxChampQuality; i++) {
        m += '<option value="' + i + '">' + champCardQualities[i].capitalizeFirstLetter() + '</option>';
    }
    m += '</select>&nbsp;&nbsp;<input class=STrChOButton type=button value="Add" id=STrChOChampEnhanceAddAllQuality></td>';
    m += '</tr>';

    m += '<tr><td colspan=4>Upgrade All Cards Less To Level <select class=STrChOSelect id=STrChOChampUpgradeAddAllLevelMaxTo>';
    for (i = 1; i <= STrChOMaxChampLevel; i++) {
        m += '<option value="' + i + '"> +' + i + '</option>';
    }
    m += '</select>&nbsp;&nbsp;<input class=STrChOButton type=button value="Add" id=STrChOChampUpgradeAddAllLevelMax></td></tr>';

    m += '<tr>';
    m += '<td colspan=4>Upgrade All Level <select class=STrChOSelect id=STrChOChampUpgradeAllLevel>';
    for (i = 0; i <= STrChOMaxChampLevel-1; i++) {
        m += '<option value="' + i + '"> +' + i + '</option>';
    }
    m += '</select> To Level <select class=STrChOSelect id=STrChOChampUpgradeAllLevelTo>';
    for (i = 1; i <= STrChOMaxChampLevel; i++) {
        m += '<option value="' + i + '"> +' + i + '</option>';
    }
    m += '</select>&nbsp;&nbsp;<input class=STrChOButton type=button value="Add" id=STrChOChampUpgradeAddAllLevel></td>';
    m += '</tr>';
    m += '<tr>';
    m += '<td class=divNoWrap>Item: <select class=STrChOSelect style="white-space:nowrap;display:inline-block;max-width: 200px;" id=STrChOChampUpgradeList>';
    m += '<option value="0">--Items--</option>';
    for (ChampID in uW.kocChampionItems) {
        var champItem = uW.kocChampionItems[ChampID];
        m += '<option value="' + ChampID + '">' + champItem.name + '</option>';
    }
    m += '</select>&nbsp;';
    m += 'Action: <select class=STrChOSelect style="white-space:nowrap;display:inline-block;" id=STrChOChampAction>';
    m += '<option value="upgrade">Upgrade</option>';
    m += '<option value="enhance">Enhance</option>';
    m += '<option value="both">Both</option>';
    m += '</select>&nbsp;';
    m += '<div class=divNoWrap id=STrChOChampMaxDiv></div>&nbsp;';
    m += '<input class=STrChOButton id=STrChOChampQueueAdd type=button value="Add"/>';
    m += '</td>';
    m += '</tr>';
    m += '</table>';
    m += '</div>';

    m += '<div class=STrChOHeader>UPGRADE LIST</div>';
    m += '<table class=STrChOSectionTable>';
    m += '<tr><td colspan=4>';
    m += '<div id=STrChOChampQScroll style="position: static; width: 100%; height: 340px; overflow-x: auto; overflow-y: auto;">';
    m += '<div id=STrChOChampQDiv></div>';
    m += '</div>';
    m += '</td></tr>';
    m += '<tr><td colspan=4><input class=STrChOButton style="float: left;" id=STrChOChampClearQ type=button value="Clear Queue"></tr>';
    m += '</table>';
    m += '</div>';

    m += '</div>';

    t.mydiv.innerHTML = '<div>' + m + '</div>';

    document.getElementById('STrChOChampUpgraderSaveSettings').addEventListener('click', function () {
        SaveSettingsToFile(STrChOChampUpgradeData);
    }, false);

    document.getElementById('STrChOChampUpgraderLoadSettings').addEventListener('click', function () {
        var loader = document.getElementById('STrChOSettingsFile');
        loader.addEventListener('change', function () {
            LoadSettingsFromFile(STrChOChampUpgradeData, Tabs.champUpgrader);
        }, false);
        loader.click();
    }, false);

    t.refreshAetherDisplay();

    var header = document.getElementsByClassName('STrChOHeader');
    for (var head=0;head<header.length;head++) {
        header[head].addEventListener('click', sectionOpener, false);
    }

    document.getElementById('STrChOChampUpgradePower').addEventListener('click', function () {
        t.togglePower(this);
        t.show();
    }, false);

    document.getElementById('STrChOChampUseAutoTokens').addEventListener('change', function () {
        STrChOChampUpgradeData.useAutoTokens = document.getElementById('STrChOChampUseAutoTokens').checked;
        SAVESTrChOChampUpgradeData();
        if (STrChOChampUpgradeData.useAutoTokens) t.doAction();
    }, false);

    document.getElementById('STrChOChampUseAutoTokensMin').addEventListener('change', function () {
        STrChOChampUpgradeData.useAutoTokensMin = document.getElementById('STrChOChampUseAutoTokensMin').value;
        SAVESTrChOChampUpgradeData();
    }, false);

    document.getElementById('STrChOChampUseAutoTokensMax').addEventListener('change', function () {
        STrChOChampUpgradeData.useAutoTokensMax = document.getElementById('STrChOChampUseAutoTokensMax').value;
        SAVESTrChOChampUpgradeData();
    }, false);

    document.getElementById('STrChOChampHourglassLevelSpecific').addEventListener('change', function () {
        STrChOChampUpgradeData.hourglassLevelSpecific = document.getElementById('STrChOChampHourglassLevelSpecific').checked;
        SAVESTrChOChampUpgradeData();
        t.doAction();
    }, false);

    document.getElementById('STrChOChampHourglassQualitySpecific').addEventListener('change', function () {
        STrChOChampUpgradeData.hourglassQualitySpecific = document.getElementById('STrChOChampHourglassQualitySpecific').checked;
        SAVESTrChOChampUpgradeData();
        t.doAction();
    }, false);

    document.getElementById('STrChOChampOverrideSpeedUps').addEventListener('change', function () {
        STrChOChampUpgradeData.overrideSpeedUp = document.getElementById('STrChOChampOverrideSpeedUps').checked;
        SAVESTrChOChampUpgradeData();
        t.doAction();
    }, false);

    document.getElementById('STrChOChampUseWH').addEventListener('change', function () {
        STrChOChampUpgradeData.useWH = document.getElementById('STrChOChampUseWH').checked;
        SAVESTrChOChampUpgradeData();
        if (STrChOChampUpgradeData.useWH) t.doAction();
    }, false);

    document.getElementById('STrChOChampUseDH').addEventListener('change', function () {
        STrChOChampUpgradeData.useDH = document.getElementById('STrChOChampUseDH').checked;
        SAVESTrChOChampUpgradeData();
        if (STrChOChampUpgradeData.useDH) t.doAction();
    }, false);

    document.getElementById('STrChOChampUseEH').addEventListener('change', function () {
        STrChOChampUpgradeData.useEH = document.getElementById('STrChOChampUseEH').checked;
        SAVESTrChOChampUpgradeData();
        if (STrChOChampUpgradeData.useEH) t.doAction();
    }, false);

    document.getElementById('STrChOChampUseSH').addEventListener('change', function () {
        STrChOChampUpgradeData.useSH = document.getElementById('STrChOChampUseSH').checked;
        SAVESTrChOChampUpgradeData();
        if (STrChOChampUpgradeData.useSH) t.doAction();
    }, false);

    document.getElementById('STrChOChampUseKH').addEventListener('change', function () {
        STrChOChampUpgradeData.useKH = document.getElementById('STrChOChampUseKH').checked;
        SAVESTrChOChampUpgradeData();
        if (STrChOChampUpgradeData.useKH) t.doAction();
    }, false);

    document.getElementById('STrChOChampUseGH').addEventListener('change', function () {
        STrChOChampUpgradeData.useGH = document.getElementById('STrChOChampUseGH').checked;
        SAVESTrChOChampUpgradeData();
        if (STrChOChampUpgradeData.useGH) t.doAction();
    }, false);

    document.getElementById('STrChOChampUseMH').addEventListener('change', function () {
        STrChOChampUpgradeData.useMH = document.getElementById('STrChOChampUseMH').checked;
        SAVESTrChOChampUpgradeData();
        if (STrChOChampUpgradeData.useMH) t.doAction();
    }, false);

    document.getElementById('STrChOChampUseAH').addEventListener('change', function () {
        STrChOChampUpgradeData.useAH = document.getElementById('STrChOChampUseAH').checked;
        SAVESTrChOChampUpgradeData();
        if (STrChOChampUpgradeData.useAH) t.doAction();
    }, false);

    document.getElementById('STrChOChampUseQuality').addEventListener('change', function () {
        STrChOChampUpgradeData.useQuality = document.getElementById('STrChOChampUseQuality').value;
        SAVESTrChOChampUpgradeData();
    }, false);

    document.getElementById('STrChOChampUseLevel').addEventListener('change', function () {
        STrChOChampUpgradeData.useLevel = document.getElementById('STrChOChampUseLevel').value;
        SAVESTrChOChampUpgradeData();
    }, false);

    document.getElementById('STrChOChampSpeedUp').addEventListener('change', function () {
        STrChOChampUpgradeData.useSpeedUp = document.getElementById('STrChOChampSpeedUp').value;
        SAVESTrChOChampUpgradeData();
        t.doAction();
    }, false);

    document.getElementById('STrChOChampHourglassLevel').addEventListener('change', function () {
        STrChOChampUpgradeData.hourglassLevel = document.getElementById('STrChOChampHourglassLevel').value;
        SAVESTrChOChampUpgradeData();
        t.doAction();
    }, false);

    document.getElementById('STrChOChampHourglassQuality').addEventListener('change', function () {
        STrChOChampUpgradeData.hourglassQuality = document.getElementById('STrChOChampHourglassQuality').value;
        SAVESTrChOChampUpgradeData();
        t.doAction();
    }, false);

    document.getElementById('STrChOChampUseLOM').addEventListener('change', function () {
        STrChOChampUpgradeData.useLOM = document.getElementById('STrChOChampUseLOM').checked;
        SAVESTrChOChampUpgradeData();
        if (STrChOChampUpgradeData.useLOM) t.doAction();
    }, false);

    document.getElementById('STrChOChampUseGOM').addEventListener('change', function () {
        STrChOChampUpgradeData.useGOM = document.getElementById('STrChOChampUseGOM').checked;
        SAVESTrChOChampUpgradeData();
        if (STrChOChampUpgradeData.useGOM) t.doAction();
    }, false);

    document.getElementById('STrChOChampUseET').addEventListener('change', function () {
        STrChOChampUpgradeData.useET = document.getElementById('STrChOChampUseET').checked;
        SAVESTrChOChampUpgradeData();
        if (STrChOChampUpgradeData.useET) t.doAction();
    }, false);

    document.getElementById('STrChOChampUseJT').addEventListener('change', function () {
        STrChOChampUpgradeData.useJT = document.getElementById('STrChOChampUseJT').checked;
        SAVESTrChOChampUpgradeData();
        if (STrChOChampUpgradeData.useJT) t.doAction();
    }, false);

    document.getElementById('STrChOChampUseST').addEventListener('change', function () {
        STrChOChampUpgradeData.useST = document.getElementById('STrChOChampUseST').checked;
        SAVESTrChOChampUpgradeData();
        if (STrChOChampUpgradeData.useST) t.doAction();
    }, false);

    document.getElementById('STrChOChampQueueAdd').addEventListener('click', function () {
        t.addChampQueue();
    }, false);

    document.getElementById('STrChOChampOneItem').addEventListener('change', function () {
        STrChOChampQueueData.oneItem = document.getElementById('STrChOChampOneItem').checked;
        SAVESTrChOChampQueueData();
    });

    document.getElementById('STrChOChampClearQ').addEventListener('click', function () {
        STrChOChampQueueData.list = [];
        SAVESTrChOChampQueueData();
        t.buildChampQueueDisplay();
    }, false);

    document.getElementById('STrChOChampEnhanceAddAllQuality').addEventListener('click', function () {
        var low_level = parseInt(document.getElementById('STrChOChampEnhanceAllQuality').value);
        var high_level = parseInt(document.getElementById('STrChOChampEnhanceAllQualityTo').value);
        if (low_level >= high_level) return;
        for (ChampId in uW.kocChampionItems) {
            var ChampItem = uW.kocChampionItems[ChampId];
            if (ChampItem.rarity == low_level) {
                var qItem = new QueueItem();
                qItem.item = ChampId;
                qItem.action = "enhance"
                qItem.level = high_level
                STrChOChampQueueData.list.push(qItem);
            }
        }
        SAVESTrChOChampQueueData();
        t.buildChampQueueDisplay();
    }, false);

    document.getElementById('STrChOChampUpgradeAddAllLevelMax').addEventListener('click', function () {
        var high_level = parseInt(document.getElementById('STrChOChampUpgradeAddAllLevelMaxTo').value);
        for (ChampId in uW.kocChampionItems) {
            var ChampItem = uW.kocChampionItems[ChampId];
            if (ChampItem.level < high_level) {
                var qItem = new QueueItem();
                qItem.item = ChampId;
                qItem.action = "upgrade"
                qItem.level = high_level
                STrChOChampQueueData.list.push(qItem);
            }
        }
        SAVESTrChOChampQueueData();
        t.buildChampQueueDisplay();
    }, false);

    document.getElementById('STrChOChampUpgradeAddAllLevel').addEventListener('click', function () {
        var low_level = parseInt(document.getElementById('STrChOChampUpgradeAllLevel').value);
        var high_level = parseInt(document.getElementById('STrChOChampUpgradeAllLevelTo').value);

        if (low_level >= high_level) return;
        for (ChampId in uW.kocChampionItems) {
            var ChampItem = uW.kocChampionItems[ChampId];
            if (ChampItem.level == low_level) {
                var qItem = new QueueItem();
                qItem.item = ChampId;
                qItem.action = "upgrade"
                qItem.level = high_level
                STrChOChampQueueData.list.push(qItem);
            }
        }
        SAVESTrChOChampQueueData();
        t.buildChampQueueDisplay();
    }, false);

    if (STrChOChampUpgradeData.active)
        t.setStatus("Loading ....");
    else
        t.setStatus("Powered Off");

    t.startTimer();

    t.buildChampLevelWidget();
    t.buildChampQueueDisplay();

    document.getElementById('STrChOChampAction').addEventListener('change', function () {
        t.buildChampLevelWidget();
    }, false);

    Tabs.champPresets.paintTags();


  },

  startTimer: function () {
    var t = Tabs.champUpgrader;
    var delay = 2 + Math.random() * 8;
    if (Seed.queue_champion == null) {
        for (champId in uW.kocChampionItems) {
            var champItem = uW.kocChampionItems[champId];
            if (champItem.status == CM.CHAMPION.STATUS_REPAIRING_ENHANCE || champItem.status == CM.CHAMPION.STATUS_REPAIRING_UPGRADE) {
                Seed.queue_champion = {};
                Seed.queue_champion.start = parseInt(champItem.start);
                Seed.queue_champion.end = parseInt(champItem.eta);
                Seed.queue_champion.itemId = champItem.equipmentId;
                break;
            }
        }
    }

    if (Seed.queue_champion != null && Seed.queue_champion.end != null) {
        var repairTimeLeft = Seed.queue_champion.end - unixTime();
        t.repairEnd = Seed.queue_champion.end;
        t.repairId = Seed.queue_champion.itemId;
        var n = new Date(t.repairEnd * 1000);

        t.setStatus("Waiting until " + n.toLocaleTimeString() + " for repair to complete.  Item: " + uW.kocChampionItems[t.repairId].name);

        if (STrChOChampUpgradeData.useAH || STrChOChampUpgradeData.useGH || STrChOChampUpgradeData.useKH || STrChOChampUpgradeData.useMH || STrChOChampUpgradeData.useSH || STrChOChampUpgradeData.useWH || STrChOChampUpgradeData.useDH || STrChOChampUpgradeData.useEH || (STrChOChampUpgradeData.overrideSpeedUp && STrChOChampUpgradeData.useSpeedUp > 0)) {
            var champItem = uW.kocChampionItems[t.repairId];
            var STrChOChampQuality = champItem.rarity;
            var STrChOChampLevel = champItem.level;
            var useThoseSpeedups = true;
            if (STrChOChampUpgradeData.hourglassQualitySpecific && STrChOChampQuality < STrChOChampUpgradeData.hourglassQuality) useThoseSpeedups = false;
            if (STrChOChampUpgradeData.hourglassLevelSpecific && STrChOChampLevel < STrChOChampUpgradeData.hourglassLevel) useThoseSpeedups = false;
            if (STrChOChampUpgradeData.overrideSpeedUp) useThoseSpeedups = true;
            if (useThoseSpeedups) {
                t.doingSpeedup = true;
                setTimeout(function () { t.doSpeedup(); }, 2000);
            }
        }

        setTimeout(t.clearRepair, (repairTimeLeft + 1) * 5000);
        if (repairTimeLeft > 0) delay += repairTimeLeft;
    }

    if (t.timerH == null)
        t.timerH = setTimeout(t.doAction, delay * 1000);


  },

	hide: function () {},

  refreshAetherDisplay : function () {
      document.getElementById('STrChOChampAetherDisplay').innerHTML = displayCityAstone();
  },


	show: function () {
		var t = Tabs.champUpgrader;
        t.startTimer();
        t.refreshAetherDisplay();
        t.buildChampQueueDisplay();
	},

  doAction: function () {
    var t = Tabs.champUpgrader;
    if (STrChOChampRepairData.active) {
        t.setStatus('Waiting for repair tab to finish...');
        return;
    }

    var retryTime = STrChOGeneralOptions.retryInterval;

    try {
        // check if repair is done
        var ti = t.clearRepair();
        if (ti <= 0) {
            // repair is done
            if (STrChOChampQueueData.oneItem || (STrChOChampQueueData.doingRepairs == true)) {
                for (queueItems in STrChOChampQueueData.list) {
                    var qItem = STrChOChampQueueData.list[queueItems];
                    if (!qItem) continue;

                    var champItem = uW.kocChampionItems[qItem.item];

                    if ((champItem == null) || (STrChOChampQueueData.list[queueItems].status == "complete")) continue;

                    if (champItem.status == CM.CHAMPION.STATUS_BROKEN_UPGRADE || champItem.status == CM.CHAMPION.STATUS_BROKEN_ENHANCE) {
                        t.doRepair(champItem.equipmentId);
                        clearTimeout(t.timerH);
                        t.timerH = setTimeout(t.doAction, retryTime * 1000);
                        return;
                    } else if (STrChOChampQueueData.oneItem) {
                        break;
                    }
                }
                //}
            }

            // all repairs complete
            STrChOChampQueueData.doingRepairs = false;
            // set the index
            t.selectNext();
            SAVESTrChOChampQueueData();

            // if we reach the end of the queue, start repair cycle
            if (STrChOChampQueueData.index < 0) {
                t.setStatus("Reached end of queue.")
                t.setResult("");
                if (!STrChOChampUpgradeData.active) t.setStatus("Powered Off");
                STrChOChampQueueData.doingRepairs = true;
                SAVESTrChOChampQueueData();
                clearTimeout(t.timerH);
                t.timerH = setTimeout(t.doAction, retryTime * 1000);
                return;
            }
            // upgrade/enhance next item
            var qItem = STrChOChampQueueData.list[STrChOChampQueueData.index];

            if (qItem) {
                if (qItem.action == "enhance")
                    t.doEnhance(qItem.item);
                else
                    t.doUpgrade(+qItem.item, false);
            }
        } else {
            // come back after repair is complete
            retryTime = ti + 5;
            var n = new Date(t.repairEnd * 1000);
            t.setStatus("Waiting until " + n.toLocaleTimeString() + " for repair to complete.  Item: " + uW.kocChampionItems[t.repairId].name);
            if (STrChOChampUpgradeData.useSH || STrChOChampUpgradeData.useKH || STrChOChampUpgradeData.useGH || STrChOChampUpgradeData.useMH || STrChOChampUpgradeData.useAH || STrChOChampUpgradeData.useWH || STrChOChampUpgradeData.useDH || STrChOChampUpgradeData.useEH || (STrChOChampUpgradeData.overrideSpeedUp && STrChOChampUpgradeData.useSpeedUp > 0)) {
                var champItem = uW.kocChampionItems[t.repairId];
                var STrChOChampQuality = champItem.rarity;
                var STrChOChampLevel = champItem.level;
                var useThoseSpeedups = true;
                if (STrChOChampUpgradeData.hourglassQualitySpecific && STrChOChampQuality < STrChOChampUpgradeData.hourglassQuality) useThoseSpeedups = false;
                if (STrChOChampUpgradeData.hourglassLevelSpecific && STrChOChampLevel < STrChOChampUpgradeData.hourglassLevel) useThoseSpeedups = false;
                if (STrChOChampUpgradeData.overrideSpeedUp) useThoseSpeedups = true;
                if (useThoseSpeedups) {
                    t.doingSpeedup = true;
                    setTimeout(function () { t.doSpeedup(); }, 2000);
                }
                retryTime = 1;
            }
        }
        //CM.ChampView.renderInventory(uW.kocChampionItems);
    } catch (e) {
    }
    // recycle
    clearTimeout(t.timerH);
    t.timerH = setTimeout(t.doAction, retryTime * 1000);
  },

  doSpeedup: function () {
    var t = Tabs.champUpgrader;

    var endTime = t.repairEnd;
    var startTime = unixTime();
    var secondsForRepair = endTime - startTime;
    var divId = "";

    t.speedup = 0;

    if (secondsForRepair > 0 && STrChOChampUpgradeData.overrideSpeedUp && STrChOChampUpgradeData.useSpeedUp > 0) {

        t.speedup = STrChOChampUpgradeData.useSpeedUp;

    } else {

        if (t.speedup == 0 && secondsForRepair >= HOURGLASSES_TIME_MIN_THRESHOLD.day25 && STrChOChampUpgradeData.useEH && uW.ksoItems[8].count > 0) { t.speedup = 8; }
        if (t.speedup == 0 && secondsForRepair >= HOURGLASSES_TIME_MIN_THRESHOLD.hour24 && STrChOChampUpgradeData.useDH && uW.ksoItems[7].count > 0) { t.speedup = 7; }
        if (t.speedup == 0 && secondsForRepair >= HOURGLASSES_TIME_MIN_THRESHOLD.hour15 && STrChOChampUpgradeData.useWH && uW.ksoItems[6].count > 0) { t.speedup = 6; }
        if (t.speedup == 0 && secondsForRepair >= HOURGLASSES_TIME_MIN_THRESHOLD.hour8 && STrChOChampUpgradeData.useAH && uW.ksoItems[5].count > 0) { t.speedup = 5; }
        if (t.speedup == 0 && secondsForRepair >= HOURGLASSES_TIME_MIN_THRESHOLD.hour25 && STrChOChampUpgradeData.useMH && uW.ksoItems[4].count > 0) { t.speedup = 4; }
        if (t.speedup == 0 && secondsForRepair >= HOURGLASSES_TIME_MIN_THRESHOLD.hour1 && STrChOChampUpgradeData.useGH && uW.ksoItems[3].count > 0) { t.speedup = 3; }
        if (t.speedup == 0 && secondsForRepair >= HOURGLASSES_TIME_MIN_THRESHOLD.minute15 && STrChOChampUpgradeData.useKH && uW.ksoItems[2].count > 0) { t.speedup = 2; }
        if (t.speedup == 0 && secondsForRepair >= HOURGLASSES_TIME_MIN_THRESHOLD.minute1 && STrChOChampUpgradeData.useSH && uW.ksoItems[1].count > 0) { t.speedup = 1; }
    }

    switch (t.speedup) {
        case "1":
        case 1:
            secondsForRepair -= HOURGLASSES_TIME.minute1;
            divId = 'STrChOChampUseSHLabel';
            break;
        case "2":
        case 2:
            secondsForRepair -= HOURGLASSES_TIME.minute15;
            divId = 'STrChOChampUseKHLabel';
            break;
        case "3":
        case 3:
            secondsForRepair -= HOURGLASSES_TIME.hour1;
            divId = 'STrChOChampUseGHLabel';
            break;
        case "4":
        case 4:
            secondsForRepair -= HOURGLASSES_TIME.hour25;
            divId = 'STrChOChampUseMHLabel';
            break;
        case "5":
        case 5:
            secondsForRepair -= HOURGLASSES_TIME.hour8;
            divId = 'STrChOChampUseAHLabel';
            break;
        case "6":
        case 6:
            secondsForRepair -= HOURGLASSES_TIME.hour15;
            divId = 'STrChOChampUseWHLabel';
            break;
        case "7":
        case 7:
            secondsForRepair -= HOURGLASSES_TIME.hour24;
            divId = 'STrChOChampUseDHLabel';
            break;
        case "8":
        case 8:
            secondsForRepair -= HOURGLASSES_TIME.day25;
            divId = 'STrChOChampUseEHLabel';
            break;
    }

    if (t.speedup != 0) {
        t.setResult('Used ' + uW.ksoItems[t.speedup].name);
        var divCount = uW.ksoItems[t.speedup].count - 1;
        var divSpeedups = document.getElementById(divId);
        divSpeedups.innerHTML = divCount;
        uW.modal_speedup_apply("champion", t.speedup, t.repairId);

        if (secondsForRepair <= 0) {
            secondsForRepair = 0;
            endTime = startTime;
            t.clearTimerH = setTimeout(t.clearRepair, 1000);
            t.buildChampQueueDisplay();
        } else {
            endTime = unixTime() + secondsForRepair;
            t.repairEnd = endTime;
            var n = new Date(t.repairEnd * 1000);
            var item = uW.kocChampionItems[t.repairId];
            t.setStatus("Repair begun ... Repair will be complete at " + n.toLocaleTimeString() + ". Item: " + item.name);
            t.clearTimerH = setTimeout(t.clearRepair, secondsForRepair * 1000);
            t.buildChampQueueDisplay();
        }
        t.repairEnd = endTime;
        setTimeout(function () { t.doSpeedup(); }, 1000);
    }
  },

  selectNext: function () {

      if (STrChOChampQueueData.index >= STrChOChampQueueData.list.length) STrChOChampQueueData.index = 0;
      if (STrChOChampQueueData.index < 0) STrChOChampQueueData.index = 0;

      // for single item mode, always start from the top
      if (STrChOChampQueueData.oneItem) STrChOChampQueueData.index = 0;

      var l = STrChOChampQueueData.list.length;
      for (i = STrChOChampQueueData.index; i < l; i++) {
          var item = STrChOChampQueueData.list[i];
          if (!item) continue;
          var champItem = uW.kocChampionItems[item.item];
          if ((STrChOChampQueueData.list[i].status != "complete")
                      && (champItem != null)
                      && !(champItem.status == CM.CHAMPION.STATUS_BROKEN_ENHANCE || champItem.status == CM.CHAMPION.STATUS_BROKEN_UPGRADE)) {
              if (((item.action == "enhance") && (item.level <= champItem.rarity))
                          || ((item.action == "upgrade") && (item.level <= champItem.level))) {
                  item.status = "complete";
              } else {
                  STrChOChampQueueData.index = i;
                  return;
              }
          }
      }

      // if we get here, the queue is complete
      STrChOChampQueueData.index = -1;
  },

  doEnhance: function (eItemId) {
      var t = Tabs.champUpgrader;
      try {
          if (STrChOChampUpgradeData.active == false || eItemId == 0) {
              t.setStatus("Powered Off");
              return;
          }
          var champItem = uW.kocChampionItems[eItemId];

          if (!champItem) return;

          if (champItem.status == CM.CHAMPION.STATUS_BROKEN_ENHANCE || champItem.status == CM.CHAMPION.STATUS_BROKEN_UPGRADE) {
              // repair and then try again later
              t.doRepair(eItemId);
              return;
          }

          var num_city = pickAetherUseCity();
          if (num_city < 0) {
              t.setStatus("Not enough aetherstones to enhance.  Minimum of " + STrChOGeneralOptions.minStones + " needed.  Waiting for more ...");
              return;
          }

          var z = CM.WorldSettings.getSettingAsObject("CE_ENHANCE_AETHERSTONE_MAP");
          var w = z[parseInt(champItem.rarity) + 1].Aetherstones;

          if (w > parseInt(Seed.resources["city" + Seed.cities[num_city][0]]["rec5"][0])) {
              t.setStatus("Not enough aetherstones to enhance.");
              return;
          }

          var qI = STrChOChampQueueData.list[STrChOChampQueueData.index];
          if (qI) {

              qI.triesTotal++;
              qI.triesThis++;
          }

          var chanceItem = 0;

          var useDiv = '';

          if (STrChOChampUpgradeData.active && STrChOChampQueueData.index != -1 && STrChOChampUpgradeData.useQuality <= champItem.rarity) {

              if (STrChOChampUpgradeData.useLOM) {
                  if (Seed.items['i21001'] > 0) {
                      chanceItem = 21001;
                      useDiv = 'STrChOChampUseLOMLabel';
                  }
              }

              if (STrChOChampUpgradeData.useGOM) {
                  if (Seed.items['i21002'] > 0) {
                      chanceItem = 21002;
                      useDiv = 'STrChOChampUseGOMLabel';
                  }
              }
              //if (buffItemId) CM.InventoryView.removeItemFromInventory(buffItemId);

          }

          if (useDiv != '') document.getElementById(useDiv).innerHTML = uW.ksoItems[chanceItem].count;

          var params = uW.Object.clone(ajfx);
          params.action = '4';
          params.cityId = Seed.cities[num_city][0];
          params.eid = eItemId;
          params.chanceItem = chanceItem;
          params.aetherstones = w;
          params.gems = 0;

          t.setStatus("Sending enhance request");
          new AjaxRequest(uW.g_ajaxpath + 'ajax/ceEquipmentManagerAjax.php' + uW.g_ajaxsuffix, {
              method: "post",
              parameters: params,
              loading: true,
              onSuccess: function (transport) {
                  try {
                      var rslt = eval("(" + transport.responseText + ")");
                      if (rslt.ok) {
                          Seed.resources["city" + Seed.cities[num_city][0]]["rec5"][0] = Seed.resources["city" + Seed.cities[num_city][0]]["rec5"][0] - rslt.aetherstones;
                          if (rslt.gems > 0) {
                              ActionLog('Upgrader accidentally spent gems!  Upgrader turned off');
                              t.setStatus("Error ... shutting down");
                              STrChOChampUpgradeData.active = false;
                              SAVESTrChOChampUpgradeData();
                          }

                          if (rslt.itemConsumed.itemId != "0") uW.ksoItems[rslt.itemConsumed.itemId].subtract()

                          Seed.player.might += rslt.mightGain;
                          document.getElementById('topnav_might').innerHTML = Seed.player.might;

                          if (champItem.rarity != parseInt(rslt.rarity)) {
                              STrChOChampUpgradeStats.enhanceSuccess[champItem.rarity][champItem.level]++;
                              SAVESTrChOChampUpgradeStats();
                              champItem.rarity = rslt.rarity;
                              champItem.name = champItem.createName();
                              t.show();
                              t.setResult("Enhance successful.  " + addCommas(rslt.aetherstones) + " aetherstones used.");
                              t.refreshAetherDisplay();
                              t.setStatus("Attempting next action");
                              CM.sounds.play("ch_success_build");
                              // update the cost line
                              var qItem = STrChOChampQueueData.list[STrChOChampQueueData.index];
                              if (qItem) {
                                  var now = new Date();

                                  qItem.lastUpgrade = "Enhanced to " + champCardQualities[champItem.rarity] + " " + now.toDateString().substring(3, 10) + " " + now.toTimeString().substring(0, 8) + " in " + qItem.triesThis + " attempts";
                                  if (!qItem.upgrades) qItem.upgrades = [];
                                  qItem.upgrades.push(qItem.lastUpgrade);

                                  var msg = 'Enhanced ' + uW.kocChampionItems[eItemId].name + ' [ ' + eItemId + '] to quality ' + rslt.rarity + " in " + qItem.triesThis + " attempts. " + qItem.triesTotal + " total attempts for this item.";
                                  if (STrChOGeneralOptions.whisperToMe) sendChat("/" + Seed.player.name + ' ' + msg);
                                  if (STrChOGeneralOptions.sendToInbox) sendComposedMail(Seed.player.name, 'CHAMPION: Enhance Success: ' + uW.kocChampionItems[eItemId].name, msg);
                                  SuccessLog(msg);

                                  if (qItem.level <= champItem.rarity) {
                                      qItem.status = "complete";
                                      STrChOChampUpgradeData.newUpgradeState = 2;
                                  }
                                  else {
                                      var now = new Date();
                                      qItem.status = "Partially enhanced";
                                      qItem.triesLast = qItem.triesThis;
                                      qItem.triesThis = 0;
                                      if (STrChOChampUpgradeData.newUpgradeState != 2) STrChOChampUpgradeData.newUpgradeState = 1;
                                  }
                                  SAVESTrChOChampUpgradeData();
                                  setUpgradeColor();
                              }
                              SAVESTrChOChampQueueData();
                              t.buildChampQueueDisplay();
                              clearTimeout(Tabs.champUpgrader.timerH);
                              t.timerH = setTimeout(t.doAction, 10 * 1000);
                          }
                          else {
                              STrChOChampUpgradeStats.enhanceFailure[champItem.rarity][champItem.level]++;
                              SAVESTrChOChampUpgradeStats();
                              ActionLog('Enhance failed Champion item ' + uW.kocChampionItems[eItemId].name);
                              if (rslt.broken == "yes") {
                                  champItem.status = CM.CHAMPION.STATUS_BROKEN_ENHANCE;
                              }

                              champItem.name = champItem.createName();
                              t.setResult("Enhance failed.  " + addCommas(rslt.aetherstones) + " aetherstones used");
                              t.refreshAetherDisplay();
                              var qItem = STrChOChampQueueData.list[STrChOChampQueueData.index];
                              if (qItem) if (qItem.status == "not started") qItem.status = "started";
                              SAVESTrChOChampQueueData();
                              t.buildChampQueueDisplay();
                              clearTimeout(t.timerH);
                              t.timerH = setTimeout(t.doAction, 10 * 1000);
                          }
                      }
                      else {
                          if (rslt.feedback)
                              t.setStatus(rslt.feedback);
                          else
                              t.setStatus("Unable to enhance at this time ... waiting for next cycle");

                      }
                  } catch (e) {
                  }
                  return;
              },
              onFailure: function (rst) {
                  t.setStatus("Unable to send enhance request.  Waiting for next cycle");
                  return;
              }
          });
      } catch (e) {


      }
      return;
  },

  doUpgrade: function (uItemId, bypass) {

      var t = Tabs.champUpgrader;

      var champItem = uW.kocChampionItems[uItemId];

      if (uItemId == 0 || champItem == null) {
          t.setStatus("Item not found.");
          return;
      }

      if ((STrChOChampUpgradeData.active == false) && (bypass != true)) {
          t.setStatus("Powered Off");
          return;
      }

      if (bypass == true && t.deleting != true) {
          // delete cycle has been canceled.  Don't upgrade this item
          return;
      }

      if (champItem.status == CM.CHAMPION.STATUS_BROKEN_UPGRADE || champItem.status == CM.CHAMPION.STATUS_BROKEN_ENHANCE) {
          // repair and then try again later
          t.doRepair(uItemId);
          return;
      }

      if (champItem.status == CM.CHAMPION.STATUS_REPAIRING_ENHANCE || champItem.status == CM.CHAMPION.STATUS_REPAIRING_UPGRADE) {
          t.setStatus("Item is still being repaired");
          return;
      }

      var num_city = pickAetherUseCity();
      if (num_city < 0) {
          t.setStatus("Not enough aetherstones to upgrade.  Minimum of " + STrChOGeneralOptions.minStones + " needed.  Waiting for more ...");
          return;
      }

      var z = CM.WorldSettings.getSettingAsObject("CE_UPGRADE_AETHERSTONE_MAP");
      var w = z[parseInt(champItem.level) + 1].Aetherstones;


      if (w > Seed.resources["city" + Seed.cities[num_city][0]]["rec5"][0]) {
          t.setStatus("Not enough aetherstones to upgrade.");
          return;
      }

      if (bypass != true) {
          var qI = STrChOChampQueueData.list[STrChOChampQueueData.index];
          if (qI) {
              qI.triesTotal++;
              qI.triesThis++;
          }

          t.setStatus("Sending upgrade request ...");
      }

      var chanceItem = 0;

      var useDiv = '';

      if (STrChOChampUpgradeData.active && STrChOChampQueueData.index != -1 && STrChOChampUpgradeData.useLevel <= champItem.level) {

          if (STrChOChampUpgradeData.useET) {
              if (Seed.items['i21058'] > 0) {
                  chanceItem = 21058;
                  useDiv = 'STrChOChampUseETLabel';
              }
          }

          if (STrChOChampUpgradeData.useST) {
              if (Seed.items['i21052'] > 0) {
                  chanceItem = 21052;
                  useDiv = 'STrChOChampUseSTLabel';
              }
          }

          if (STrChOChampUpgradeData.useJT) {
              if (Seed.items['i21051'] > 0) {
                  chanceItem = 21051;
                  useDiv = 'STrChOChampUseJTLabel';
              }
          }
      }

      if (STrChOChampUpgradeData.useAutoTokens) {
          if (STrChOChampUpgradeData.useAutoTokensMin <= STrChOChampUpgradeData.useAutoTokensMax) {
              var champLevel = champItem.level;
              if (champLevel >= STrChOChampUpgradeData.useAutoTokensMin &&
                  champLevel < STrChOChampUpgradeData.useAutoTokensMax) {
                  var nextForgedID = getNextAvailableForged(champItem);
                  if (nextForgedID != 0) {
                      chanceItem = nextForgedID;
                      ActionLog('Using ' + uW.ksoItems[chanceItem].name + ' on item: ' + champItem.name);
                  }
              }
          }
      }

      if (useDiv != '') document.getElementById(useDiv).innerHTML = uW.ksoItems[chanceItem].count;

      var params = uW.Object.clone(ajfx);

      params.action = '5';
      params.cityId = Seed.cities[num_city][0];
      params.eid = uItemId;
      params.chanceItem = chanceItem;
      params.aetherstones = w;
      params.gems = 0;


      new AjaxRequest(uW.g_ajaxpath + "ajax/ceEquipmentManagerAjax.php" + uW.g_ajaxsuffix, {
          method: "post",
          parameters: params,
          loading: true,
          onSuccess: function (transport) {
              try {
                  var rslt = eval("(" + transport.responseText + ")");
                  if (rslt.ok) {

                      Seed.resources["city" + Seed.cities[num_city][0]]["rec5"][0] = Seed.resources["city" + Seed.cities[num_city][0]]["rec5"][0] - parseInt(rslt.aetherstones);
                      if (rslt.gems > 0) {
                          t.setStatus("Error .... Shutting down.");
                          ActionLog('Upgrader accidentally spent gems!  Upgrader turned off');
                          STrChOChampUpgradeData.active = false;
                          SAVESTrChOChampUpgradeData();
                      }

                      if (rslt.itemConsumed.itemId != "0") uW.ksoItems[rslt.itemConsumed.itemId].subtract()

                      Seed.player.might += rslt.mightGain;
                      document.getElementById('topnav_might').innerHTML = Seed.player.might;

                      if (parseInt(rslt.level) != champItem.level) {
                          STrChOChampUpgradeStats.upgradeSuccess[champItem.rarity][champItem.level]++;
                          SAVESTrChOChampUpgradeStats();
                          champItem.level = rslt.level;
                          champItem.name = champItem.createName();

                          if (bypass != true) {
                              t.show();

                              t.setResult("Upgrade successful.  " + addCommas(rslt.aetherstones) + " aetherstones used.");
                              t.refreshAetherDisplay();
                              t.setStatus("Attempting next upgrade");
                              CM.sounds.play("ch_success_build");

                              var qItem = STrChOChampQueueData.list[STrChOChampQueueData.index];
                              if (qItem) {
                                  var now = new Date();
                                  qItem.lastUpgrade = "Upgraded to +" + champItem.level + " " + now.toDateString().substring(3, 10) + " " + now.toTimeString().substring(0, 8) + " in " + qItem.triesThis + " attempts";

                                  if (!qItem.upgrades) qItem.upgrades = [];
                                  qItem.upgrades.push(qItem.lastUpgrade);

                                  var msg = 'Upgraded ' + uW.kocChampionItems[uItemId].name + ' [' + uItemId + '] to level ' + rslt.level + " in " + qItem.triesThis + " attempts. " + qItem.triesTotal + " total attempts for this item.";
                                  if (STrChOGeneralOptions.whisperToMe) sendChat("/" + Seed.player.name + ' ' + msg);
                                  if (STrChOGeneralOptions.sendToInbox) sendComposedMail(Seed.player.name, 'CHAMPION: Upgrade Success : ' + uW.kocChampionItems[uItemId].name, msg);
                                  SuccessLog(msg);
                                  if (qItem.level <= champItem.level) {
                                      qItem.status = "complete";
                                      STrChOChampUpgradeData.newUpgradeState = 2;
                                  }
                                  else {
                                      var now = new Date();
                                      qItem.status = "Partially upgraded";
                                      qItem.triesLast = qItem.triesThis;
                                      qItem.triesThis = 0;
                                      if (STrChOChampUpgradeData.newUpgradeState != 2) STrChOChampUpgradeData.newUpgradeState = 1;
                                  }
                                  SAVESTrChOChampUpgradeData();
                                  setUpgradeColor();
                              }
                              SAVESTrChOChampQueueData();
                              t.buildChampQueueDisplay();
                              clearTimeout(t.timerH);
                              t.timerH = setTimeout(t.doAction, 10 * 1000);

                          }
                      }
                      else {
                          STrChOChampUpgradeStats.upgradeFailure[champItem.rarity][champItem.level]++;
                          SAVESTrChOChampUpgradeStats();
                          ActionLog('Upgrade failed Champion item ' + uW.kocChampionItems[uItemId].name);
                          if (rslt.broken == "yes") champItem.status = CM.CHAMPION.STATUS_BROKEN_UPGRADE;
                          champItem.name = champItem.createName();
                          if (bypass != true) {
                              if (rslt.feedback) {
                                  t.setResult(rslt.feedback);
                              } else {
                                  t.setResult("Upgrade failed.  " + addCommas(rslt.aetherstones) + " aetherstones used");
                                  t.refreshAetherDisplay();
                              }
                              var qItem = STrChOChampQueueData.list[STrChOChampQueueData.index];
                              if (qItem.status == "not started") qItem.status = "started";
                              SAVESTrChOChampQueueData();
                              t.buildChampQueueDisplay();
                              clearTimeout(t.timerH);
                              t.timerH = setTimeout(t.doAction, 10 * 1000);
                          }
                      }
                      return;
                  }
                  else {
                      if (bypass != true) {
                          t.setResult(rslt.feedback);
                      }
                  }
              } catch (e) {
              }
              return;
          },
          onFailure: function (rrr) {
              t.setStatus("Unable to transmitt upgrade request.  Waiting for next cycle.");
              return;
          }
      });

      return;
  },

  doRepair: function (rItemId) {
      var t = Tabs.champUpgrader;
      var params = uW.Object.clone(ajfx);

      if (!STrChOChampUpgradeData.active || rItemId == 0 || uW.kocChampionItems[rItemId] == null) {
          t.setStatus("Powered Off");
          return; //repair is turned off
      }

      var theItem = uW.kocChampionItems[rItemId];

      params.action = "6";
      params.eid = rItemId;
      params.cityId = uW.currentcityid;
      params.gems = 0;

      new AjaxRequest(uW.g_ajaxpath + "ajax/ceEquipmentManagerAjax.php" + uW.g_ajaxsuffix, {
          method: "post",
          parameters: params,
          loading: true,
          onSuccess: function (transport) {
              var rslt = eval("(" + transport.responseText + ")");
              if (rslt.ok) {
                  var item = uW.kocChampionItems[rslt.equipmentId];
                  ActionLog('Starting repair for Champion item ' + item.name);
                  if (!Seed.queue_champion) Seed.queue_champion = {};
                  Seed.queue_champion.itemId = rslt.equipmentId;
                  Seed.queue_champion.start = parseInt(rslt.start);
                  Seed.queue_champion.end = parseInt(rslt.eta);
                  t.repairId = parseInt(rslt.equipmentId);
                  t.repairEnd = rslt.eta;
                  var n = new Date(t.repairEnd * 1000);
                  t.setStatus("Repair begun ... Repair will be complete at " + n.toLocaleTimeString() + ". Item: " + item.name);
                  var x = rslt.eta - unixTime();
                  t.clearTimerH = setTimeout(t.clearRepair, (x + 1) * 1000);
                  if (item.status == CM.CHAMPION.STATUS_BROKEN_ENHANCE)
                      item.status = CM.CHAMPION.STATUS_REPAIRING_ENHANCE;
                  else
                      item.status = CM.CHAMPION.STATUS_REPAIRING_UPGRADE;
                  t.buildChampQueueDisplay();
              }
              else {
                  // regrab the end times in case this is caused by a manual repair
                  if (Seed.queue_champion && Seed.queue_champion.end && Seed.queue_champion.itemId) {
                      t.repairEnd = Seed.queue_champion.end;
                      t.repairId = Seed.queue_champion.itemId;
                  }

                  if (feedback.index("There is one equipment in repairing queue") > 0) {
                      // item is still be repaired.
                      return;
                  }


                  if (rslt.feedback) {
                      t.setStatus(rslt.feedback);
                      uW.kocChampionItems[rItemId].status = CM.CHAMPION.STATUS_INACTIVE;
                      t.clearRepair();
                  }

              }
              return;
          },
          onFailure: function (ttt) {
              // this usually means a repair is in progress (such as a manual repair). Grab the seed data (if possible)
              if (Seed.queue_champion && Seed.queue_champion.end) {
                  t.repairEnd = Seed.queue_champion.end;
                  t.repairId = Seed.queue_champion.itemId;
              }
              return;
          }
      });
      return;
  },

  clearRepair: function () {
      //logit("clear repair");
      var t = Tabs.champUpgrader;
      var timeUntilDone = 0;

      if (t.repairEnd == 0) {
          return timeUntilDone;
      }
      timeUntilDone = t.repairEnd - unixTime();

      if (timeUntilDone <= 0) {
          if (t.repairId != 0 && uW.kocChampionItems[t.repairId] != null) {
              if (uW.kocChampionItems[t.repairId].status != CM.CHAMPION.STATUS_INACTIVE
                             || uW.kocChampionItems[t.repairId].status != CM.CHAMPION.STATUS_ACTIVE) {
                  t.setStatus("Repair time complete.");
              }
              uW.kocChampionItems[t.repairId].status = CM.CHAMPION.STATUS_INACTIVE;
              t.repairId = 0;
              t.show();
          }

      }
      return timeUntilDone;
  },

  addUpgradeItem: function (champId) {
      var t = Tabs.champUpgrader;
      var qItem = new QueueItem();
      qItem.item = champId;
      qItem.action = "upgrade";
      qItem.level = STrChOMaxChampLevel;
      STrChOChampQueueData.list.push(qItem);
      SAVESTrChOChampQueueData();
      //document.getElementById('champInventoryItem' + champId).className = 'STrChOBlueBorder';
      t.buildChampQueueDisplay();
  },

  addEnhanceItem: function (champId) {
      var t = Tabs.champUpgrader;
      var qItem = new QueueItem();
      qItem.item = champId;
      qItem.action = "enhance";
      qItem.level = STrChOMaxChampQuality;
      STrChOChampQueueData.list.push(qItem);
      SAVESTrChOChampQueueData();
      //document.getElementById('champInventoryItem' + champId).className = 'STrChOYellowBorder';
      t.buildChampQueueDisplay();
  },

  addBothChampItem: function (champId) {
      var t = Tabs.champUpgrader;

      var champItem = uW.kocChampionItems[champId];

      if (champItem == null || !champItem) return;

      var qual = +champItem.rarity;
      var lev = +champItem.level;

      if (qual >= STrChOMaxChampQuality) return;

      var maxLev = null;
      var nextQual = null;
      var qItem = null;

      while (qual < STrChOMaxChampQuality) {
          maxLev = t.upgradePath[qual].maxLev;
          nextQual = t.upgradePath[qual].nextQual;

          if (lev < maxLev) {
              qItem = new QueueItem();
              qItem.item = champId;
              qItem.action = "upgrade";
              qItem.level = maxLev;
              STrChOChampQueueData.list.push(qItem);
              //document.getElementById('champInventoryItem' + champId).className = 'STrChOBlueBorder';
          }

          qItem = new QueueItem();
          qItem.item = champId;
          qItem.action = "enhance";
          qItem.level = nextQual;
          STrChOChampQueueData.list.push(qItem);
          //document.getElementById('champInventoryItem' + champId).className = 'STrChOYellowBorder';
          lev = maxLev;
          qual = nextQual;
      }

      SAVESTrChOChampQueueData();
      t.buildChampQueueDisplay();
  },

  addChampQueue: function () {
      var t = Tabs.champUpgrader;
      var action = document.getElementById('STrChOChampAction').value;
      if (action == "both") {
          t.addBothChampItem(document.getElementById('STrChOChampUpgradeList').value);
          return;
      }
      var qItem = new QueueItem();
      qItem.item = document.getElementById('STrChOChampUpgradeList').value;
      qItem.action = document.getElementById('STrChOChampAction').value;
      qItem.level = document.getElementById('STrChOChampMaxLevel').value;
      if (qItem.item == 0) return;
      STrChOChampQueueData.list.push(qItem);
      SAVESTrChOChampQueueData();
      t.buildChampQueueDisplay();
  },

  buildChampLevelWidget: function () {
      var t = Tabs.champUpgrader;
      var m;
      var STrChOChampAction = document.getElementById('STrChOChampAction');
      if (STrChOChampAction.value == "enhance") {
          m = ' Max: <select class=STrChOSelect id=STrChOChampMaxLevel>';
          for (qual = 1; qual <= STrChOMaxChampQuality; qual++) {
              m += '<option value="' + qual + '">' + champCardQualities[qual] + '</option>';
          }
          m += '</select>';
      } else if (STrChOChampAction.value == "upgrade") {
          m = ' Max: <select class=STrChOSelect id=STrChOChampMaxLevel>';
          for (lvl = 1; lvl <= STrChOMaxChampLevel; lvl++) {
              m += '<option value="' + lvl + '"> +' + lvl + '</option>';
          }
          m += '</select>';
      } else {
          m = ' - <select class=STrChOSelect id=STrChOChampMaxLevel></select>';
      }

      document.getElementById('STrChOChampMaxDiv').innerHTML = m;
      if (STrChOChampAction.value == "enhance") {
          document.getElementById('STrChOChampMaxLevel').value = STrChOMaxChampQuality;
      } else if (STrChOChampAction.value == "upgrade") {
          document.getElementById('STrChOChampMaxLevel').value = STrChOMaxChampLevel;
      }

  },

  buildChampQueueDisplay: function () {
      var t = Tabs.champUpgrader;

      var STrChOChampQDiv = document.getElementById('STrChOChampQDiv');

      var m = '<table id=STrChOChampQueue width=100%>';
      m += '<tr><th width=10%>Remove</th>';
      m += '<th width=5%>Order</th>';
      m += '<th width=8%>Status</th>';
      m += '<th width=25%>Item</th>';
      m += '<th width=5%>Action</th>';
      m += '<th width=5%>Max</th>';
      m += '<th width=40%>Status/Last Upgrade/Attempts</th></tr>';

      for (var queueIndex = 0; queueIndex < STrChOChampQueueData.list.length; queueIndex++) {
          var queueItem = STrChOChampQueueData.list[queueIndex];
          if (!queueItem) continue;
          var champItem = uW.kocChampionItems[queueItem.item];

          var champCardName = "Unknown / Item removed";
          var champId = 0;

          if (champItem) {
              champCardName = champItem.name;
              champId = champItem.id;
          }

          m += '<tr>';
          m += '<td align=center><div id=STrChOChampQueueRemove' + queueIndex + ' class=STrChORemove></div></td>';
          m += '<td align=center><div id=STrChOChampUpRow' + queueIndex + ' class=STrChOUpRow></div><div class=STrChODownRow  id=STrChOChampDownRow' + queueIndex + '></div></td>';
          m += '<td align=center><div id=STrChOChampState' + queueIndex + '></div></td>';
          m += '<td align=center class=STrChOChampUpdaterItemName><div id=STrChOChampUpdaterItem' + champId + ' >' + champCardName + '</div></td>';
          m += '<td align=center>' + queueItem.action + '</td>';
          m += '<td>';
          if (queueItem.action == "enhance") {
              m += '<div style="text-align: center;"><select class=STrChOSelect id=STrChOChampChangeLevel' + queueIndex + ' style="width:90px; text-align: center;">';
              for (qual = 1; qual <= STrChOMaxChampQuality; qual++) {
                  m += '<option value="' + qual + '" ' + (queueItem.level == qual ? 'selected' : '') + '>' + champCardQualities[qual] + '</option>';
              }
              m += '</select></div>';
          } else {
              m += '<div style="text-align: center;"><select class=STrChOSelect id=STrChOChampChangeLevel' + queueIndex + ' style="width:90px; text-align: center;">';
              for (lvl = 1; lvl <= STrChOMaxChampLevel; lvl++) {
                  m += '<option value="' + lvl + '"  ' + (queueItem.level == lvl ? 'selected' : '') + '> +' + lvl + '</option>';
              }
              m += '</select></div>';
          }
          m += '</td>';

          m += '<td style="text-align: center; white-space: pre-wrap;">' + queueItem.status + ' / ';
          if (queueItem.lastUpgrade) m += queueItem.lastUpgrade;
          m += ' / ' + queueItem.triesThis + ' tries this level, ' + queueItem.triesTotal + ' tries total';
          m += '</td>';

          m += '</tr>';
      }
      m += '</table>';

      STrChOChampQDiv.innerHTML = m;

      for (var queueIndex = 0; queueIndex < STrChOChampQueueData.list.length; queueIndex++) {
          var queueItem = STrChOChampQueueData.list[queueIndex];
          if (!queueItem) continue;
          var champItem = uW.kocChampionItems[queueItem.item];

          document.getElementById('STrChOChampQueueRemove' + queueIndex).setAttribute('v1', queueIndex);
          document.getElementById('STrChOChampQueueRemove' + queueIndex).addEventListener('click', function () {
              var qIndex = this.getAttribute('v1');
              t.deleteQueueItem(qIndex);
          }, false);

          document.getElementById('STrChOChampUpRow' + queueIndex).setAttribute('v1', queueIndex);
          document.getElementById('STrChOChampUpRow' + queueIndex).addEventListener('click', function () {
              var qIndex = this.getAttribute('v1');
              t.moveUpRow(qIndex);
          }, false);

          document.getElementById('STrChOChampDownRow' + queueIndex).setAttribute('v1', queueIndex);
          document.getElementById('STrChOChampDownRow' + queueIndex).addEventListener('click', function () {
              var qIndex = this.getAttribute('v1');
              t.moveDownRow(qIndex);
          }, false);

          document.getElementById('STrChOChampChangeLevel' + queueIndex).setAttribute('v1', queueIndex);
          document.getElementById('STrChOChampChangeLevel' + queueIndex).addEventListener('change', function () {
              var qIndex = this.getAttribute('v1');
              var itemLevel = this.value;
              t.changeLevel(qIndex, itemLevel);
          }, false);

          if (!champItem || !(champItem.equipmentId)) {
              document.getElementById('STrChOChampState' + queueIndex).innerHTML = '<div style="text-align:center"> ??</div>';

          } else if (queueItem.status == "complete") {
              document.getElementById('STrChOChampState' + queueIndex).className = 'STrChOSuccess';

          } else if (champItem.status == CM.CHAMPION.STATUS_BROKEN_UPGRADE || champItem.status == CM.CHAMPION.STATUS_BROKEN_ENHANCE) {
              document.getElementById('STrChOChampState' + queueIndex).className = 'STrChOBroken';

          } else if (champItem.status == CM.CHAMPION.STATUS_REPAIRING_UPGRADE || champItem.status == CM.CHAMPION.STATUS_REPAIRING_ENHANCE) {
              document.getElementById('STrChOChampState' + queueIndex).className = 'STrChOHammer';
          } else {
              document.getElementById('STrChOChampState' + queueIndex).innerHTML = '<div class=STrChOGoButton></div>';
          }

      }
  },

  deleteQueueItem: function (index) {
      // delete an item from the queue
      var t = Tabs.champUpgrader;
      STrChOChampQueueData.list.splice(index, 1);
      if (index > STrChOChampQueueData.index) STrChOChampQueueData.index--;
      SAVESTrChOChampQueueData();
      t.buildChampQueueDisplay();
  },

  moveUpRow: function (index) {
      if (index < 1) return;
      var t = Tabs.champUpgrader;
      var qItem = STrChOChampQueueData.list.splice(index, 1);
      STrChOChampQueueData.list.splice(index - 1, 0, qItem[0]);

      if (index == STrChOChampQueueData.index)
          STrChOChampQueueData.index--;
      else if (STrChOChampQueueData.index == index - 1)
          STrChOChampQueueData.index++;

      SAVESTrChOChampQueueData();
      t.buildChampQueueDisplay();
  },

  moveDownRow: function (index) {
      if (index > (STrChOChampQueueData.list.length - 2)) return;

      var t = Tabs.champUpgrader;
      var qItem = STrChOChampQueueData.list.splice(index, 1);
      STrChOChampQueueData.list.splice(index + 1, 0, qItem[0]);

      if (index == STrChOChampQueueData.index)
          STrChOChampQueueData.index++;
      else if (STrChOChampQueueData.index == index + 1)
          STrChOChampQueueData.index--;

      SAVESTrChOChampQueueData();
      t.buildChampQueueDisplay();

  },

  changeLevel: function (index, level) {
      var t = Tabs.champUpgrader;

      var queueItem = STrChOChampQueueData.list[index];
      if (!queueItem) return;

      queueItem.level = level;
      if (queueItem.status == "complete") queueItem.status = "started";
      SAVESTrChOChampQueueData();
      t.buildChampQueueDisplay();
  },

  setStatus: function (s) {
      document.getElementById('STrChOChampUpgradeStatus').innerHTML = '<div>' + s + '</div>';
  },

  setResult: function (s) {
      document.getElementById('STrChOChampLastResult').innerHTML = '<div>' + s + '</div>';
  },

  togglePower: function (obj) {
      var t = Tabs.champUpgrader;

      if (!STrChOChampUpgradeData.active && STrChOChampRepairData.active) {
          alert('You must disable repair tab first');
          return;
      }

      var btn = document.getElementById('STrChOChampUpgradePower');
      if (STrChOChampUpgradeData.active) {
          STrChOChampUpgradeData.active = false;
          btn.value = 'Upgrader = OFF';
          t.setStatus('Powered Off');
          t.setResult('');

      } else {
          STrChOChampUpgradeData.active = true;
          btn.value = "Upgrader = ON";
          t.setStatus("Powered On");
          t.setResult("");
      }

      if (!STrChOChampUpgradeData.active) {

      }

      SAVESTrChOChampUpgradeData();
  },

}

Tabs.champSalvager = {
	tabOrder: 201,
	tabLabel: 'SALVAGER',
	tabColor: 'brown',
    tabHeader: 'CHAMP HALL SALVAGER',
    timer    : null,
    city     : null,
    cityNum  : 0,
    delItems        : [],
    rowNum   : 0,
    sTimer : null,
    delTimer : null,
    upgradeProfit: true,

	init: function (div) {
		var t = Tabs.champSalvager;
		t.mydiv = div;

		var m = '<div class=STrChOHeader>' + t.tabHeader + '</div>';

        m += '<div style="height: ' + (dlgHeight - (dlgHeightOffset*2.5)) + 'px; width: ' + (dlgWidth - dlgWidthMenu) + 'px; margin-top:5px; margin-bottom:5px; overflow-x: auto; overflow-y: auto; position: static;">';

		m += '<div>';
        m += '<table class=STrChOSectionTable>';
        m += '<tr>';
        if (STrChOChampSalvageData.active) {
            m += '<td width=33%><input id=STrChOChampSalvagerPower type=button class=STrChOButton value="Salvager = ON"></td>';
        } else {
            m += '<td width=33%><input id=STrChOChampSalvagerPower type=button class=STrChOButton value="Salvager = OFF"></td>';
        }
        m += '<td width=33%><div class=divNoWrap align=center>';
        m += 'Keep All: <select id=STrChOChampSalvageQuality class=STrChOSelect>';
        for (i = 1; i <= STrChOMaxChampQuality; i++) m += '<option value="' + i + '" ' + (STrChOChampSalvageData.minQuality == i ? 'SELECTED' : '') + '>' + throneCardQualities[i].capitalizeFirstLetter() + '+</option>';
        m += '</select>';
        m += '</div></td>';
        m += '<td width=33%><div class=divNoWrap>Keep First <input style="text-align: center;" id=STrChOChampSaveNum class=STrChOTextbox type=text size=3 maxlength=3 value="' + STrChOChampSalvageData.champSaveNum + '"/> Items</div></td>';
        m += '</tr>';
        m += '<tr><td colspan=3><hr class=STrChOHRCenter></td></tr>';
        m += '<tr><td colspan=3><div class=indent5 id=STrChOChampSalvageStatus></div></td></tr>';
        m += '<tr><td colspan=3><div class=indent5 id=STrChOChampNumSalv><br></div></td></tr>';
        m += '</table>';
        m += '</div>';

        m += '<div class=STrChOHeader id=STrChOChampSimpleRule onmouseover="this.style.cursor=\'pointer\'"><img src="'+STrChORightArrow+'"/>&nbsp;SIMPLE RULES&nbsp;<img class=STrChOReverseImage src="'+STrChORightArrow+'"/></div>';

        m += '<div class=STrChOSection style="position: static; width: 100%; height: 200px; overflow-x: hidden; overflow-y: auto;">';
        m += '<table class=STrChOSectionTable>';
        m += '<tr><td>';
        m += '<table>';
        m += '<tr><td><b>Define Champ Items To Keep:</b></td>';
        m += '<td alight=left><div><span>Faction: <select id=STrChOChampFactionType class=STrChOSelect>';
        m += '  <option value="any">Any</option>';
        for (var fact = 0; fact < STrChOFactions.length; fact++) m += '<option value="' + STrChOFactions[fact] + '">' + STrChOFactions[fact].capitalizeFirstLetter() + '</option>';
        m += '</select></span></div></td>';
        m += '<td alight=left><div><span>Card Type: <select id=STrChOChampCardType class=STrChOSelect>';
        m += '  <option value="any">Any</option>';
        for (var ct in champItemNames) m += '  <option value="' + champItemNames[ct] + '">' + champItemNames[ct].capitalizeFirstLetter() + '</option>';
        m += '</select></span></div></td>';
        m += '<td align=right><input id=STrChOChampAddRule type=button class=STrChOButton value="Create Rule"/></td>';
        m += '</tr>';
        m += '</table>';
        m += '</td></tr>';
        m += '<tr><td>';
        m += '<table id=STrChOChampConditionTable style="padding-left: 5px;">';
        m += '<tr><td align=left colspan=1><input id=STrChOChampAddRow type=button class=STrChOButton value="Add Row"/></td>';
        m += '<td></td><td></td><td></td><td></td><td></td></tr>';
        m += '</table>';
        m += '</td></tr>';
        m += '</table>';
        m += '</div>';   //end of STrChOSection

        m += '<div class=STrChOHeader id=STrChOChampAdvancedRule onmouseover="this.style.cursor=\'pointer\'"><img src="'+STrChORightArrow+'"/>&nbsp;ADVANCED RULES&nbsp;<img class=STrChOReverseImage src="'+STrChORightArrow+'"/></div>';

        m += '<div class=STrChOSection>';
        m += '<table class=STrChOSectionTable>';
        m += '<tr><td>';
        m += '<table>';
        m += '<tr><td colspan=4><input class=STrChOButton type=button id=STrChOChampAdvancedReset value="Reset"></tr>';
        m += '<tr>';
        m += '<td><b>Define Champ Items To Keep:</b></td>';
        m += '<td alight=left><div><span>Faction: <select id=STrChOChampFactionTypeAdvanced class=STrChOSelect>';
        m += '  <option value="any">Any</option>';
        for (var fact = 0; fact < STrChOFactions.length; fact++) m += '<option value="' + STrChOFactions[fact] + '">' + STrChOFactions[fact].capitalizeFirstLetter() + '</option>';
        m += '</select></span></div></td>';
        m += '<td alight=left><div><span>Card Type: <select id=STrChOChampCardTypeAdvanced class=STrChOSelect>';
        m += '  <option value="any">Any</option>';
        for (var ct in champItemNames) m += '  <option value="' + champItemNames[ct] + '">' + champItemNames[ct].capitalizeFirstLetter() + '</option>';
        m += '</select></span></div></td>';
        m += '<td align=right><input id=STrChOChampAddRuleAdvanced type=button class=STrChOButton value="Create Rule"/></td>';
        m += '</tr>';
        m += '</table>';
        m += '</td></tr>';
        m += '<tr><td>';
        m += '<table width=100% id=STrChOChampConditionTableAdvanced>';
        m += '<tr>';
        m += '<td width=20%>ROW 1</td>';
        m += '<td width=20%>ROW 2</td>';
        m += '<td width=20%>ROW 3</td>';
        m += '<td width=20%>ROW 4</td>';
        m += '<td width=20%>ROW 5</td>';
        m += '</tr>';
        m += '<tr>';
        m += '<td width=20%><div><select style="max-width: 125px;" id=STrChOChampRow1Advanced class=STrChOSelect></select></div></td>';
        m += '<td width=20%><div><select style="max-width: 125px;" id=STrChOChampRow2Advanced class=STrChOSelect></select></div></td>';
        m += '<td width=20%><div><select style="max-width: 125px;" id=STrChOChampRow3Advanced class=STrChOSelect></select></div></td>';
        m += '<td width=20%><div><select style="max-width: 125px;" id=STrChOChampRow4Advanced class=STrChOSelect></select></div></td>';
        m += '<td width=20%><div><select style="max-width: 125px;" id=STrChOChampRow5Advanced class=STrChOSelect></select></div></td>';
        m += '</tr>';
        m += '</table>';
        m += '</td></tr>';
        m += '</table>';
        m += '</div>';   //end of STrChOSection

        m += '<div class=STrChOHeader>&nbsp;RULES LIST&nbsp;</div>';

        m += '<div>';
        m += '<table class=STrChOSectionTable>';
        m += '<tr><td align=center>';
        m += 'Sort By Card Type: <select id=STrChOChampSalvageSortCard class=STrChOSelect>';
        m += '<option value="0">--Select--</option>';
        for (var ct in champItemNames) m += '  <option value="' + champItemNames[ct] + '">' + champItemNames[ct].capitalizeFirstLetter() + '</option>';
        m += '</select>';
        m += '</td></tr>';
        m += '<tr><td align=center>';
        m += '<b>Salvager Will Keep Items Matching These Rules</b>';
        m += '</td></tr>';
        m += '<tr><td align=center>';
        m += '<div align=center>';
        m += '<table align=center width=100%>';
        m += '<tr>';
        m += '<td align=left><input id=STrChOChampButtonSaveItem type=button class=STrChOButton value="Save Rules">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
        m += '<input id=STrChOChampClearAllRules type=button class=STrChOButton value="Clear All Rules"></td>';
        m += '<td align=right>'
        m += '<input id=STrChOChampButtonLoadItem type=button class=STrChOButton value="Load Rules">';
        m += '<input class=STrChOButton type=button id=STrChOChampFileDrop onclick="document.getElementById(\'STrChOChampFileLoadItem\').click()" value="Browse...">';
        m += '<input id=STrChOChampFileLoadItem style="visibility: hidden; height:0px; width: 0px;" type=file>';
        m += '</td>';
        m += '</tr>';
        m += '</table>';
        m += '</div>';
        m += '</td></tr>';
        m += '<tr><td align=center>';
        m += '<div id=STrChOChampRuleScroll style="position: static; width: 100%; height: ' + dlgHeight + '; overflow-x: hidden; overflow-y: auto;" >';
        m += '<div id=STrChOChampRuleDisplay></div>';
        m += '</div>';
        m += '</td></tr>';
        m += '</table>';
        m += '</div>'; //end of STrChOSection
        m += '</div>';

		t.mydiv.innerHTML = '<div>' + m + '</div>';

        var header = document.getElementsByClassName('STrChOHeader');
        for (var head=0;head<header.length;head++) {
            header[head].addEventListener('click', sectionOpener, false);
        }

        if (STrChOChampSalvageData.active)
            t.setStatus('Loading...');
        else
            t.setStatus('Powered Off');

        t.displayNumberSalvaged();

        document.getElementById('STrChOChampClearAllRules').addEventListener('click', function() {
            STrChOChampSalvageData.ruleSet = [];
            SAVESTrChOChampSalvageData();
            t.buildChampRuleDisplay();
        }, false);


        document.getElementById('STrChOChampAdvancedReset').addEventListener('click', function () {
            var cardtype = document.getElementById('STrChOChampCardTypeAdvanced');
            cardtype.selectedIndex = 0;
            t.clearAdvancedStats();
            t.setAdvancedStatsToAny();
        }, false);

        t.setAdvancedStatsToAny();

        document.getElementById('STrChOChampAddRuleAdvanced').addEventListener('click', function() {
            t.createAdvancedRule();
        }, false);

        document.getElementById('STrChOChampCardTypeAdvanced').addEventListener('change', function() {
            var selectedValue = document.getElementById('STrChOChampCardTypeAdvanced').value;
            t.clearAdvancedStats();
            if (selectedValue == "any") {
                t.setAdvancedStatsToAny();
            } else {
                t.filterAdvancedStats(selectedValue);
            }
        }, false);

        document.getElementById('STrChOChampSalvagerPower').addEventListener('click', function() {
            t.togglePower(this);
        } , false);

        t.createRow();
        t.buildChampRuleDisplay();

        document.getElementById('STrChOChampSalvageSortCard').addEventListener('change', function() {
            t.buildChampRuleDisplay();
        }, false);

        document.getElementById('STrChOChampButtonSaveItem').addEventListener('click', function() {
            uriContent = 'data:application/octet-stream,' + encodeURIComponent(JSON.stringify(STrChOChampSalvageData.ruleSet));
            newWindow = window.open(uriContent, 'file.txt');
        }, false);

        document.getElementById('STrChOChampButtonLoadItem').addEventListener('click', function() {
            var fileInput = document.getElementById("STrChOChampFileLoadItem");
            var files = fileInput.files;
            if (files.length==0) {
                alert('Please Select A File');
                return;
            }
            var file = files[0];

            var reader = new FileReader();

            reader.onload = function (e) {
				var output = e.target.result;
				STrChOChampSalvageData.ruleSet = JSON.parse(output);
                STrChOChampSalvageData.active = false;
                clearInterval(t.sTimer);
                clearInterval(t.delTimer);
                t.deleting = false;
                SAVESTrChOChampSalvageData();
                t.show();
                alert('Champ Salvage Settings Now Loaded From File');
            };
            reader.readAsText(file);
        }, false);

        document.getElementById('STrChOChampSaveNum').addEventListener('change', function () {
            STrChOChampSalvageData.champSaveNum = parseInt(document.getElementById('STrChOChampSaveNum').value);
            if (STrChOChampSalvageData.champSaveNum < 0) STrChOChampSalvageData.champSaveNum = 0;
            SAVESTrChOChampSalvageData();
        }, false);

        document.getElementById('STrChOChampSalvageQuality').addEventListener('click', function() {
            t.setSalvageLevel(this.value);
        }, false);

        document.getElementById('STrChOChampAddRow').addEventListener('click', function() {
            t.createRow();
        }, false);

        document.getElementById('STrChOChampAddRule').addEventListener('click', function() {
            t.createRule();
        }, false);

        t.upgradeProfit = (5*CM.WorldSettings.getSettingAsNumber("AETHERSTONE_SALVAGE_MULTIPLIER", 500) > CM.thronestats.upgrade[1]["Stones"]);
        t.start();

	},

    setAdvancedStatsToAny: function() {
        for (var r = 1; r < STrChOQualityCount; r++) {
            var row = document.getElementById('STrChOChampRow' + r + 'Advanced');
            row.options.add(new Option("none","none"));
            for (i = 0; i < champItemEffects.length; i++) {
                var effectName = uW.g_js_strings.effects["name_" + champItemEffects[i]];
                row.options.add(new Option(effectName, effectName));
            }
        }
    },

    clearAdvancedStats: function() {
        for (var i = 1; i < STrChOQualityCount; i++) {
            var row = document.getElementById('STrChOChampRow' + i + 'Advanced');
            row.innerHTML = "";
        }
    },

    filterAdvancedStats: function(cardtype) {
        var t = Tabs.champSalvager;

        cardtype = cardtype || "any";

        if (cardtype == "any") {
            t.setAdvancedStatsToAny();
            return;
        }

        document.getElementById("STrChOChampRow1Advanced").options.add(new Option("none", "none"));
        document.getElementById("STrChOChampRow2Advanced").options.add(new Option("none", "none"));
        document.getElementById("STrChOChampRow3Advanced").options.add(new Option("none", "none"));
        document.getElementById("STrChOChampRow4Advanced").options.add(new Option("none", "none"));
        document.getElementById("STrChOChampRow5Advanced").options.add(new Option("none", "none"));

        for (i = 0; i < champItemEffects.length; i++) {
            var effectName = uW.g_js_strings.effects["name_" + champItemEffects[i]];
            var eff = champItemEffects[i];
            if (STrChOChampStatsGrid[cardtype][1][eff]) { document.getElementById("STrChOChampRow1Advanced").options.add(new Option(effectName, effectName)); }
            if (STrChOChampStatsGrid[cardtype][2][eff]) { document.getElementById("STrChOChampRow2Advanced").options.add(new Option(effectName, effectName)); }
            if (STrChOChampStatsGrid[cardtype][3][eff]) { document.getElementById("STrChOChampRow3Advanced").options.add(new Option(effectName, effectName)); }
            if (STrChOChampStatsGrid[cardtype][4][eff]) { document.getElementById("STrChOChampRow4Advanced").options.add(new Option(effectName, effectName)); }
            if (STrChOChampStatsGrid[cardtype][5][eff]) { document.getElementById("STrChOChampRow5Advanced").options.add(new Option(effectName, effectName)); }
        }

    },

	hide: function () {},

	show: function () {
		var t = Tabs.champSalvager;
        t.displayNumberSalvaged();
    },

    tripOdometer : function() {
        var t = Tabs.champSalvager;
        STrChOChampSalvageData.numSalvagedItems2 = 0;
        var now = new Date();
        STrChOChampSalvageData.since = now.valueOf();
        SAVESTrChOChampSalvageData();
        t.show();
    },

    displayNumberSalvaged : function () {
        var t = Tabs.champSalvager;

        var since = "";
        var rate = "";
        var now = new Date();

        if (!STrChOChampSalvageData.since) STrChOChampSalvageData.since = now.valueOf();

        var sinceD = new Date(STrChOChampSalvageData.since);

        since = sinceD.toDateString().substring(3,10) + " " + sinceD.toLocaleTimeString();
        var duration = now.valueOf() - STrChOChampSalvageData.since +1;
        duration = duration / 1000.0;
        rate = " (" + addCommas(Math.round(STrChOChampSalvageData.numSalvagedItems2 / duration * 86400)) + " per day)";

        var m = '<div style="text-align: center;">' + addCommas(STrChOChampSalvageData.numSalvagedItems);
        m += ' items salvaged, ' + addCommas(STrChOChampSalvageData.numSalvagedItems2);
        m += ' items since ' + since + rate + ' <input id=STrChOChampTripOdometer class=STrChOButton type=button value="Reset" /></div>';
        document.getElementById('STrChOChampNumSalv').innerHTML = m;

        document.getElementById('STrChOChampTripOdometer').addEventListener('click', function () {
            t.tripOdometer();
        }, false);

    },


    createRow : function() {
        var t = Tabs.champSalvager;
        var table = document.getElementById('STrChOChampConditionTable');
        var rowCount = table.rows.length;
        var row = table.insertRow(rowCount-1);
        var rowId = "r" + t.rowNum;
        t.rowNum++;
        row.id = rowId;

        var h  = "<td> <select class=STrChOSelect id='" + rowId + "ChampsSel1'> <option value='true'> </option> <option value='false'>NOT</option></select></td>";
        h += "<td> <select class=STrChOSelect id='" + rowId + "ChampsSel2'>";
        h += "  <option value='1'>1x</option>";
        h += "  <option value='2'>2x</option>";
        h += "  <option value='3'>3x</option>";
        h += "  <option value='4'>4x</option>";
        h += "  <option value='5'>5x</option>";
        h += "</select></td>";
        h += "<td> <select class=STrChOSelect id='" + rowId + "ChampsSel3'>";
        h += "</select></td>";
        h += "<td> <select class=STrChOSelect id='" + rowId + "ChampsSel4'>";
        h += "  <option value='e'>Either</option>";
        h += "  <option value='b'>Buff</option>";
        h += "  <option value='d'>Debuff</option>";
        h += "</select></td>";

        h += "<td> Slots: ";
        h += "  <input class=STrChOCheckbox type=checkbox value='1' checked=true id='" + rowId + "ChampsSlot1'/>1";
        h += "  <input class=STrChOCheckbox type=checkbox value='2' checked=true id='" + rowId + "ChampsSlot2'/>2";
        h += "  <input class=STrChOCheckbox type=checkbox value='3' checked=true id='" + rowId + "ChampsSlot3'/>3";
        h += "  <input class=STrChOCheckbox type=checkbox value='4' checked=true id='" + rowId + "ChampsSlot4'/>4";
        h += "  <input class=STrChOCheckbox type=checkbox value='5' checked=true id='" + rowId + "ChampsSlot5'/>5";
        h += "</td>";

        row.innerHTML = h;

        var effects = [];

        for (i = 0; i < champItemEffects.length; i++) {
            var effectName = uW.g_js_strings.effects["name_" + champItemEffects[i]];
            effectName = effectName.split(" Debuff")[0];
            if  (effects.indexOf(effectName) < 0) effects.push(effectName);
        }

        var select = document.getElementById(rowId + "ChampsSel3");
        for (index in effects) {
            select.options.add(new Option(effects[index], effects[index]));
        }

        var c = row.insertCell(5);
        //TODO
//        var btn = document.createElement("BUTTON");
//        btn.className = 'STrChOButton';
//        btn.value = 'X';
//        btn.addEventListener('click', function () { t.removeRow(row); }, false);
//        c.append(btn);
        var btn = $("<input class=STrChOButton type=button value='X'/>");
        $(btn).click( function () { t.removeRow(row);});
        $(c).append( btn );

    },

    setSalvageLevel : function(level) {
        STrChOChampSalvageData.minQuality = level;
        SAVESTrChOChampSalvageData();
    },

    createAdvancedRule: function() {
        var t = Tabs.champSalvager;
        t.readAdvancedRows();
        t.buildChampRuleDisplay();
    },

    createRule : function() {
        var t = Tabs.champSalvager;
        t.readRows();
        t.buildChampRuleDisplay();
    },

    buildChampRuleDisplay : function () {
        var t = Tabs.champSalvager;

        function innerRuleDisplay(dataset) {
            var innerM = "";
            for (i = 0; i < dataset.length; i++)
            {
                var rule = dataset[i];

                innerM += '<tr>';
                innerM += "<td width=90%><div class='STrChOChampRule'>";

                innerM += (rule.advancedrule ? 'Advanced Rule:<br>' : 'Simple Rule:<br>');

                innerM += " Type: " + rule.type;
                innerM += " Faction: " + rule.faction;

                for (ii = 0; ii < rule.conditions.length; ii++)
                {
                    var condition = rule.conditions[ii];

                    if (ii ==0 )
                        innerM += "<br> Item";
                    else
                        innerM += "<br> <u>and</u>";

                    if (condition.mustHave != "false")
                        innerM += " must have ";
                    else
                        innerM += " must NOT have ";

                    innerM += condition.number + "x ";
                    innerM += condition.effect + " ";

                    if (condition.buffType == "b")
                        innerM += "buff ";
                    else if (condition.buffType == "d")
                        innerM += "debuff ";
                    else
                        innerM += "buff or debuff ";

                    innerM += " in slot(s): ";

                    for (j = 0; j < condition.slots.length; j++)
                    {
                        if (condition.slots[j] ) innerM += (j+1) + " ";
                    }

                }
                innerM += '</div></td>';
                innerM += '<td width=20% align=center>';
                innerM += '<input id=STrChOChampEditRule' + i + ' type=button class=STrChOButton value="Edit"><br>';
                innerM += '<input id=STrChOChampDelRule' + i + ' type=button class=STrChOButton value="X">';
                innerM += '</td>';
                innerM += '</tr>';
            }
            return innerM;
        }

        var rd = document.getElementById('STrChOChampRuleDisplay');
        var sortType = document.getElementById('STrChOChampSalvageSortCard').value;

        if (sortType != "0") {
            var sortedDataSet = [];
            for (var k = 0; k < STrChOChampSalvageData.ruleSet.length; k++) {
                if (sortType == STrChOChampSalvageData.ruleSet[k].type) {
                    sortedDataSet.unshift(STrChOChampSalvageData.ruleSet[k]);
                }else {
                    sortedDataSet.push(STrChOChampSalvageData.ruleSet[k]);
                }
            }
            rd.innerHTML = '<table width=100%>' + innerRuleDisplay(sortedDataSet);
            for (var j=0; j < sortedDataSet.length; j++)
            {
                document.getElementById('STrChOChampDelRule' +j).v1 = j;
                document.getElementById('STrChOChampEditRule' +j).v1 = j;
                document.getElementById('STrChOChampDelRule' +j).addEventListener ('click', function() { t.deleteRule(this.v1, sortedDataSet);}, false);
                document.getElementById('STrChOChampEditRule' +j).addEventListener ('click', function() { t.editRule(this.v1, sortedDataSet);}, false);
            }
        } else {
            rd.innerHTML = '<TABLE  width=100%>' + innerRuleDisplay(STrChOChampSalvageData.ruleSet);
            for (var j=0; j < STrChOChampSalvageData.ruleSet.length; j++)
            {
                document.getElementById('STrChOChampDelRule' +j).v1 = j;
                document.getElementById('STrChOChampEditRule' +j).v1 = j;
                document.getElementById('STrChOChampDelRule' +j).addEventListener ('click', function() { t.deleteRule(this.v1, STrChOChampSalvageData.ruleSet);}, false);
                document.getElementById('STrChOChampEditRule' +j).addEventListener ('click', function() { t.editRule(this.v1, STrChOChampSalvageData.ruleSet);}, false);
            }
        }


    },

    editRule : function(ruleIndex, sortedData)
    {
        var t = Tabs.champSalvager;
        var rule = sortedData[ruleIndex];

        var divExpander = null;

        if (rule.advancedrule)
            divExpander = document.getElementById('STrChOChampAdvancedRule');
        else
            divExpander = document.getElementById('STrChOChampSimpleRule');

        divExpander.click();
        if (divExpander.childNodes[0].src == STrChORightArrow) divExpander.click();

        if (rule.advancedrule) {
            document.getElementById('STrChOChampFactionTypeAdvanced').value = rule.faction;
            document.getElementById('STrChOChampCardTypeAdvanced').value = rule.type;
            t.clearAdvancedStats();
            if (rule.type == 'any')
                t.setAdvancedStatsToAny();
            else
                t.filterAdvancedStats(rule.type);

            for (row = 0; row < rule.conditions.length; row++) {
                var condition = rule.conditions[row];
                var slotNumber = 0;
                for (s = 0; s < condition.slots.length; s++) {
                    if (condition.slots[s]) slotNumber = s+1;
                }
                var cell = document.getElementById('STrChOChampRow' + slotNumber + 'Advanced');
                var STrChOEffect = condition.effect;
                if (condition.buffType == 'd') STrChOEffect += ' Debuff';
                cell.value = STrChOEffect;
            }

        } else {
            document.getElementById('STrChOChampFactionType').value = rule.faction;
            document.getElementById('STrChOChampCardType').value = rule.type;
            var STrChOChampConditionTable = document.getElementById('STrChOChampConditionTable');
            while (STrChOChampConditionTable.rows.length > 1) STrChOChampConditionTable.deleteRow(0);
            for (row = 0; row < rule.conditions.length; row++) {
                var condition = rule.conditions[row];
                t.createRow();
                STrChOChampConditionTable = document.getElementById('STrChOChampConditionTable');
                STrChOChampConditionTable.rows[row].cells[0].children[0].value = condition.mustHave;
                STrChOChampConditionTable.rows[row].cells[1].children[0].value = condition.number;
                STrChOChampConditionTable.rows[row].cells[2].children[0].value = condition.effect;
                STrChOChampConditionTable.rows[row].cells[3].children[0].value = condition.buffType;
                var slotCells = STrChOChampConditionTable.rows[row].cells[4];
                for (s = 0; s < condition.slots.length; s++) {
                    if (condition.slots[s])
                        slotCells.children[s].checked = true;
                    else
                        slotCells.children[s].checked = false;
                }
            }
        }
        t.deleteRule(ruleIndex, sortedData);
    },

    // delete a rule from the ruleset
    deleteRule : function(ruleIndex, sortedData)
    {
        var t = Tabs.champSalvager;
        sortedData.splice(ruleIndex,1);
        var newDataSet = [];
        for (var i = 0; i < STrChOChampSalvageData.ruleSet.length; i++) {
            for (var i2 = 0; i2 < sortedData.length; i2++) {
                if (STrChOChampSalvageData.ruleSet[i] == sortedData[i2]) {
                    newDataSet.push(STrChOChampSalvageData.ruleSet[i]);
                    break;
                }
            }
        }
        STrChOChampSalvageData.ruleSet = newDataSet;
        SAVESTrChOChampSalvageData();
        t.buildChampRuleDisplay();
    },

    togglePower: function(obj){
        var t = Tabs.champSalvager;

        if (STrChOChampSalvageData.active) {
            var btn = document.getElementById('STrChOChampSalvagerPower');
            STrChOChampSalvageData.active = false;
            btn.value = "Salvager = OFF";
            clearInterval(t.sTimer);
            clearInterval(t.delTimer);
            t.delItems = [];
            t.deleting = false;
        } else {
            STrChOChampSalvageData.active = true;
            var btn = document.getElementById('STrChOChampSalvagerPower');
            btn.value = "Salvager = ON";
            t.doSalvage();
            t.start();
        }
        SAVESTrChOChampSalvageData();
    },

    readAdvancedRows: function () {
        var t = Tabs.champSalvager;
        var cType = document.getElementById('STrChOChampCardTypeAdvanced').value;
        var faction = document.getElementById('STrChOChampFactionTypeAdvanced').value;
        var row1 = document.getElementById("STrChOChampRow1Advanced");
        var row2 = document.getElementById("STrChOChampRow2Advanced");
        var row3 = document.getElementById("STrChOChampRow3Advanced");
        var row4 = document.getElementById("STrChOChampRow4Advanced");
        var row5 = document.getElementById("STrChOChampRow5Advanced");
        var conditions = [];
        for (var i = 1; i < STrChOQualityCount; i++) {
            var row = document.getElementById("STrChOChampRow" + i + "Advanced");
            if (row.selectedIndex == 0) continue;
            var slots = [];
            for (var slotChecker = 1; slotChecker < STrChOQualityCount; slotChecker++) {
                slots.push(slotChecker==i);
            }
            var effectName = row.options[row.selectedIndex].value;
            var buffDebuff = "b";
            if (effectName.indexOf(" Debuff") != -1) buffDebuff = "d";
            var effectName = effectName.split(" Debuff")[0];
            var c = new ChampCondition(true, 1, effectName, buffDebuff, slots);
            conditions.push(c);
        }
        if ( conditions.length > 0 ) {
            var rule1 = new ChampRule(cType, faction, conditions, true);
            t.addRule(rule1);
        }
    },

    readRows : function()
    {
        var t = Tabs.champSalvager;
        var table = document.getElementById('STrChOChampConditionTable');
        var rowCount = table.rows.length;

        var cType = document.getElementById('STrChOChampCardType').value;
        var faction = document.getElementById('STrChOChampFactionType').value;

        var conditions = [];
        for (i=0; i < table.rows.length; i++)
        {
            var row = table.rows[i];
            if (row.id)
            {
                var s1 = document.getElementById(row.id + "ChampsSel1");
                var s2 = document.getElementById(row.id + "ChampsSel2");
                var s3 = document.getElementById(row.id + "ChampsSel3");
                var s4 = document.getElementById(row.id + "ChampsSel4");

                var slots = [];
                for (j =1; j <= 5; j++)
                {
                    var ch = document.getElementById(row.id + "ChampsSlot" + j);
                    slots.push(ch.checked);
                }

                var c = new ChampCondition(s1.value, s2.value, s3.value, s4.value, slots );
                conditions.push(c);
            }
        }
        var rule1 = new ChampRule(cType, faction, conditions, false);
        t.addRule(rule1);
    },

    removeRow : function(row)
    {
        var table = document.getElementById('STrChOChampConditionTable');

        for (i=0; i < table.rows.length  ; i++ )
        {
            if (table.rows[i] == row)
            {
                table.deleteRow(i);
                break;
            }
        }
    },

    // add a new rule
    addRule : function(rule) {
        STrChOChampSalvageData.ruleSet.unshift(rule);
        SAVESTrChOChampSalvageData();
    },


    start : function() {
        var t = Tabs.champSalvager;
        if(STrChOChampSalvageData.active) t.sTimer = setInterval(t.doSalvage, 1*60*1000);
    },

        // do the actual discard of champion items
    doSalvage : function() {
        var t = Tabs.champSalvager;

        if(!STrChOChampSalvageData.active) {
            t.deleting = false;
            return;
        }

        if (t.deleting == true) return;

        t.deleting = true;
        t.setStatus('Salvaging items');

        t.delItems = t.buildList(false);


        if (t.delItems.length > 0) {
            // upgrade items from +0 to +1 first
            t.upgradeAndDelete();
        } else {
            // give enough time for the last delete to finish
            setTimeout( function () {
                t.deleting = false;
                t.setStatus('No items to salvage.  Waiting for next cycle.');
            }, 3000);
        }
    },

    // Create the list of items to delete.
    // If 'test' is set to true, then broken/equipted items are included.
    buildList : function(test){
        var t = Tabs.champSalvager;

        var champSaveNum = STrChOChampSalvageData.champSaveNum;
        var countItem = 0;
        var retList = [];

        for (k in uW.kocChampionItems) {
            var champ_item = uW.kocChampionItems[k];
            countItem++;
            if (champ_item.level !=0) continue; // ignore these things
            if (champ_item.unique > 0) continue;
            // in test mode, include these items
            // These items are at risk if they are repaired or unequiped.
            if (test != true)
                if (champ_item.equippedTo) continue;
            // keep the first X items
            if ( countItem <= champSaveNum) continue;
            // keep things w/ at least minQuality
            if (champ_item.rarity >= STrChOChampSalvageData.minQuality) continue;
            // check the rules
            if (t.applyRules(champ_item.equipmentId)) {
                if (STrChOChampSalvageData.upgradeAutoFind) {
                    var found = false;
                    for (var i = 0; i < STrChOChampQueueData.list.length; i++) {
                        var qItem = STrChOChampQueueData.list[i];
                        if (qItem.item != champ_item.equipmentId) continue;
                        found = true;
                        break;
                    }
                    if (!found) {
                        ActionLog('Item: ' + champ_item.name + ' found and added to auto upgrade');
                        Tabs.champUpgrader.addUpgradeItem(champ_item.equipmentId);
                    }
                }
                continue;
            }

            // passes all tests
            retList.push(champ_item.equipmentId);
        }
        return retList;
    },

    // put out a status message on the chSavlStatus div
    setStatus : function(msg) { document.getElementById('STrChOChampSalvageStatus').innerHTML = msg; },

    // returns true if the item should be saved and not salvaged
    applyRules : function(id) {
        var t = Tabs.champSalvager;
        for (r in STrChOChampSalvageData.ruleSet) {
            var rule = STrChOChampSalvageData.ruleSet[r];
            if ( rule.ChampApplyRule(id)) return true;
        }
        return false;
    },

    upgradeAndDelete : function () {  // update items to +1 before deleting
        var t = Tabs.champSalvager;
        if(!STrChOChampSalvageData.active || t.delItems.length == 0) {
            t.deleting = false;
            return;
        }
        var id = +t.delItems[0];
        t.delTimer = setTimeout( function () {t.doDelete(id)}, 4000);  // delete the item
    },

    removeItem : function (id, cityId, numStones) {
        var item = uW.kocChampionItems[id];
        if (!item) return;
        var c = +(Seed.resources["city" + cityId]["rec5"][0]);
        delete uW.kocChampionItems[id];
    },

    doDelete : function(id) {

        var t = Tabs.champSalvager;
        if(!STrChOChampSalvageData.active || !t.deleting) {
            t.deleting = false;
            return;
        }

        var item = uW.kocChampionItems[id];
        if (item) t.setStatus('Salvaging ' + item.name);

        SalvageChampItem(id);
    },

}

Tabs.champRepair = {
	tabOrder: 202,
	tabLabel: 'REPAIR',
	tabColor: 'brown',
    tabHeader: 'CHAMP HALL REPAIR',
    repairId: 0,
    repairEnd: 0,
    timerH: null,
    clearTimerH: null,

	init: function (div) {
		var t = Tabs.champRepair;
		t.mydiv = div;

		var m = '<div class=STrChOHeader>' + t.tabHeader + '<div class=STrChOSaveSettings id=STrChOChampRepairSaveSettings title="Save Repair Settings"></div><div class=STrChOLoadSettings id=STrChOChampRepairLoadSettings title="Load Repair Settings"></div></div>';


        m += '<div style="height: ' + (dlgHeight - (dlgHeightOffset*2.5)) + 'px; width: ' + (dlgWidth - dlgWidthMenu) + 'px; margin-top:5px; margin-bottom:5px; overflow-x: auto; overflow-y: auto; position: static;">';
		m += '<div>';

        m += '<table class=STrChOSectionTable>';
        m += '<tr>';
        if (STrChOChampRepairData.active) {
            m += '<td width=50%><input id=STrChOChampRepairPower type=button class=STrChOButton value="Repair = ON"></td>';
        } else {
            m += '<td width=50%><input id=STrChOChampRepairPower type=button class=STrChOButton value="Repair = OFF"></td>';
        }
        m += '<td width=50%><div class=divNoWrap align=center id=STrChOChampRepairAetherDisplay></div></td>';
        m += '</tr>';
        m += '<tr><td colspan=2><hr class=STrChOHRCenter></td></tr>';
        m += '<tr><td colspan=2><div class=indent5 id=STrChOChampRepairStatus><br></div></td></tr>';
        m += '<tr><td colspan=2><div class=indent5 id=STrChOChampRepairLastResult><br></div></td></tr>';
        m += '</table>';
        m += '</div>';

        m += '<div class=STrChOHeader onmouseover="this.style.cursor=\'pointer\'"><img src="'+STrChORightArrow+'"/>&nbsp;SPEED UPS&nbsp;<img class=STrChOReverseImage src="'+STrChORightArrow+'"/></div>';

        m += '<div class=STrChOSection>';
        m += '<table class=STrChOSectionTable>';
        m += '<tr>';
        m += '<td colspan=3><input class=STrChOCheckbox type=checkbox id=STrChOChampRepairHourglassLevelSpecific ' + (STrChOChampRepairData.hourglassLevelSpecific ? "CHECKED" : "") + '>Only use hourglass for levels ';
        m += '<select class=STrChOSelect  id=STrChOChampRepairHourglassLevel>';
        for (lvl = 1; lvl < STrChOMaxChampLevel; lvl++) m += '<option value="' + lvl + '" ' + (STrChOChampRepairData.hourglassLevel == lvl ? 'SELECTED' : '') + '>+' + lvl + '</option>';
        m += '</select> and higher</td>';
        m += '</tr>';
        m += '<tr>';
        m += '<td colspan=3><input class=STrChOCheckbox type=checkbox id=STrChOChampRepairHourglassQualitySpecific ' + (STrChOChampRepairData.hourglassQualitySpecific ? "CHECKED" : "") + '>Only use hourglass for qualities ';
        m += '<select class=STrChOSelect id=STrChOChampRepairHourglassQuality>';
        for (qual = 1; qual <= STrChOMaxChampQuality-1; qual++) m += '<option value="' + qual + '" ' + (STrChOChampRepairData.hourglassQuality == qual ? 'SELECTED' : '') + '>' + champCardQualities[qual].capitalizeFirstLetter() + '</option>';
        m += '</select> and higher</td>';
        m += '</tr>';
        m += '<tr>';
        m += '<td title="' + STrChOHourGlassTDLabel[1] + '"><input class=STrChOCheckbox type=checkbox id=STrChOChampRepairUseSH ' + (STrChOChampRepairData.useSH ? 'CHECKED' : '') + '><div class=divNoWrap>' + STrChOHourGlassName[1] + ' (<div class=divNoWrap id=STrChOChampRepairUseSHLabel><font' + (uW.ksoItems[1].count < 100 ? ' color=red>' : '>') + uW.ksoItems[1].count + '</font></div>)</div></td>';
        m += '<td title="' + STrChOHourGlassTDLabel[2] + '"><input class=STrChOCheckbox type=checkbox id=STrChOChampRepairUseKH ' + (STrChOChampRepairData.useKH ? 'CHECKED' : '') + '><div class=divNoWrap>' + STrChOHourGlassName[2] + ' (<div class=divNoWrap id=STrChOChampRepairUseKHLabel><font' + (uW.ksoItems[2].count < 100 ? ' color=red>' : '>') + uW.ksoItems[2].count + '</font></div>)</div></td>';
        m += '<td title="' + STrChOHourGlassTDLabel[3] + '"><input class=STrChOCheckbox type=checkbox id=STrChOChampRepairUseGH ' + (STrChOChampRepairData.useGH ? 'CHECKED' : '') + '><div class=divNoWrap>' + STrChOHourGlassName[3] + ' (<div class=divNoWrap id=STrChOChampRepairUseGHLabel><font' + (uW.ksoItems[3].count < 100 ? ' color=red>' : '>') + uW.ksoItems[3].count + '</font></div>)</div></td>';
        m += '</tr>';
        m += '<tr>';
        m += '<td title="' + STrChOHourGlassTDLabel[4] + '"><input class=STrChOCheckbox type=checkbox id=STrChOChampRepairUseMH ' + (STrChOChampRepairData.useMH ? 'CHECKED' : '') + '><div class=divNoWrap>' + STrChOHourGlassName[4] + ' (<div class=divNoWrap id=STrChOChampRepairUseMHLabel><font' + (uW.ksoItems[4].count < 100 ? ' color=red>' : '>') + uW.ksoItems[4].count + '</font></div>)</div></td>';
        m += '<td title="' + STrChOHourGlassTDLabel[5] + '"><input class=STrChOCheckbox type=checkbox id=STrChOChampRepairUseAH ' + (STrChOChampRepairData.useAH ? 'CHECKED' : '') + '><div class=divNoWrap>' + STrChOHourGlassName[5] + ' (<div class=divNoWrap id=STrChOChampRepairUseAHLabel><font' + (uW.ksoItems[5].count < 100 ? ' color=red>' : '>') + uW.ksoItems[5].count + '</font></div>)</div></td>';
        m += '<td title="' + STrChOHourGlassTDLabel[6] + '"><input class=STrChOCheckbox type=checkbox id=STrChOChampRepairUseWH ' + (STrChOChampRepairData.useWH ? 'CHECKED' : '') + '><div class=divNoWrap>' + STrChOHourGlassName[6] + ' (<div class=divNoWrap id=STrChOChampRepairUseWHLabel><font' + (uW.ksoItems[6].count < 100 ? ' color=red>' : '>') + uW.ksoItems[6].count + '</font></div>)</div></td>';
        m += '</tr>';
        m += '<tr>';
        m += '<td title="' + STrChOHourGlassTDLabel[7] + '"><input class=STrChOCheckbox type=checkbox id=STrChOChampRepairUseDH ' + (STrChOChampRepairData.useDH ? 'CHECKED' : '') + '><div class=divNoWrap>' + STrChOHourGlassName[7] + ' (<div class=divNoWrap id=STrChOChampRepairUseDHLabel><font' + (uW.ksoItems[7].count < 100 ? ' color=red>' : '>') + uW.ksoItems[7].count + '</font></div>)</div></td>';
        m += '<td title="' + STrChOHourGlassTDLabel[8] + '"><input class=STrChOCheckbox type=checkbox id=STrChOChampRepairUseEH ' + (STrChOChampRepairData.useEH ? 'CHECKED' : '') + '><div class=divNoWrap>' + STrChOHourGlassName[8] + ' (<div class=divNoWrap id=STrChOChampRepairUseEHLabel><font' + (uW.ksoItems[8].count < 100 ? ' color=red>' : '>') + uW.ksoItems[8].count + '</font></div>)</div></td>';
        m += '<td/>';
        m += '</tr>';
        m += '<tr>';
        m += '<td colspan=3><input class=STrChOCheckbox type=checkbox id=STrChOChampRepairOverrideSpeedUps ' + (STrChOChampRepairData.overrideSpeedUp ? "CHECKED" : "") + '>Override hourglasses by using ';
        m += '<select class=STrChOSelect  id=STrChOChampRepairSpeedUp>';
        m += '<option value=0>None</option>';
        for (gls in STrChOHourGlassName) {
            m += '<option value=' + gls + ' ' + (STrChOChampRepairData.useSpeedUp == gls ? 'SELECTED' : '') + '>' + STrChOHourGlassName[gls] + '</option>';
        }
        m += '</select> every time</td>';
        m += '</tr>';
        m += '</table>';
        m += '</div>';


        m += '<div class=STrChOHeader onmouseover="this.style.cursor=\'pointer\'"><img src="'+STrChORightArrow+'"/>&nbsp;REPAIR ITEMS&nbsp;<img class=STrChOReverseImage src="'+STrChORightArrow+'"/></div>';

        m += '<div class=STrChOSection>';
        m += '<table class=STrChOSectionTable>';

        m += '<tr><td>Queue By Level: <select class=STrChOSelect id=STrChOChampRepairByLevel>';
        for (i = 1; i < STrChOMaxChampLevel; i++) m += '<option value=' + i + '>+' + i + '</option>';
        m += '</select>&nbsp;<input id=STrChOChampRepairByLevelAdd class=STrChOButton type=button value="Add"/></td></tr>';


        m += '<tr><td>Queue By Preset Tag: <select class=STrChOSelect id=STrChOChampRepairPresetTagList>';
        var presetsList = "";
        if (STrChOMaxChampions != 0)  {
            for (var i = 1; i < STrChOMaxChampions + 1; i++) {
                presetsList += '<option value="' + i + '">' + i + ' (' + STrChOChampPresetData.presetNames[i-1] + ')</option>';
            }
        }
        m += presetsList;
        m += "</select>&nbsp;<input id=STrChOChampRepairPresetTag class=STrChOButton type=button value='Add'/></td></tr>";

        m += '<tr><td><div style="max-width:90%;">Item: <select class=STrChOSelect style="white-space:nowrap;display:inline-block;max-width: 200px;" id=STrChOChampRepairList>';
        m += '</select><input id=STrChOChampRepairAdd type=button class=STrChOButton value="Add"/>&nbsp;<input id=STrChOChampRepairAddAll class=STrChOButton type=button value="Add All">&nbsp;<input id=STrChOChampRepairRefresh class=STrChOButton type=button value="Refresh List"></div></td></tr>';

        m += '</table>';
        m += '</div>';


        m += '<div class=STrChOHeader>&nbsp;REPAIR LIST&nbsp;</div>';

        m += '<div>';
        m += '<table class=STrChOSectionTable>';

        m += '<tr><td colspan=2>';
        m += '<div id=STrChOChampRepairQScroll style="position: static; width: 100%; height: 350px; overflow-x: auto; overflow-y: auto;">';
        m += '<div id=STrChOChampRepairQDiv></div>';
        m += '</div>';
        m += '</td></tr>';

        m += '<tr align=center><td><div><input style="float: left;" id=STrChOChampRepairClear class=STrChOButton type=button value="Clear Queue"/></div></td><td><div><input style="float: right;" id=STrChOChampRepairClearF class=STrChOButton type=button value="Clear Repaired"/></div></td></tr>';

        m += '</table>';
        m += '</div>';
        m += '</div>';

		t.mydiv.innerHTML = '<div>' + m + '</div>';

        document.getElementById('STrChOChampRepairSaveSettings').addEventListener('click', function () {
            SaveSettingsToFile(STrChOChampRepairData);
        }, false);
        document.getElementById('STrChOChampRepairLoadSettings').addEventListener('click', function () {
            var loader = document.getElementById('STrChOSettingsFile');
            loader.addEventListener('change', function () {
                LoadSettingsFromFile(STrChOChampRepairData, Tabs.champRepair);
            }, false);
            loader.click();
        }, false);

        var header = document.getElementsByClassName('STrChOHeader');
        for (var head=0;head<header.length;head++) {
            header[head].addEventListener('click', sectionOpener, false);
        }

        t.refreshAetherDisplay();

        document.getElementById('STrChOChampRepairUseWH').addEventListener('change', function () {
            STrChOChampRepairData.useWH = document.getElementById('STrChOChampRepairUseWH').checked;
            SAVESTrChOChampRepairData();
            if (STrChOChampRepairData.useWH) t.doAction();
        }, false);

        document.getElementById('STrChOChampRepairUseDH').addEventListener('change', function () {
            STrChOChampRepairData.useDH = document.getElementById('STrChOChampRepairUseDH').checked;
            SAVESTrChOChampRepairData();
            if (STrChOChampRepairUseDH.useDH) t.doAction();
        }, false);

        document.getElementById('STrChOChampRepairUseEH').addEventListener('change', function () {
            STrChOChampRepairData.useEH = document.getElementById('STrChOChampRepairUseEH').checked;
            SAVESTrChOChampRepairData();
            if (STrChOChampRepairData.useEH) t.doAction();
        }, false);

        document.getElementById('STrChOChampRepairUseSH').addEventListener('change', function () {
            STrChOChampRepairData.useSH = document.getElementById('STrChOChampRepairUseSH').checked;
            SAVESTrChOChampRepairData();
            if (STrChOChampRepairData.useSH) t.doAction();
        }, false);

        document.getElementById('STrChOChampRepairUseKH').addEventListener('change', function () {
            STrChOChampRepairData.useKH = document.getElementById('STrChOChampRepairUseKH').checked;
            SAVESTrChOChampRepairData();
            if (STrChOChampRepairData.useKH) t.doAction();
        }, false);

        document.getElementById('STrChOChampRepairUseGH').addEventListener('change', function () {
            STrChOChampRepairData.useGH = document.getElementById('STrChOChampRepairUseGH').checked;
            SAVESTrChOChampRepairData();
            if (STrChOChampRepairData.useGH) t.doAction();
        }, false);

        document.getElementById('STrChOChampRepairUseMH').addEventListener('change', function () {
            STrChOChampRepairData.useMH = document.getElementById('STrChOChampRepairUseMH').checked;
            SAVESTrChOChampRepairData();
            if (STrChOChampRepairData.useMH) t.doAction();
        }, false);

        document.getElementById('STrChOChampRepairUseAH').addEventListener('change', function () {
            STrChOChampRepairData.useAH = document.getElementById('STrChOChampRepairUseAH').checked;
            SAVESTrChOChampRepairData();
            if (STrChOChampRepairData.useAH) t.doAction();
        }, false);

        document.getElementById('STrChOChampRepairHourglassLevelSpecific').addEventListener('change', function () {
            STrChOChampRepairData.hourglassLevelSpecific = document.getElementById('STrChOChampRepairHourglassLevelSpecific').checked;
            SAVESTrChOChampRepairData();
            t.doAction();
        }, false);

        document.getElementById('STrChOChampRepairHourglassQualitySpecific').addEventListener('change', function () {
            STrChOChampRepairData.hourglassQualitySpecific = document.getElementById('STrChOChampRepairHourglassQualitySpecific').checked;
            SAVESTrChOChampRepairData();
            t.doAction();
        }, false);

        document.getElementById('STrChOChampRepairOverrideSpeedUps').addEventListener('change', function () {
            STrChOChampRepairData.overrideSpeedUp = document.getElementById('STrChOChampRepairOverrideSpeedUps').checked;
            SAVESTrChOChampRepairData();
            if (STrChOChampRepairData.overrideSpeedUp) t.doAction();
        }, false);

        document.getElementById('STrChOChampRepairSpeedUp').addEventListener('change', function () {
            STrChOChampRepairData.useSpeedUp = document.getElementById('STrChOChampRepairSpeedUp').value;
            SAVESTrChOChampRepairData();
        }, false);

        document.getElementById('STrChOChampRepairHourglassLevel').addEventListener('change', function () {
            STrChOChampRepairData.hourglassLevel = document.getElementById('STrChOChampRepairHourglassLevel').value;
            SAVESTrChOChampRepairData();
            t.doAction();
        }, false);

        document.getElementById('STrChOChampRepairHourglassQuality').addEventListener('change', function () {
            STrChOChampRepairData.hourglassQuality = document.getElementById('STrChOChampRepairHourglassQuality').value;
            SAVESTrChOChampRepairData();
            t.doAction();
        }, false);

        document.getElementById('STrChOChampRepairPower').addEventListener('click', function () {
            t.togglePower(this);
        }, false);

        document.getElementById('STrChOChampRepairByLevelAdd').addEventListener('click', function () {
            var t = Tabs.champRepair;
            var level = document.getElementById('STrChOChampRepairByLevel').value;
            for (chId in uW.kocChampionItems) {
                var champItem = uW.kocChampionItems[chId];
                if (champItem == null || !champItem) continue;
                if (!(champItem.status == CM.CHAMPION.STATUS_BROKEN_UPGRADE || champItem.status == CM.CHAMPION.STATUS_BROKEN_ENHANCE)) continue;
                if (champItem.level != level) continue;
                t.addQueue(chId);
            }
        }, false);

        document.getElementById('STrChOChampRepairPresetTag').addEventListener('click', function () {
            var t = Tabs.champRepair;
            var presetTagNum = document.getElementById('STrChOChampRepairPresetTagList').value;
            var presetTag = getChampPresetObject(parseInt(presetTagNum));
            for (var ptId in presetTag) {
                var champItem = uW.kocChampionItems[ptId];
                if (champItem == null || !champItem) continue;
                if (champItem.status == CM.CHAMPION.STATUS_BROKEN_UPGRADE || champItem.status == CM.CHAMPION.STATUS_BROKEN_ENHANCE) t.addQueue(ptId);
            }
        }, false);

        document.getElementById('STrChOChampRepairClear').addEventListener('click', function () {
            t.deleteQueue();
        }, false);

        document.getElementById('STrChOChampRepairClearF').addEventListener('click', function () {
            var temp = [];
            while (STrChOChampRepairData.items.length > 0) {
                var chId = STrChOChampRepairData.items.pop();
                var champItem = uW.kocChampionItems[chId];
                if (champItem == null || !champItem) continue;
                if (champItem.status == CM.CHAMPION.STATUS_BROKEN_UPGRADE || champItem.status == CM.CHAMPION.STATUS_BROKEN_ENHANCE) temp.push(chId);
            }
            while (temp.length > 0) STrChOChampRepairData.items.push(temp.pop());
            STrChOChampRepairData.index = 0
            SAVESTrChOChampRepairData();
            t.populateChampRepairListBox();
            t.buildChampRepairDisplay();
        }, false);

        document.getElementById('STrChOChampRepairAdd').addEventListener('click', function () {
            t.addQueue();
        }, false);

        document.getElementById('STrChOChampRepairAddAll').addEventListener('click', function () {
            t.addAllQueue();
        }, false);

        document.getElementById('STrChOChampRepairRefresh').addEventListener('click', function () {
            t.populateChampRepairListBox();
        }, false);

        if (STrChOChampRepairData.active)
            t.setStatus('Loading...');
        else
            t.setStatus('Powered Off');

        var d = 2 + Math.random() * 8;

        if (Seed.queue_champion == null) {
            for (chId in uW.kocChampionItems) {
                var champItem = uW.kocChampionItems[chId];
                if (champItem.status == CM.CHAMPION.STATUS_REPAIRING_ENHANCE || champItem.status == CM.CHAMPION.STATUS_REPAIRING_UPGRADE) {
                    Seed.queue_champion = {};
                    Seed.queue_champion.start = parseInt(champItem.start);
                    Seed.queue_champion.end = parseInt(champItem.eta);
                    Seed.queue_champion.itemId = champItem.equipmentId;
                    break;
                }
            }
        }

        if (Seed.queue_champion != null && Seed.queue_champion.end != null) {
            var repairTimeLeft = Seed.queue_champion.end - unixTime();
            t.repairEnd = Seed.queue_champion.end;
            t.repairId = Seed.queue_champion.itemId;
            var n = new Date(t.repairEnd * 1000);

            t.setStatus("Waiting until " + n.toLocaleTimeString() + " for repair to complete.  Item: " + uW.kocChampionItems[t.repairId].name);

            if (STrChOChampRepairData.useAH || STrChOChampRepairData.useGH || STrChOChampRepairData.useKH || STrChOChampRepairData.useMH || STrChOChampRepairData.useSH || STrChOChampRepairData.useWH || STrChOChampRepairData.useDH || STrChOChampRepairData.useEH || (STrChOChampRepairData.overrideSpeedUp && STrChOChampRepairData.useSpeedUp > 0)) {
                var champItem = uW.kocChampionItems[t.repairId];
                var chQuality = champItem.rarity;
                var chLevel = champItem.level;
                var useThoseSpeedups = true;
                if (STrChOChampRepairData.hourglassQualitySpecific && chQuality < STrChOChampRepairData.hourglassQuality) useThoseSpeedups = false;
                if (STrChOChampRepairData.hourglassLevelSpecific && chLevel < STrChOChampRepairData.hourglassLevel) useThoseSpeedups = false;
                if (STrChOChampRepairData.overrideSpeedUp) useThoseSpeedups = true;
                if (useThoseSpeedups) {
                    t.doingSpeedup = true;
                    setTimeout(function () { t.doSpeedup(); }, 2000);
                }
            }

            setTimeout(t.clearRepair, (repairTimeLeft + 1) * 5000);
            if (repairTimeLeft > 0) d += repairTimeLeft;
        }

        t.populateChampRepairListBox();
        t.buildChampRepairDisplay();


        if (t.timerH == null) t.timerH = setTimeout(t.doAction, d * 1000);

    },

	hide: function () {},

    refreshAetherDisplay : function () {
        document.getElementById('STrChOChampRepairAetherDisplay').innerHTML = displayCityAstone();
    },

	show: function () {
		var t = Tabs.champRepair;
        t.refreshAetherDisplay();
        t.populateChampRepairListBox();
        t.buildChampRepairDisplay();
	},

    deleteQueue: function () {
        var t = Tabs.champRepair
        STrChOChampRepairData.items = [];
        SAVESTrChOChampRepairData();
        t.populateChampRepairListBox();
        t.buildChampRepairDisplay();
    },

    doSpeedup: function () {
        var t = Tabs.champRepair;

        var endTime = t.repairEnd;
        var startTime = unixTime();
        var secondsForRepair = endTime - startTime;
        var divId = "";

        t.speedup = 0;

        if (secondsForRepair > 0 && STrChOChampRepairData.overrideSpeedUp && STrChOChampRepairData.useSpeedUp > 0) {
            t.speedup = STrChOChampRepairData.useSpeedUp;
        } else {
            if (t.speedup == 0 && secondsForRepair >= HOURGLASSES_TIME_MIN_THRESHOLD.day25 && STrChOChampRepairData.useAH && uW.ksoItems[8].count > 0) { t.speedup = 8; }
            if (t.speedup == 0 && secondsForRepair >= HOURGLASSES_TIME_MIN_THRESHOLD.hour24 && STrChOChampRepairData.useAH && uW.ksoItems[7].count > 0) { t.speedup = 7; }
            if (t.speedup == 0 && secondsForRepair >= HOURGLASSES_TIME_MIN_THRESHOLD.hour15 && STrChOChampRepairData.useAH && uW.ksoItems[6].count > 0) { t.speedup = 6; }
            if (t.speedup == 0 && secondsForRepair >= HOURGLASSES_TIME_MIN_THRESHOLD.hour8 && STrChOChampRepairData.useAH && uW.ksoItems[5].count > 0) { t.speedup = 5; }
            if (t.speedup == 0 && secondsForRepair >= HOURGLASSES_TIME_MIN_THRESHOLD.hour25 && STrChOChampRepairData.useMH && uW.ksoItems[4].count > 0) { t.speedup = 4; }
            if (t.speedup == 0 && secondsForRepair >= HOURGLASSES_TIME_MIN_THRESHOLD.hour1 && STrChOChampRepairData.useGH && uW.ksoItems[3].count > 0) { t.speedup = 3; }
            if (t.speedup == 0 && secondsForRepair >= HOURGLASSES_TIME_MIN_THRESHOLD.minute15 && STrChOChampRepairData.useKH && uW.ksoItems[2].count > 0) { t.speedup = 2; }
            if (t.speedup == 0 && secondsForRepair >= HOURGLASSES_TIME_MIN_THRESHOLD.minute1 && STrChOChampRepairData.useSH && uW.ksoItems[1].count > 0) { t.speedup = 1; }
        }

        switch (t.speedup) {
            case "1":
            case 1:
                secondsForRepair -= HOURGLASSES_TIME.minute1;
                divId = 'STrChOChampRepairUseSHLabel';
                break;
            case "2":
            case 2:
                secondsForRepair -= HOURGLASSES_TIME.minute15;
                divId = 'STrChOChampRepairUseKHLabel';
                break;
            case "3":
            case 3:
                secondsForRepair -= HOURGLASSES_TIME.hour1;
                divId = 'STrChOChampRepairUseGHLabel';
                break;
            case "4":
            case 4:
                secondsForRepair -= HOURGLASSES_TIME.hour25;
                divId = 'STrChOChampRepairUseMHLabel';
                break;
            case "5":
            case 5:
                secondsForRepair -= HOURGLASSES_TIME.hour8;
                divId = 'STrChOChampRepairUseAHLabel';
                break;
            case "6":
            case 6:
                secondsForRepair -= HOURGLASSES_TIME.hour15;
                divId = 'STrChOChampRepairUseWHLabel';
                break;
            case "7":
            case 7:
                secondsForRepair -= HOURGLASSES_TIME.hour24;
                divId = 'STrChOChampRepairUseDHLabel';
                break;
            case "8":
            case 8:
                secondsForRepair -= HOURGLASSES_TIME.day25;
                divId = 'STrChOChampRepairUseEHLabel';
                break;
        }

        if (t.speedup != 0) {
            t.setResult('Used ' + uW.ksoItems[t.speedup].name);
            var divCount = uW.ksoItems[t.speedup].count - 1;
            var divSpeedups = document.getElementById(divId);
            divSpeedups.innerHTML = divCount;
            uW.modal_speedup_apply("champion", t.speedup, t.repairId);

            if (secondsForRepair <= 0) {
                secondsForRepair = 0;
                endTime = startTime;
                t.clearTimerH = setTimeout(t.clearRepair, 1000);
            } else {
                endTime = unixTime() + secondsForRepair;
                t.repairEnd = endTime;
                var n = new Date(t.repairEnd * 1000);
                var champItem = uW.kocChampionItems[t.repairId];
                if (champItem) {
                    t.setStatus("Repair begun ... Repair will be complete at " + n.toLocaleTimeString() + ". Item: " + champItem.name);
                    t.clearTimerH = setTimeout(t.clearRepair, secondsForRepair * 1000);
                }
            }
            t.buildChampRepairDisplay();
            t.repairEnd = endTime;
            setTimeout(function () { t.doSpeedup(); }, 1000);
        }
    },

    selectNext: function () {

        var l = STrChOChampRepairData.items.length;
        for (i = 0; i < l; i++) {

            var champItem = uW.kocChampionItems[STrChOChampRepairData.items[i]];
            if (champItem == null || !champItem) continue;
            if ((champItem != null) && (champItem.status == CM.CHAMPION.STATUS_BROKEN_ENHANCE || champItem.status == CM.CHAMPION.STATUS_BROKEN_UPGRADE)) {
                STrChOChampRepairData.index = i;
                SAVESTrChOChampRepairData();
                return;
            }
        }

        // if we get here, the queue is complete
        STrChOChampRepairData.index = -1;

        SAVESTrChOChampRepairData();
    },

    doAction: function () {
        var t = Tabs.champRepair;
        t.populateChampRepairListBox();

        if (STrChOChampUpgradeData.active) {
            t.setStatus('Waiting for upgrade tab to finish...');
            if (STrChOChampRepairData.active) t.togglePower();
            return;
        }

        if (!STrChOChampRepairData.active) {
            t.setStatus("Powered Off");
            return;
        } else {
            var retryTime = STrChOGeneralOptions.retryInterval;

            try {  // check if repair is done
                var ti = t.clearRepair();
                if (ti <= 0) {  // repair is done

                    t.selectNext();

                    if (STrChOChampRepairData.index < 0) {
                        t.setStatus("Reached end of queue.")
                        t.setResult("");
                        SAVESTrChOChampRepairData();
                    } else {
                        var champItem = uW.kocChampionItems[STrChOChampRepairData.items[STrChOChampRepairData.index]];
                        if (champItem) {
                            t.repairId = champItem.equipmentId;
                            t.doRepair(champItem.equipmentId);
                        }
                    }

                } else {  // come back after repair is complete
                    retryTime = ti + 5;
                    var n = new Date(t.repairEnd * 1000);
                    t.setStatus("Waiting until " + n.toLocaleTimeString() + " for repair to complete.  Item: " + uW.kocChampionItems[t.repairId].name);
                    if (STrChOChampRepairData.useSH || STrChOChampRepairData.useKH || STrChOChampRepairData.useGH || STrChOChampRepairData.useMH || STrChOChampRepairData.useAH || STrChOChampRepairData.useWH || STrChOChampRepairData.useDH || STrChOChampRepairData.useEH || (STrChOChampRepairData.overrideSpeedUp && STrChOChampRepairData.useSpeedUp > 0)) {
                        var champItem = uW.kocChampionItems[t.repairId];
                        var STrChOChampQuality = champItem.rarity;
                        var STrChOChampLevel = champItem.level;
                        var useThoseSpeedups = true;
                        if (STrChOChampRepairData.hourglassQualitySpecific && STrChOChampQuality < STrChOChampRepairData.hourglassQuality) useThoseSpeedups = false;
                        if (STrChOChampRepairData.hourglassLevelSpecific && STrChOChampLevel < STrChOChampRepairData.hourglassLevel) useThoseSpeedups = false;
                        if (STrChOChampRepairData.overrideSpeedUp) useThoseSpeedups = true;
                        if (useThoseSpeedups) {
                            t.doingSpeedup = true;
                            setTimeout(function () { t.doSpeedup(); }, 2000);
                        }
                        retryTime = 1;
                    }
                }
            } catch (e) {
            }
            // recycle
            clearTimeout(t.timerH);
            t.timerH = setTimeout(t.doAction, retryTime * 1000);
            t.buildChampRepairDisplay();
        }
    },

    addQueue: function (Id) {
        var t = Tabs.champRepair;

        if (Id == null) {
            var chId = document.getElementById('STrChOChampRepairList').value;
        } else {
            var chId = Id;
        }

        if (chId == 0) return;

        var item_count = STrChOChampRepairData.items.length;

        if (item_count > 0) {
            for (var item_index = 0; item_index < item_count; item_index++) {
                if (chId == STrChOChampRepairData.items[item_index]) return;
            }
        }

        STrChOChampRepairData.items.push(chId);
        SAVESTrChOChampRepairData();
        t.populateChampRepairListBox();
        t.buildChampRepairDisplay();
    },

    addAllQueue: function () {
        var t = Tabs.champRepair;

        for (chId in uW.kocChampionItems) {
            var champItem = uW.kocChampionItems[chId];
            if (champItem == null || !champItem) continue;
            if (champItem.status == CM.CHAMPION.STATUS_BROKEN_UPGRADE || champItem.status == CM.CHAMPION.STATUS_BROKEN_ENHANCE) {
                t.addQueue(chId);
            }
        }

    },

    populateChampRepairListBox: function () {
        var repairList = document.getElementById('STrChOChampRepairList');
        var m = '<option value=0>--Items--</option>';

        var item_count = STrChOChampRepairData.items.length;

        for (chId in uW.kocChampionItems) {
            var champItem = uW.kocChampionItems[chId];
            if (champItem == null || !champItem) continue;
            if (champItem.status != CM.CHAMPION.STATUS_BROKEN_ENHANCE && champItem.status != CM.CHAMPION.STATUS_BROKEN_UPGRADE) continue; //item not broken, move on

            var foundIt = false;
            for (var item_index = 0; item_index < item_count; item_index++) {
                if (chId == STrChOChampRepairData.items[item_index]) {
                    foundIt = true;
                    break;
                }
            }
            if (!foundIt) {
                var optionText = champItem.name;
                m += '<option value="' + chId + '">' + optionText + '</option>';
            }
        }
        repairList.innerHTML = m;
    },

    deleteRepairItem: function (index) {  // delete an item from the queue
        var t = Tabs.champRepair;
        STrChOChampRepairData.items.splice(index, 1);
        SAVESTrChOChampRepairData();
        t.populateChampRepairListBox();
        t.buildChampRepairDisplay();
    },

    moveRepairUpRow: function (index) {
        if (index < 1) return;
        var t = Tabs.champRepair;
        var q = STrChOChampRepairData.items.splice(index, 1);
        STrChOChampRepairData.items.splice(index - 1, 0, q);

        if (index == STrChOChampRepairData.index)
            STrChOChampRepairData.index--;
        else if (STrChOChampRepairData.index == index - 1)
            STrChOChampRepairData.index++;

        SAVESTrChOChampRepairData();
        t.buildChampRepairDisplay();
    },

    moveRepairDownRow: function (index) {
        if (index > (STrChOChampRepairData.items.length - 2)) return;

        var t = Tabs.champRepair;
        var q = STrChOChampRepairData.items.splice(index, 1);
        STrChOChampRepairData.items.splice(index + 1, 0, q);

        if (i == STrChOChampRepairData.index)
            STrChOChampRepairData.index++;
        else if (STrChOChampRepairData.index == i + 1)
            STrChOChampRepairData.index--;

        SAVESTrChOChampRepairData();
        t.buildChampRepairDisplay();

    },

    setStatus: function (s) { document.getElementById('STrChOChampRepairStatus').innerHTML = "<div>" + s + "</div>"; },

    setResult: function (s) { document.getElementById('STrChOChampRepairLastResult').innerHTML = "<div>" + s + "</div>"; },

    togglePower: function (obj) {
        var t = Tabs.champRepair;

        var STrChOChampRepairPower = document.getElementById('STrChOChampRepairPower');

        if (STrChOChampRepairData.active) {
            STrChOChampRepairData.active = false;
            STrChOChampRepairPower.value = "Repair = OFF";
            t.setStatus("Powered Off");
            t.setResult("");
        } else {
            STrChOChampRepairData.active = true;
            STrChOChampRepairPower.value = "Repair = ON";
            t.setStatus("Power On");
            t.setResult("");
            STrChOChampUpgradeData.active = false;
            SAVESTrChOChampUpgradeData();
            t.doAction();
        }
        if (!STrChOChampRepairData.active) {

        }
        SAVESTrChOChampRepairData();
    },

    clearRepair: function () {
        var t = Tabs.champRepair;
        var timeUntilDone = 0;

        if (t.repairEnd == 0) {
            return timeUntilDone;
        }
        timeUntilDone = t.repairEnd - unixTime();

        if (timeUntilDone <= 0) {
            if (t.repairId != 0 && uW.kocChampionItems[t.repairId] != null) {
                if (uW.kocChampionItems[t.repairId].status != CM.CHAMPION.STATUS_INACTIVE
                               || uW.kocChampionItems[t.repairId].status != CM.CHAMPION.STATUS_ACTIVE) {
                    t.setStatus("Repair time complete.");
                    document.getElementById('STrChOChampRepairState' + t.repairId).className = 'STrChOSuccess';
                } else {
                }
                t.repairId = 0;
            }

        }
        return timeUntilDone;
    },

    doRepair: function (rItemId) {
        var t = Tabs.champRepair;
        var params = uW.Object.clone(ajfx);

        if (STrChOChampRepairData.active == false || rItemId == 0 || uW.kocChampionItems[rItemId] == null) return;

        var theItem = uW.kocChampionItems[rItemId];

        params.action = "6";
        params.eid = rItemId;
        params.cityId = uW.currentcityid;
        params.gems = 0;

        new AjaxRequest(uW.g_ajaxpath + "ajax/ceEquipmentManagerAjax.php" + uW.g_ajaxsuffix, {
            method: "post",
            parameters: params,
            loading: true,
            onSuccess: function (transport) {
                var rslt = eval("(" + transport.responseText + ")");
                if (rslt.ok) {
                    var item = uW.kocChampionItems[rslt.equipmentId];
                    ActionLog('Starting repair for Champion item ' + item.name);
                    if (!Seed.queue_champion) Seed.queue_champion = {};
                    Seed.queue_champion.itemId = rslt.equipmentId;
                    Seed.queue_champion.start = parseInt(rslt.start);
                    Seed.queue_champion.end = parseInt(rslt.eta);
                    t.repairId = parseInt(rslt.equipmentId);
                    t.repairEnd = rslt.eta;
                    var n = new Date(t.repairEnd * 1000);
                    t.setStatus("Repair begun ... Repair will be complete at " + n.toLocaleTimeString() + ". Item: " + item.name);
                    var x = rslt.eta - unixTime();
                    t.clearTimerH = setTimeout(t.clearRepair, (x + 1) * 1000);
                    if (item.status == CM.CHAMPION.STATUS_BROKEN_ENHANCE)
                        item.status = CM.CHAMPION.STATUS_REPAIRING_ENHANCE;
                    else
                        item.status = CM.CHAMPION.STATUS_REPAIRING_UPGRADE;

                    t.buildChampRepairDisplay();
                }
                else {
                    // regrab the end times in case this is caused by a manual repair
                    if (Seed.queue_champion && Seed.queue_champion.end && Seed.queue_champion.itemId) {
                        t.repairEnd = Seed.queue_champion.end;
                        t.repairId = Seed.queue_champion.itemId;
                    }

                    if (feedback.index("There is one equipment in repairing queue") > 0) return; // item is still be repaired

                    if (rslt.feedback) {
                        t.setStatus(rslt.feedback);
                        uW.kocChampionItems[rItemId].status = CM.CHAMPION.STATUS_INACTIVE;
                        t.clearRepair();
                    }

                }
                return;
            },
            onFailure: function (ttt) {  // this usually means a repair is in progress (such as a manualrepair). Grab the seed data (if possible)
                if (Seed.queue_champion && Seed.queue_champion.end) {
                    t.repairEnd = Seed.queue_champion.end;
                    t.repairId = Seed.queue_champion.itemId;
                }
                return;
            }
        });
        return;
    },

    buildChampRepairDisplay: function () {
        var t = Tabs.champRepair;

        STrChOChampRepairQDiv = document.getElementById('STrChOChampRepairQDiv');

        var m = '<table id=STrChOChampRepair width=100% class=trTabPad>';

        var item_count = STrChOChampRepairData.items.length;

        //TODO
        //var totalRepairTime = t.calcRepairTime();
        //if (totalRepairTime > 0) $("#trRepair").append("<caption><b><i>Total Repair Time (" + item_count + " items): " + repairTimeToText(totalRepairTime) + "</i></b></caption>");

        m += '<tr><th width=10%>Remove</th><th width=5%>Reorder</th><th width=8%>Status</th><th width=25%>Item</th></tr>';

        if (item_count > 0) {
            for (var item_index = 0; item_index < item_count; item_index++) {
                var chId = STrChOChampRepairData.items[item_index];

                if (chId == null) {
                    t.deleteRepairItem(item_index);
                    return;
                }
                var champItem = uW.kocChampionItems[chId];
                if (champItem == null || !champItem) {
                    t.deleteRepairItem(item_index);
                    return;
                }

                m += '<tr>';
                m += '<td align=center><div class=STrChORemove id=STrChOChampRepairRemove' + chId + '></div></td>';
                m += '<td align=center><div class=STrChOUpRow id=STrChOChampRepairUpRow' + chId + '></div><div class=STrChODownRow  id=STrChOChampRepairDownRow' + chId + '></div></td>';
                m += '<td align=center><div id=STrChOChampRepairState' + chId + '></div></td>';
                m += '<td align=center><div id=STrChOChampRepairItem' + chId + '>' + champItem.name + '</div></td>';
                m += '</tr>';
            }
            m += '</table>';

            STrChOChampRepairQDiv.innerHTML = m;

            for (var item_index = 0; item_index < item_count; item_index++) {

                var chId = STrChOChampRepairData.items[item_index];

                var champItem = uW.kocChampionItems[chId];

                if (champItem == null || !champItem) continue;

                document.getElementById('STrChOChampRepairRemove' + chId).setAttribute('v1', item_index);
                document.getElementById('STrChOChampRepairRemove' + chId).addEventListener('click', function () {
                    var qIndex = this.getAttribute('v1');
                    t.deleteRepairItem(qIndex);
                }, false);

                document.getElementById('STrChOChampRepairUpRow' + chId).setAttribute('v1', item_index);
                document.getElementById('STrChOChampRepairUpRow' + chId).addEventListener('click', function () {
                    var qIndex = this.getAttribute('v1');
                    t.moveRepairUpRow(qIndex);
                }, false);

                document.getElementById('STrChOChampRepairDownRow' + chId).setAttribute('v1', item_index);
                document.getElementById('STrChOChampRepairDownRow' + chId).addEventListener('click', function () {
                    var qIndex = this.getAttribute('v1');
                    t.moveRepairDownRow(qIndex);
                }, false);

                var champItem = uW.kocChampionItems[chId];

                if (!champItem || !(champItem.equipmentId)) {
                    document.getElementById('STrChOChampRepairState' + chId).innerHTML = '<div style="text-align:center"> ??</div>';

                } else if (champItem.status == CM.CHAMPION.STATUS_ACTIVE) {
                    document.getElementById('STrChOChampRepairState' + chId).className = 'STrChOSuccess';

                } else if (champItem.status == CM.CHAMPION.STATUS_BROKEN_UPGRADE || champItem.status == CM.CHAMPION.STATUS_BROKEN_ENHANCE) {
                    document.getElementById('STrChOChampRepairState' + chId).className = 'STrChOBroken';

                } else if (champItem.status == CM.CHAMPION.STATUS_REPAIRING_UPGRADE || champItem.status == CM.CHAMPION.STATUS_REPAIRING_ENHANCE) {
                    document.getElementById('STrChOChampRepairState' + chId).className = 'STrChOHammer';
                } else {
                    document.getElementById('STrChOChampRepairState' + chId).innerHTML = '<div class=STrChOGoButton></div>';
                }
            }
        } else {
            m += '</table>';
            STrChOChampRepairQDiv.innerHTML = m;
        }
    },

}

Tabs.champOrganizer = {
	tabOrder: 203,
	tabLabel: 'ORGANIZER',
	tabColor: 'brown',
    tabHeader: 'CHAMP HALL ORGANIZER',
    champItemLists: [],
    sortEffect: "none",
    buffType: "both",
    panelId: -1,
    panelType: "upgrade",
    panelNextLevel: 2,
    switchingPresets: false,

	init: function (div) {
		var t = Tabs.champOrganizer;
		t.mydiv = div;

        t.sortEffect = STrChOChampUpgradeData.effectSelected;
        t.buffType = STrChOChampUpgradeData.buffSelected;

		var m = '<div class=STrChOHeader>' + t.tabHeader + '</div>';

        m += '<div>';
        m += '<table class=STrChOSectionTable>';
        m += '<tr><td align=center><b>You Have <i><div class=divNoWrap id=STrChOCountChampCards></div></i> Champ Cards</b></td></tr>';
        m += '<tr><td>';

        m += 'Sort: <select class=STrChOSelect id=STrChOChampSortEffects>';
        m += '<option value="none">--Effect--</option>';
        for (efx in champEffects) m += '<option value="' + champEffects[efx] + '">' + champEffects[efx] + '</option>';
        m += '</select>';
        m += '<select class=STrChOSelect id=STrChOChampBuffType>';
        m += '<option value="both">Either</option>';
        m += '<option value="buff">Buff</option>';
        m += '<option value="debuff">Debuff</option>';
        m += '</select>';

        m += '<input id=STrChOChampSortInactive class=STrChOCheckbox type=checkbox ' + (STrChOChampUpgradeData.sortInactive ? ' CHECKED' : '') + '/> Include Inactive ';
        m += '<input id=STrChOChampIgnoreBroken class=STrChOCheckbox type=checkbox ' + (STrChOChampUpgradeData.ignoreBroken ? ' CHECKED' : '') + '/> Ignore Broken';
        m += '</td></tr>';
        m += '</table>';
        m += '</div>';

        m += '<div id=STrChOChampOrganizerScroll style="position: static; width: ' + (dlgWidth -  (dlgWidthOffset + dlgWidthMenu)) + 'px; height: ' + (dlgHeight - (dlgHeightOffset*2.5)) + 'px; overflow-x: hidden; overflow-y: auto;">';


        m += '<div class=STrChOHeader onmouseover="this.style.cursor=\'pointer\'"><img src="'+STrChORightArrow+'"/>&nbsp;CARD FILTER&nbsp;<img class=STrChOReverseImage src="'+STrChORightArrow+'"/></div>';

        m += '<div class=STrChOSection>';
        m += '<table class=STrChOSectionTable cellspacing=0 cellpadding=0>';

        m += '<tr><td colspan=3>';
        m += 'Filter By Effects: <select class=STrChOSelect id=STrChOChampFilterEffects>';
        m += '<option value="none">--Effect--</option>';
        for (efx in champEffects) m += '<option value="' + champEffects[efx] + '">' + champEffects[efx] + '</option>';
        m += '</select>';
        m += '<select class=STrChOSelect id=STrChOChampFilterBuffType>';
        m += '<option value="buff">Buff</option>';
        m += '<option value="debuff">Debuff</option>';
        m += '</select>';
        m += '</td></tr>';

        m += '<tr><td colspan=3><hr class=STrChOHRCenter></td></tr>';

        m += '<tr><td>Faction</td><td>Quality</td><td>Level</td></tr>';

        m += '<tr>';

        m += '<td><div id=STrChOChampFactionFilterRow style="float: left; width: 100px; border:2px solid #ccc; height: 105px; overflow-y: scroll; background-color: white;">';
        for (var fact = 0; fact < STrChOFactions.length; fact++) m += '<input id=STrChOChampFaction' + STrChOFactions[fact] + ' class=STrChOCheckbox type=checkbox  CHECKED />' + STrChOFactions[fact].capitalizeFirstLetter() + '<br />';

        m += '</div></td>';

        m += '<td><div id=STrChOChampQualityFilterRow style="float: left; width: 120px; border:2px solid #ccc; height: 105px; overflow-y: scroll; background-color: white;">';
        for (var qual = 0; qual < champCardQualities.length; qual++) m += '<input id=STrChOChampQuality' + qual + ' class=STrChOCheckbox type=checkbox  CHECKED />' + champCardQualities[qual].capitalizeFirstLetter() + '<br />';
        m += '</div></td>';

        m += '<td><div id=STrChOChampLevelFilterRow style="float: left; width: 120px; border:2px solid #ccc; height: 105px; overflow-y: scroll; background-color: white;">';
        for (lvl = 0; lvl <= STrChOMaxChampLevel; lvl++) {
            m += '<input id=STrChOChampLevel' + lvl + ' class=STrChOCheckbox type=checkbox CHECKED />' + lvl + '<br /> ';
        }
        m += '</div></td>';

        m += '</tr>';

        m += '<tr>';
        m += '<td/>';
        m += '<td><input style="width:120px;" id=STrChOChampUnselectAllQualities class=STrChOButton type=button value="Unselect All"></td>';
        m += '<td><input style="width:120px;" id=STrChOChampUnselectAllLevels class=STrChOButton type=button value="Unselect All"></td>';
        m += '</tr>';
        m += '<tr>';
        m += '<td/>';
        m += '<td><input style="width:120px;" id=STrChOChampSelectAllQualities class=STrChOButton type=button value="Select All"></td>';
        m += '<td><input style="width:120px;" id=STrChOChampSelectAllLevels class=STrChOButton type=button value="Select All"></td>';
        m += '</tr>';

        m += '</table>';
        m += '</div>';

        for (champItemCardType in champItemNames) {
            m += '<div class=STrChOChampOrganizer onmouseover="this.style.cursor=\'pointer\'"><img src="'+STrChORightArrow+'"/>&nbsp;' + champItemNames[champItemCardType].toUpperCase() + '&nbsp;<img class=STrChOReverseImage src="'+STrChORightArrow+'"/></div>';
            m += '<div class=STrChOChampOrganizerSection id=STrChOChampCardSection' + champItemNames[champItemCardType] + '></div>';
        }

		t.mydiv.innerHTML = '<div>' + m + '</div>';

        var champOrganizers = document.getElementsByClassName('STrChOChampOrganizer');
        for (var champOrg=0; champOrg < champOrganizers.length; champOrg++) {
            champOrganizers[champOrg].addEventListener('click', function () {

                var imgs = this.childNodes;
                if (imgs[0].src == STrChODownArrow) {
                    imgs[0].src = STrChORightArrow
                    imgs[2].src = STrChORightArrow
                } else {
                    imgs[0].src = STrChODownArrow
                    imgs[2].src = STrChODownArrow
                }
                var section = this.nextSibling;
                if (section.className != 'STrChOChampOrganizerSection') return;

                if (section.style.display == 'block')
                    section.style.display = 'none';
                else
                    section.style.display = 'block';

            }, false);
        }

        var header = document.getElementsByClassName('STrChOHeader');
        for (var head=0;head<header.length;head++) {
            header[head].addEventListener('click', sectionOpener, false);
        }

        document.getElementById('STrChOChampSortEffects').value = STrChOChampUpgradeData.effectSelected;
        document.getElementById('STrChOChampBuffType').value = STrChOChampUpgradeData.buffSelected;
        document.getElementById('STrChOChampSortInactive').checked = STrChOChampUpgradeData.sortInactive;
        document.getElementById('STrChOChampIgnoreBroken').checked = STrChOChampUpgradeData.ignoreBroken;

        document.getElementById('STrChOChampFilterBuffType').addEventListener('change', function () {
            t.createChampItemList();
            t.paintChampTables();
        }, false);

        document.getElementById('STrChOChampFilterEffects').addEventListener('change', function () {
            t.createChampItemList();
            t.paintChampTables();
        }, false);

        document.getElementById('STrChOChampSortEffects').addEventListener('change', function () {
            t.sortEffect = this.value;
            STrChOChampUpgradeData.effectSelected = t.sortEffect;
            SAVESTrChOChampUpgradeData();
            t.createChampItemList();
            t.paintChampTables();
        }, false);

        document.getElementById('STrChOChampBuffType').addEventListener('change', function () {
            t.buffType = this.value;
            STrChOChampUpgradeData.buffSelected = t.buffType;
            SAVESTrChOChampUpgradeData();
            t.createChampItemList();
            t.paintChampTables();
        }, false);

        document.getElementById('STrChOChampSortInactive').addEventListener('click', function () {
            STrChOChampUpgradeData.sortInactive = document.getElementById('STrChOChampSortInactive').checked;
            SAVESTrChOChampUpgradeData();
            t.createChampItemList();
            t.paintChampTables();
        }, false);

        document.getElementById('STrChOChampIgnoreBroken').addEventListener('click', function () {
            STrChOChampUpgradeData.ignoreBroken = document.getElementById('STrChOChampIgnoreBroken').checked;
            SAVESTrChOChampUpgradeData();
            t.createChampItemList();
            t.paintChampTables();
        }, false);

        document.getElementById('STrChOChampUnselectAllQualities').addEventListener('click' , function () {
            for (var qual = 0; qual < champCardQualities.length; qual++) document.getElementById('STrChOChampQuality' + qual).checked = false;
            t.createChampItemList();
            t.paintChampTables();
        }, false);

        document.getElementById('STrChOChampSelectAllQualities').addEventListener('click', function () {
            for (var qual = 0; qual < champCardQualities.length; qual++) document.getElementById('STrChOChampQuality' + qual).checked = true;
            t.createChampItemList();
            t.paintChampTables();
        }, false);

        document.getElementById('STrChOChampQualityFilterRow').addEventListener('change', function () {
            t.createChampItemList();
            t.paintChampTables();
        }, false);


        document.getElementById('STrChOChampUnselectAllLevels').addEventListener('click' , function () {
            for (lvl = 0; lvl <= STrChOMaxChampLevel; lvl++) document.getElementById('STrChOChampLevel' + lvl).checked = false;
            t.createChampItemList();
            t.paintChampTables();
        }, false);

        document.getElementById('STrChOChampSelectAllLevels').addEventListener('click', function () {
            for (lvl = 0; lvl <= STrChOMaxChampLevel; lvl++) document.getElementById('STrChOChampLevel' + lvl).checked = true;
            t.createChampItemList();
            t.paintChampTables();
        }, false);

        document.getElementById('STrChOChampLevelFilterRow').addEventListener('change', function () {
            t.createChampItemList();
            t.paintChampTables();
        }, false);


        document.getElementById('STrChOChampFactionFilterRow').addEventListener('change', function () {
            t.createChampItemList();
            t.paintChampTables();
        }, false);

        t.createChampItemList();
        t.paintChampTables();
	},

	hide: function () {
    },

    createChampItemList: function () {
        var t = Tabs.champOrganizer;

        for (var champItemTypeValue in champItemNames) t.champItemLists[champItemTypeValue] = new Array;

        for (champId in uW.kocChampionItems) {
            var champItem = uW.kocChampionItems[champId];

            // apply filters
            var faction = STrChOFactions[champItem.faction -1];
            var level = champItem.level;
            var champtype = champItem.type;
            var quality = champItem.rarity;
            var isBroken = champItem.status;

            if (STrChOChampUpgradeData.ignoreBroken && (isBroken == CM.CHAMPION.STATUS_BROKEN_UPGRADE || isBroken == CM.CHAMPION.STATUS_BROKEN_ENHANCE)) continue;
            if (!document.getElementById('STrChOChampQuality' + quality)) continue;
            if (!document.getElementById('STrChOChampQuality' + quality).checked) continue;
            if (!document.getElementById('STrChOChampFaction' + faction)) continue;
            if (!document.getElementById('STrChOChampFaction' + faction).checked) continue;
            if (!document.getElementById('STrChOChampLevel' + level)) continue;
            if (!document.getElementById('STrChOChampLevel' + level).checked) continue;

            var filterEffect = document.getElementById('STrChOChampFilterEffects').value;
            if (filterEffect != 'none') {
                var filterBuff = document.getElementById('STrChOChampFilterBuffType').value;
                if (filterBuff == 'debuff') filterEffect += ' Debuff';
                var foundEffect = false;
                for (e in champItem.effects) {
                    var N = champItem.effects[e];
                    var effect = uW.g_js_strings.effects["name_" + N.id];
                    if (effect == filterEffect) {
                        foundEffect = true;
                        break;
                    }
                }
                if (!foundEffect) continue;
            }

            if (champItem.equippedTo > 0)
                t.champItemLists[champtype].unshift(champItem);
            else
                t.champItemLists[champtype].push(champItem);
        }
        t.sortChampOrganizerLists();
    },

    sortChampOrganizerLists: function () {
        var t = Tabs.champOrganizer;
        STrChOChampUpgradeData.sortInactive = document.getElementById('STrChOChampSortInactive') == null ? false : document.getElementById('STrChOChampSortInactive').checked;
        for (i = 0; i < t.champItemLists.length; i++) {
            if (!t.champItemLists[i]) continue;
            t.champItemLists[i].sort(function (item1, item2) {
                return t.sortChampOrganizerValue(item2) - t.sortChampOrganizerValue(item1);
            });
        }
    },

    sortChampOrganizerValue: function (item) {
        var t = Tabs.champOrganizer;
        var retValue = 0.0;
        for (e in item.effects) {
            try {
                var N = item.effects[e];
                var id = item.effects[e].id;
                var effect = "";
                var quality = item.rarity;

                effect = uW.g_js_strings.effects["name_" + id];

                var S = champTiers;
                var P = id + "," + N.tier;
                var tier = S[P];

                var base = tier.Base || 0;
                var growth = tier.Growth || 0;
                var level = item.level || 0;

                // slot number
                var B = +e;

                if (B > quality && !STrChOChampUpgradeData.sortInactive) {
                    return +retValue;
                }

                var percent = +(base + ((level * level + level) * growth * 0.5));
                if ((effect == (t.sortEffect + " Debuff")) && (t.sortType != "buff")) {
                    retValue -= percent;
                }
                else if (effect == t.sortEffect && t.sortType != "debuff") {
                    retValue += percent;
                }
            } catch (e) {
            }

        }
        return +retValue;
    },

    paintChampTables: function () {
        var t = Tabs.champOrganizer;
        for (champItemTypeValue in t.champItemLists) {
            var m = '<table><tr>';
            var divCards = document.getElementById('STrChOChampCardSection' + champItemNames[champItemTypeValue]);
            if (!divCards) continue;
            divCards.innerHTML = "<div></div>";
            for (idx = 0; idx < t.champItemLists[champItemTypeValue].length; idx++) {
                var champItem = t.champItemLists[champItemTypeValue][idx];
                m += '<td><div class=STrChOChampCard id=STrChOChampCard' + champItem.equipmentId + '>';
                m += BuildChampCard(champItem);
                m += '</div></td>';
            }
            m += '</tr></table>';
            divCards.innerHTML = '<div>' + m + '</div>';
        }
        var STrChOCards = document.getElementsByClassName('STrChOChampCard');
        for (idx = 0; idx < STrChOCards.length; idx++) {
            STrChOCards[idx].addEventListener('click', function (A) {
                A.stopPropagation();
                var champId = this.id.split('STrChOChampCard')[1];
                var champItem = uW.kocChampionItems[champId];
                var STrChOCard = document.getElementById('STrChOChampCard' + champId);
                CardContextMenu(this, champItem, true);
            },false);
        }
    },

	show: function () {
        var t= Tabs.champOrganizer;
        if (document.getElementById('STrChOCountChampCards') != null) document.getElementById('STrChOCountChampCards').innerHTML = countHowManyChampCards();
        t.createChampItemList();
        t.paintChampTables();
	},



    showNextChampLevel: function () {
        var t = Tabs.champOrganizer;

        if (t.panelNextLevel + 1 > STrChOMaxChampLevel) return;

        var elemStatTitle = document.getElementsByClassName('upgEnhStatsTitle')[1];
        t.panelNextLevel++;
        elemStatTitle.innerHTML = "Level " + t.panelNextLevel + (t.panelNextLevel == STrChOMaxChampLevel ? "" : " (<i>Next</i>)");

        var elemStatBody = document.getElementById('upgEnhStatsBodyTarget');

        var elemStatItems = elemStatBody.getElementsByTagName("li");

        var champ_item = uW.kocChampionItems[t.panelId];

        for (var elemIndex = 0; elemIndex < elemStatItems.length; ++elemIndex) {
            var elemItem = elemStatItems[elemIndex];
            var slotNumber = elemIndex + 1;
            var effectLine = champ_item.effects[slotNumber];
            var effect = CM.ChampionManager.getEffect(effectLine, t.panelNextLevel);
            elemItem.innerHTML = effect.name + " " + effect.amount;
        }
    },


}

Tabs.champEnhStats = {
	tabOrder: 204,
	tabLabel: 'ENH&nbsp;STATS',
	tabColor: 'brown',
    tabHeader: 'CHAMP HALL ENHANCEMENT STATS',

	init: function (div) {
		var t = Tabs.champEnhStats;
		t.mydiv = div;
        t.buildChampEnhStatsDisplay();
	},

	hide: function () {},

	buildChampEnhStatsDisplay: function () {

        var t = Tabs.champEnhStats;

		var m = '<div class=STrChOHeader>' + t.tabHeader + '</div>';

        m += '<div style="height: ' + (dlgHeight - (dlgHeightOffset*2.5)) + 'px; width: ' + (dlgWidth - (dlgWidthOffset*2.5)) + 'px; margin-top:5px; margin-bottom:5px; overflow-x: auto; overflow-y: auto; position: static;">';
        m += '<table class=STrChOStats align=center cellspacing=0>';

        m += '<tr valign=top align=center><th colspan=' + (STrChOMaxChampQuality + 2) + '>Enhancing Numbers  (successes/failures)</th></tr>';

        m += '<tr valign=top align=center><th></th>';
        for (qual = 0; qual <= STrChOMaxChampQuality; qual++) m += '<td style="font-weight: bold;" class="td' + (qual % 2 + 1) + '"  >' + champCardQualities[qual].capitalizeFirstLetter() + '&nbsp;</td>';
        m += '</tr>';

        var st = [0, 0, 0, 0, 0, 0];
        var ft = [0, 0, 0, 0, 0, 0];

        for (lvl = 0; lvl <= STrChOMaxChampLevel; lvl++) {
            m += '<tr valign=top align=center>';
            m += '<th>';
            if (lvl != 0) m += '+';
            m += lvl + '</th>';
            for (qual = 0; qual < (STrChOMaxChampQuality+1); qual++) {
                if (STrChOChampUpgradeStats.enhanceSuccess[qual][lvl] == null) STrChOChampUpgradeStats.enhanceSuccess[qual][lvl] = 0;
                if (STrChOChampUpgradeStats.enhanceFailure[qual][lvl] == null) STrChOChampUpgradeStats.enhanceFailure[qual][lvl] = 0;
                st[qual] += STrChOChampUpgradeStats.enhanceSuccess[qual][lvl];
                ft[qual] += STrChOChampUpgradeStats.enhanceFailure[qual][lvl];
                m += '<td class="td' + (qual % 2) + '"  >' + STrChOChampUpgradeStats.enhanceSuccess[qual][lvl] + ' / ' + STrChOChampUpgradeStats.enhanceFailure[qual][lvl] + '</td>';
            }
            m += '</tr>';
        }

        m += '<tr valign=top align=center><th> Totals: </th>';
        for (qual = 0; qual < (STrChOMaxChampQuality+1); qual++) m += '<td style="font-weight: bold;" class="td' + (qual % 2) + '" >' + st[qual] + ' / ' + ft[qual] + '</td>';
        m += '</tr>';

        m += '<tr valign=top align=center><th> Percents: </th>';
        for (qual = 0; qual < (STrChOMaxChampQuality+1); qual++) {
            m += '<td style="font-weight: bold;" class="td' + (qual % 2) + '" >';
            if ((st[qual] + ft[qual]) == 0)
                m += "--";
            else {
                var perc = (100 * st[qual] / (st[qual] + ft[qual]));
                m += perc.toFixed(2) + '%';
            }
            m += '</td>';
        }
        m += '</tr>';

        m += '</table>';
        m += '</div>';

        m += '<center><input type=button class=STrChOButton value="Clear Stats" id=STrChOChampEnhStatsClear></center>';

		t.mydiv.innerHTML = '<div>' + m + '</div>';

        document.getElementById('STrChOChampEnhStatsClear').addEventListener('click', function () {

            var t = Tabs.champEnhStats;
            for (lvl = 0; lvl <= STrChOMaxChampLevel; lvl++) {
                for (qual = 0; qual < (STrChOMaxChampQuality+1); qual++) {
                    STrChOChampUpgradeStats.enhanceSuccess[qual][lvl] = null;
                    STrChOChampUpgradeStats.enhanceFailure[qual][lvl] = null;
                }
            }
            SAVESTrChOChampUpgradeStats();
            t.buildChampEnhStatsDisplay();

        }, false);

    },

	show: function () {
		var t = Tabs.champEnhStats;
        t.buildChampEnhStatsDisplay();
	},

}

Tabs.champUpgStats = {
	tabOrder: 205,
	tabLabel: 'UPG&nbsp;STATS',
	tabColor: 'brown',
    tabHeader: 'CHAMP HALL UPGRADE STATS',

	init: function (div) {
		var t = Tabs.champUpgStats;
		t.mydiv = div;
        t.buildChampUpgStatsDisplay();
	},

	hide: function () {},

	buildChampUpgStatsDisplay: function () {

		var t = Tabs.champUpgStats;

		var m = '<div class=STrChOHeader>' + t.tabHeader + '</div>';

        m += '<div style="height: ' + (dlgHeight - (dlgHeightOffset*2.5)) + 'px; width: ' + (dlgWidth - (dlgWidthOffset*2.5)) + 'px; margin-top:5px; margin-bottom:5px; overflow-x: auto; overflow-y: auto; position: static;">';
        m += '<table class=STrChOStats align=center cellspacing=0>';

        m += '<tr valign=top align=center><th colspan=' + (STrChOMaxChampLevel+2) + '>Upgrading Numbers  (successes/failures)</TH></TR>';

        m += '<tr valign=top align=center><th></th>';
        for (lvl = 0; lvl < STrChOMaxChampLevel; lvl++) m += '<td style="font-weight: bold;" class="td' + (lvl % 2) + '"  >&nbsp;+' + (lvl + 1) + '&nbsp;</td>';
        m += '</tr>';

        var st = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ];  //TODO: increase when game increases max champ levels (currently 45)
        var ft = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ];

        for (qual = 0; qual <= STrChOMaxChampQuality; qual++) {
            m += '<tr valign=top align=center><th>' + champCardQualities[qual].capitalizeFirstLetter() + '</th>';
            for (lvl = 0; lvl < STrChOMaxChampLevel; lvl++) {
                if (STrChOChampUpgradeStats.upgradeSuccess[qual][lvl] == null || isNaN(STrChOChampUpgradeStats.upgradeSuccess[qual][lvl])) STrChOChampUpgradeStats.upgradeSuccess[qual][lvl] = 0;
                if (STrChOChampUpgradeStats.upgradeFailure[qual][lvl] == null || isNaN(STrChOChampUpgradeStats.upgradeFailure[qual][lvl])) STrChOChampUpgradeStats.upgradeFailure[qual][lvl] = 0;
                st[lvl] += STrChOChampUpgradeStats.upgradeSuccess[qual][lvl];
                ft[lvl] += STrChOChampUpgradeStats.upgradeFailure[qual][lvl];

                m += '<td class="td' + (lvl % 2) + '"  >';
                m += STrChOChampUpgradeStats.upgradeSuccess[qual][lvl] + ' / ' + STrChOChampUpgradeStats.upgradeFailure[qual][lvl];
                m += '</td>';
            }
            m += '</tr>';
        }

        m += '<tr valign=top align=center><th> Totals: </th>';
        for (lvl = 0; lvl < STrChOMaxChampLevel; lvl++) m += '<td style="font-weight: bold;" class="td' + (lvl % 2) + '"  >' + st[lvl] + " / " + ft[lvl] + '</td>';
        m += '</tr>';

        m += '<tr valign=top align=center><th> Percents: </th>';
        for (lvl = 0; lvl < STrChOMaxChampLevel; lvl++) {
            m += '<td style="font-weight: bold;" class="td' + (lvl % 2) + '"  >';
            if ((st[lvl] + ft[lvl]) == 0)
                m += '--';
            else {
                var perc = (100 * st[lvl] / (st[lvl] + ft[lvl]));
                m += perc.toFixed(2) + '%';
            }
            m += '</td>';
        }
        m += '</tr>';

        m += '</table>';
        m += '</div>';

        m += '<center><input type=button class=STrChOButton value="Clear Stats" id=STrChOChampUpgStatsClear></center>';

		t.mydiv.innerHTML = '<div>' + m + '</div>';

        document.getElementById('STrChOChampUpgStatsClear').addEventListener('click', function () {
            var t = Tabs.champUpgStats;
            for (lvl = 0; lvl <= STrChOMaxChampLevel; lvl++) {
                for (qual = 0; qual < (STrChOMaxChampQuality+1); qual++) {
                    STrChOChampUpgradeStats.upgradeSuccess[qual][lvl] = null;
                    STrChOChampUpgradeStats.upgradeFailure[qual][lvl] = null;
                }
            }
            SAVESTrChOChampUpgradeStats();
            t.buildChampUpgStatsDisplay()
        }, false);

    },

	show: function () {
        var t = Tabs.champUpgStats;
        t.buildChampUpgStatsDisplay();
	},
}

Tabs.champPresets = {
	tabOrder: 206,
	tabLabel: 'PRESETS',
	tabColor: 'brown',
    tabHeader: 'CHAMP HALL PRESETS',
    broke_items: 0,
    broke_count: 0,
    delay: 2000,

	init: function (div) {
		var t = Tabs.champPresets;
		t.mydiv = div;



	},

	hide: function () {},

    refreshBrokeMightDisplay: function () {
        document.getElementById('STrChOChampMightBroke').innerHTML = getChampBrokeMight();
    },

	show: function () {
		var t = Tabs.champPresets;

		var m = '<div class=STrChOHeader>' + t.tabHeader + '<div class=STrChOSaveSettings id=STrChOChampPresetsSaveSettings title="Save Presets Settings"></div><div class=STrChOLoadSettings id=STrChOChampPresetsLoadSettings title="Load Presets Settings"></div></div>';

        m += '<div style="height: ' + (dlgHeight - (dlgHeightOffset*2.5)) + 'px; width: ' + (dlgWidth - dlgWidthMenu) + 'px; margin-top:5px; margin-bottom:5px; overflow-x: auto; overflow-y: auto; position: static;">';
        m += '<table>';
        m += '<tr><td width=100%>Preset Color: <select class=STrChOSelect id=STrChOChampPresetColor>';
        m += '<option ' + (STrChOChampPresetData.presetColor == "#FFFFFF" ? 'SELECTED ' : '') + 'value="#FFFFFF">White</option>';
        m += '<option ' + (STrChOChampPresetData.presetColor == "#808080" ? 'SELECTED ' : '') + 'value="#808080">Gray</option>';
        m += '<option ' + (STrChOChampPresetData.presetColor == "#FF0000" ? 'SELECTED ' : '') + 'value="#FF0000">Red</option>';
        m += '<option ' + (STrChOChampPresetData.presetColor == "#FFFF00" ? 'SELECTED ' : '') + 'value="#FFFF00">Yellow</option>';
        m += '<option ' + (STrChOChampPresetData.presetColor == "#00FF00" ? 'SELECTED ' : '') + 'value="#00FF00">Lime</option>';
        m += '<option ' + (STrChOChampPresetData.presetColor == "#00FFFF" ? 'SELECTED ' : '') + 'value="#00FFFF">Aqua</option>';
        m += '<option ' + (STrChOChampPresetData.presetColor == "#0000FF" ? 'SELECTED ' : '') + 'value="#0000FF">Blue</option>';
        m += '<option ' + (STrChOChampPresetData.presetColor == "#FF00FF" ? 'SELECTED ' : '') + 'value="#FF00FF">Fuchsia</option>';
        m += '</select>';
        m += '&nbsp;&nbsp;&nbsp;General Color: <select class=STrChOSelect id=STrChOChampTagColor>';
        m += '<option ' + (STrChOChampPresetData.tagColor == "#FFFFFF" ? 'SELECTED ' : '') + 'value="#FFFFFF">White</option>';
        m += '<option ' + (STrChOChampPresetData.tagColor == "#808080" ? 'SELECTED ' : '') + 'value="#808080">Gray</option>';
        m += '<option ' + (STrChOChampPresetData.tagColor == "#FF0000" ? 'SELECTED ' : '') + 'value="#FF0000">Red</option>';
        m += '<option ' + (STrChOChampPresetData.tagColor == "#FFFF00" ? 'SELECTED ' : '') + 'value="#FFFF00">Yellow</option>';
        m += '<option ' + (STrChOChampPresetData.tagColor == "#00FF00" ? 'SELECTED ' : '') + 'value="#00FF00">Lime</option>';
        m += '<option ' + (STrChOChampPresetData.tagColor == "#00FFFF" ? 'SELECTED ' : '') + 'value="#00FFFF">Aqua</option>';
        m += '<option ' + (STrChOChampPresetData.tagColor == "#0000FF" ? 'SELECTED ' : '') + 'value="#0000FF">Blue</option>';
        m += '<option ' + (STrChOChampPresetData.tagColor == "#FF00FF" ? 'SELECTED ' : '') + 'value="#FF00FF">Fuchsia</option>';
        m += '</select>';
        m += '&nbsp;&nbsp;&nbsp;Active Color: <select class=STrChOSelect id=STrChOChampActiveColor>';
        m += '<option ' + (STrChOChampPresetData.activeColor == "#FFFFFF" ? 'SELECTED ' : '') + 'value="#FFFFFF">White</option>';
        m += '<option ' + (STrChOChampPresetData.activeColor == "#808080" ? 'SELECTED ' : '') + 'value="#808080">Gray</option>';
        m += '<option ' + (STrChOChampPresetData.activeColor == "#FF0000" ? 'SELECTED ' : '') + 'value="#FF0000">Red</option>';
        m += '<option ' + (STrChOChampPresetData.activeColor == "#FFFF00" ? 'SELECTED ' : '') + 'value="#FFFF00">Yellow</option>';
        m += '<option ' + (STrChOChampPresetData.activeColor == "#00FF00" ? 'SELECTED ' : '') + 'value="#00FF00">Lime</option>';
        m += '<option ' + (STrChOChampPresetData.activeColor == "#00FFFF" ? 'SELECTED ' : '') + 'value="#00FFFF">Aqua</option>';
        m += '<option ' + (STrChOChampPresetData.activeColor == "#0000FF" ? 'SELECTED ' : '') + 'value="#0000FF">Blue</option>';
        m += '<option ' + (STrChOChampPresetData.activeColor == "#FF00FF" ? 'SELECTED ' : '') + 'value="#FF00FF">Fuchsia</option>';
        m += '</select>(Requires Refresh)</td></tr>';
        m += '<tr><td>';
        m += '<input type=button class=STrChOButton id=STrChOChampClearTags value="Clear All Tags">&nbsp;&nbsp;';
        m += '<input type=button class=STrChOButton id=STrChOChampClearAllPresetTags value="Clear All Preset Tags">&nbsp;&nbsp;';
        m += '<input type=button class=STrChOButton id=STrChOChampSaveAllPresetTags value="Save All Preset Tags">&nbsp;&nbsp;';
        //m += '<input type=button id=trExportPresetTags value="Export Preset Tags">';
        m += '</td></tr>';
        m += '<tr><td>';
        m += '<input type=checkbox class=STrChOCheckbox id=STrChOChampShowMight ' + (STrChOChampPresetData.showChampMight ? 'CHECKED' : '') + '/>Show Might on Posts';
        m += '&nbsp;&nbsp;&nbsp;<input type=checkbox class=STrChOCheckbox id=STrChOChampShowName ' + (STrChOChampPresetData.showChampName ? 'CHECKED' : '') + '/>Show Preset Name on Posts';
        m += '</td></tr>';
        m += '</table>';


        m += '<div class=STrChOHeader id=STrChOChampPresetNaming onmouseover="this.style.cursor=\'pointer\'"><img src="'+STrChORightArrow+'"/>&nbsp;PRESET NAMING&nbsp;<img class=STrChOReverseImage src="'+STrChORightArrow+'"/></div>';

        m += '<div class=STrChOSection>';
        m += '<table class=STrChOSectionTable>';
        if (STrChOMaxChampions == 0) {
            m += '<tr><td>No Champions</td></tr>';
        } else {
            var presetsList = "";
            for (var i = 1; i < STrChOMaxChampions + 1; i++) {
                presetsList += '<option value="' + i + '">' + i + '</option>';
            }

            for (var i = 1; i < STrChOMaxChampions+1; i++) {
                var thisChampion = Seed.champion.champions[i-1];
                m += '<tr>';
                m += '<td><input class="STrChOChampPresetSlotPost STrChOButton" type=button id=STrChOChampPreset' + i + ' value="Post Slot"></td>';
                m += '<td><input class="STrChOChampPresetTagPost STrChOButton" type=button id=STrChOChampPreset' + i + ' value="Post Tag"></td>';
                if (thisChampion.name == "") {
                    m += '<td><b>Champ ' + i + ':</b></td>';
                } else {
                    m += '<td><b>' + thisChampion.name + ':</b></td>';
                }

                m += '<td><input class="STrChOChampPresetNameEntry STrChOTextbox" type=text size=15 id=STrChOChampPresetName' + i + ' value="' + STrChOChampPresetData.presetNames[i-1] + '"></td>';
                m += '<td><input class="STrChOChampPresetCopyTo STrChOButton" type=button id=STrChOChampPreset' + i + ' value="Copy To"><select class=STrChOSelect id=STrChOChampPresetCopyToWhat' + i + '>' + presetsList + '</select></td>';
                m += '<td><input class="STrChOChampPresetSave STrChOButton" type=button id=STrChOChampPreset' + i + ' value="Save"></td>';

                if (getChampPresetTagCount(i) != 0) {
                    m += '<td><input class="STrChOChampPresetClear STrChOButton" type=button id=STrChOChampPreset' + i + ' value="Clear"></td>';
                    m += '<td><input class="STrChOChampPresetExcel STrChOButton" type=button id=STrChOChampPreset' + i + ' value="Excel"></td>';
                } else {
                    m += '<td/><td/>';
                }
                m += '</tr>';

            }
        }
        m += '</table>';
        m += '</div>';

        m += '<div class=STrChOHeader onmouseover="this.style.cursor=\'pointer\'"><img src="'+STrChORightArrow+'"/>&nbsp;CHAMP HALL BREAKING&nbsp;<img class=STrChOReverseImage src="'+STrChORightArrow+'"/></div>';

        m += '<div class=STrChOSection>';
        m += '<table class=STrChOSectionTable>';
        m += '<tr><td><div id=STrChOChampMightBroke>You have 0 champ hall might broken</div></td></tr>';
        m += '<tr><td><input type=checkbox checked class=STrChOCheckbox id=STrChOChampExcludePresets>Exclude Tagged Presets</td></tr>';
        m += '<tr><td><input type=checkbox checked class=STrChOCheckbox id=STrChOChampExcludeTags>Exclude Regular Tagged</td></tr>';
        m += '<tr><td>Break Items Level <select class=STrChOSelect id=STrChOChampBreakLevelLow>';
        for (lvl = 1; lvl < STrChOMaxChampLevel; lvl++) {
            m += '<option value=' + lvl + '>+' + lvl + '</option>';
        }
        m += '</select> or Higher</td></tr>';
        m += '<tr><td>Break Items Level <select class=STrChOSelect id=STrChOChampBreakLevelHigh>';
        for (lvl = 1; lvl < STrChOMaxChampLevel; lvl++) {
            m += '<option value=' + lvl + (lvl == STrChOMaxChampLevel - 1 ? ' SELECTED' : '') + '>+' + lvl + '</option>';
        }
        m += '</select> or Lower</td></tr>';

        m += '<tr><td><input type=button class=STrChOButton id=STrChOChampBreakAll value="Break Now"><font color=red><i>(all options above will reset after refresh)</i></font></td></tr>';
        m += '<tr><td><div id=STrChOChampBreakCounter></div></td></tr>';
//        m += '<tr><td><hr></td></tr>';
//        m += '<tr><td>Break Equiped Throne Room Only<select class=STrChOSelect id=STrChOThronePresetEquipBreak>' + presetsList + '</select><input type=button class=STrChOButton id=STrChOThronePresetEquipBreakNow value="Break Now"></td></tr>';
//        m += '<tr><td>Break Tagged Preset Only<select class=STrChOSelect id=STrChOThronePresetTaggedBreak>' + presetsList + '</select><input type=button class=STrChOButton id=STrChOThronePresetTaggedBreakNow value="Break Now"></td></tr>';
//        m += '<tr><td>Break <input type=number class=STrChOText id=STrChOThroneMightBreak oncontextmenu="return false;"> Throne Might <input type=button class=STrChOButton id=STrChOThroneMightBreakNow value="Break Now"></td></tr>';
        m += '</table>';
        m += '</div>';
        m += '</div>';
		t.mydiv.innerHTML = '<div>' + m + '</div>';

        document.getElementById('STrChOChampPresetsSaveSettings').addEventListener('click', function () {
            SaveSettingsToFile(STrChOChampPresetData);
        }, false);
        document.getElementById('STrChOChampPresetsLoadSettings').addEventListener('click', function () {
            var loader = document.getElementById('STrChOSettingsFile');
            loader.addEventListener('change', function () {
                LoadSettingsFromFile(STrChOChampPresetData, Tabs.champPresets);
            }, false);
            loader.click();
        }, false);

        var header = document.getElementsByClassName('STrChOHeader');
        for (var head=0;head<header.length;head++) {
            header[head].addEventListener('click', sectionOpener, false);
        }

        t.refreshBrokeMightDisplay();

        document.getElementById('STrChOChampShowMight').addEventListener('change', function () {
            STrChOChampPresetData.showChampMight = document.getElementById('STrChOChampShowMight').checked;
            SAVESTrChOChampPresetData();
        }, false);

        document.getElementById('STrChOChampShowName').addEventListener('change', function () {
            STrChOChampPresetData.showChampName = document.getElementById('STrChOChampShowName').checked;
            SAVESTrChOChampPresetData();
        }, false);

        document.getElementById('STrChOChampBreakAll').addEventListener('click', function () {
            if (!confirm('You cannot undo this action, are you sure you want to break your champ hall?')) return;
            var excludePresets = document.getElementById('STrChOChampExcludePresets').checked;
            var excludeTags = document.getElementById('STrChOChampExcludeTags').checked;
            var breakLevelLow = document.getElementById('STrChOChampBreakLevelLow').value;
            var breakLevelHigh = document.getElementById('STrChOChampBreakLevelHigh').value;
            var allTaggedPresets = [];
            if (excludePresets) {
                for (i = 1; i < STrChOMaxChampions + 1; i++) {
                    if (getChampPresetTagCount(i) != 0) {
                        var thisPreset = getChampPresetObject(i);
                        for (var champId in thisPreset) {
                            var champ_item = uW.kocChampionItems[champId];
                            if (champ_item == null || !champ_item) continue;
                            if (champ_item.level == STrChOMaxChampLevel) continue;
                            if (champ_item.level < breakLevelLow || champ_item.level > breakLevelHigh) continue;
                            allTaggedPresets.push(champId);
                        }
                    }
                }
            }

            var champToBreak = [];
            for (chId in uW.kocChampionItems) {
                var champ_item = uW.kocChampionItems[chId];
                if (champ_item == null || !champ_item) continue;
                if (champ_item.status != 1) continue;//card broken?
                if (excludeTags && STrChOChampPresetData.taggedItems[chId]) continue;
                if (allTaggedPresets.indexOf(chId) != -1) continue;
                if (champ_item.level == STrChOMaxChampLevel) continue;
                if (champ_item.level < breakLevelLow || champ_item.level > breakLevelHigh) continue;

                champToBreak.push(chId);
            }
            delete allTaggedPresets;

            if (champToBreak.length == 0) {
                alert('No champ items to break');
                return;
            }

            t.broke_count = champToBreak.length;

            t.setBreakStatus();

            t.broke_items = 0;

            for (var i = 0; i < champToBreak.length; i++) {  //loop through all the champ items to be broke

                var citytobreakfrom = 0;  //start at the first city {the index is 0-based}

                var champ_item = uW.kocChampionItems[champToBreak[i]];  //get the next champ item in the collection

                var curr_level = champ_item.level;  //get the current level of the champ item

                var champ_id = champ_item.equipmentId;  //get the champ item id

                if (curr_level == STrChOMaxChampLevel) continue;  //if for some reason a card at the max level makes it through the list then continue to the next in the list

                var z = CM.WorldSettings.getSettingAsObject("CE_UPGRADE_AETHERSTONE_MAP");

                var cost_to_upgrade = z[curr_level + 1].Aetherstones;  //get the cost of stones to upgrade to the next level

                while (citytobreakfrom < 8) {  //loop through all the 8 cities checking for astone to upgrade for the break feature

                    stones_in_city = parseInt(Seed.resources["city" + Seed.cities[citytobreakfrom][0]]["rec5"][0]);  //get the astone count for the city

                    if (cost_to_upgrade + STrChOBreakBuffer <= stones_in_city) break;  //if you have the astone in the city then stop searching cities and do the upgrade

                    citytobreakfrom = citytobreakfrom + 1;  //search to the next city in the loop

                }

                if (citytobreakfrom == 8) continue;  //if you make it to 8, then you've exhausted all the cities astone search for this champ item, move to the next one

                var city = Seed.cities[citytobreakfrom][0];

                setTimeout(
                    (function(cy, id, uc) {
                        return function () {
                            upgradeIt(cy, id, uc);
                        }
                    }) (city, champ_id, cost_to_upgrade), (i+1) * t.delay);

            }

            setTimeout(function() {
                var t = Tabs.champPresets;
                if (t.broke_items == 0) {
                    alert('No Items broken.');
                } else {
                    alert('Breaking CH complete.  ' + t.broke_items + ' Champ items were broken.  Page will now refresh.');
                    RefreshCamelot();
                }
            }, champToBreak.length * t.delay + t.delay);

        }, false);

        document.getElementById('STrChOChampClearAllPresetTags').addEventListener('click', function () {
            t.clearAllPresetTagItems();
            t.show();
            document.getElementById('STrChOChampPresetNaming').click();
        }, false);

        document.getElementById('STrChOChampSaveAllPresetTags').addEventListener('click', function () {
            for (i = 1; i < STrChOMaxChampions + 1; i++) {
                t.addPresetTags(i);
            }
            t.show();
            document.getElementById('STrChOChampPresetNaming').click();
        }, false);

        document.getElementById('STrChOChampClearTags').addEventListener('click', function () {
            t.removeAllTagItems();
        }, false);

        document.getElementById('STrChOChampActiveColor').addEventListener('change', function () {
            STrChOChampPresetData.activeColor = document.getElementById('STrChOChampActiveColor').value;
            SAVESTrChOChampPresetData();
        }, false);

        document.getElementById('STrChOChampPresetColor').addEventListener('change', function () {
            STrChOChampPresetData.presetColor = document.getElementById('STrChOChampPresetColor').value;
            SAVESTrChOChampPresetData();
        }, false);

        document.getElementById('STrChOChampTagColor').addEventListener('change', function () {
            STrChOChampPresetData.tagColor = document.getElementById('STrChOChampTagColor').value;
            SAVESTrChOChampPresetData();
        }, false);


        var STrChOChampPresetSave = document.getElementsByClassName('STrChOChampPresetSave');
        for (var idx=0;idx<STrChOChampPresetSave.length;idx++) {
            STrChOChampPresetSave[idx].addEventListener('click', function() {
                var id = this.id;
                var num = id.split("STrChOChampPreset")[1];
                t.addPresetTags(num);
                t.show();
                document.getElementById('STrChOChampPresetNaming').click();
            }, false);
        }

        var STrChOChampPresetSlotPost = document.getElementsByClassName('STrChOChampPresetSlotPost');
        for (var idx=0; idx<STrChOChampPresetSlotPost.length; idx++) {
            STrChOChampPresetSlotPost[idx].addEventListener('click', function() {
                var id = this.id;
                var num = id.split('STrChOChampPreset')[1];
                postChampSlot(num);
            }, false);
        }

        var STrChOChampPresetTagPost = document.getElementsByClassName('STrChOChampPresetTagPost');
        for (var idx=0; idx<STrChOChampPresetTagPost.length; idx++) {
            STrChOChampPresetTagPost[idx].addEventListener('click', function () {
                var id = this.id;
                var num = id.split('STrChOChampPreset')[1];
                postChampPreset(num);
            }, false);
        }

        var STrChOChampPresetClear = document.getElementsByClassName('STrChOChampPresetClear');
        for (var idx=0; idx<STrChOChampPresetClear.length; idx++) {
            STrChOChampPresetClear[idx].addEventListener('click', function () {
                var id = this.id;
                var num = id.split('STrChOChampPreset')[1];
                t.clearPresetTags(num);
                t.show();
                document.getElementById('STrChOChampPresetNaming').click();
            }, false);
        }

        var STrChOChampPresetExcel = document.getElementsByClassName('STrChOChampPresetExcel');
        for (var idx=0; idx<STrChOChampPresetExcel.length; idx++) {
            STrChOChampPresetExcel[idx].addEventListener('click', function () {
                var id = this.id;
                var num = id.split('STrChOChampPreset')[1];
                ExportChampPresetToExcel(num);
            }, false);
        }

        var STrChOChampPresetCopyTo = document.getElementsByClassName('STrChOChampPresetCopyTo');
        for (var idx=0; idx<STrChOChampPresetCopyTo.length; idx++) {
            STrChOChampPresetCopyTo[idx].addEventListener('click', function () {
                var id = this.id;
                var sourceNum = id.split('STrChOChampPreset')[1];
                var destNum = document.getElementById('STrChOChampPresetCopyToWhat' + sourceNum).value;
                var copyName = document.getElementById('STrChOChampPresetName' + sourceNum).value;
                t.copyPresetTags(sourceNum, destNum, copyName);
                t.show();
                document.getElementById('STrChOChampPresetNaming').click();
            }, false);
        }

        var STrChOChampPresetNameEntry = document.getElementsByClassName('STrChOChampPresetNameEntry');
        for (var idx=0; idx<STrChOChampPresetNameEntry.length; idx++) {
            STrChOChampPresetNameEntry[idx].addEventListener('change', function () {
                var id = this.id;
                var num = id.split('STrChOChampPresetName')[1];
                var presetName = this.value;
                if (presetName == "") {
                    presetName = "undefined";
                    document.getElementById(id).value = presetName;
                }
                STrChOChampPresetData.presetNames[num-1] = presetName;
                SAVESTrChOChampPresetData();
            }, false);

            STrChOChampPresetNameEntry[idx].addEventListener('blur', function () {
                var id = this.id;
                var num = id.split('STrChOChampPresetName')[1];
                var presetName = this.value;
                if (presetName == "") {
                    presetName = "undefined";
                    document.getElementById(id).value = presetName;
                    STrChOChampPresetData.presetNames[num-1] = presetName;
                    SAVESTrChOChampPresetData();
                }
            }, false);
        }
	},

    setBreakStatus: function() {
        var t = Tabs.champPresets;
        var remaining = t.broke_count - t.broke_items;
        var m =  "Items Remaining: " + remaining;
        m += "<br>Time Remaining: " + (remaining * (t.delay/1000)) + " Seconds";
        document.getElementById('STrChOChampBreakCounter').innerHTML = m;
    },

    unequipAllItems: function (presetIndex) {
        var t = Tabs.champPresets;

        if (!confirm('Are you sure you want to unequip all items?')) return;

        var championID = uW.seed.champion.champions[presetIndex-1].championId;// = 11007

        var equipped_items = [];


        for (chId in uW.kocChampionItems) {
            if (uW.kocChampionItems[chId].equippedTo != championID) continue;
            equipped_items.push(chId);
        }

        var el = equipped_items.length;

        if ( el == 0 ) return;

        function unequipLoop(counter, id) {
            setTimeout(function() { t.unequipItem(id); }, (counter + 1) * 2000);
        }

        for (ei = 0; ei < el; ei++) {
            var chId = equipped_items[ei];
            unequipLoop(ei, chId);
        }

        setTimeout(function () { alert("all champ items unequipped") }, el * 2000 + 2000);
    },

    unequipItem: function(chId) {
        var t = Tabs.champPresets;
        CM.ChampionManager.unequipItem(chId);
        t.paintTags();
    },

    equipItem: function(chId) {
        CM.ChampionManager.equipItem(chId);
    },

    clearPresetTags: function (presetIndex) {
        var t = Tabs.champPresets;
        var preset = getChampPresetObject(parseInt(presetIndex));
        for (var p in preset) delete preset[p];
        SAVESTrChOChampPresetData();
        t.paintTags();
    },

    clearAllPresetTagItems: function () {
        var t = Tabs.champPresets;
        if (!confirm('Are you sure you want to clear all preset tag items?')) return;
        for (i = 1; i < STrChOMaxChampions + 1; i++) t.clearPresetTags(i);
    },

    equipPresetTags: function (presetIndex) {
        var t = Tabs.champPresets;

        var equipLoop = function (id) { return function() { t.equipItem(id); }; }
        var unequipLoop = function (id) { return function() { t.unequipItem(id) };  }

        var c = 1;

        var championID = Seed.champion.champions[presetIndex-1].championId;// = 11007
        var equipped_items = [];
        for (chId in uW.kocChampionItems) {
            if (uW.kocChampionItems[chId].equippedTo != championID) continue;
            equipped_items.push(chId);
        }
        var el = equipped_items.length;
        if (el > 0) {
            for (ei = 0; ei < el; ei++) {
                var chId = equipped_items[ei];
                setTimeout(unequipLoop(chId), c * 2000);
                c += 1;
            }
        }

        var preset = getChampPresetObject(parseInt(presetIndex));
        for (var p in preset) {
            setTimeout(equipLoop(p), c * 2000);
            c += 1;
        }

        setTimeout(function () { alert("all champ items equipped") }, c * 2000 + 2000);
    },

    copyPresetTags: function (sourcePresetNumber, destinationPresetNumber, presetName) {
        var pSource = getChampPresetObject(parseInt(sourcePresetNumber));
        var pDestination = getChampPresetObject(parseInt(destinationPresetNumber));
        for (var p in pDestination) delete pDestination[p];
        for (var p in pSource) pDestination[p] = true;
        STrChOChampPresetData.presetNames[destinationPresetNumber-1] = presetName + " (copy)";
        SAVESTrChOChampPresetData();
    },

    addPresetTags: function (presetIndex) {  //presetIndex should be passed in as base 1 to index into the presetTaggedItems array
        var t = Tabs.champPresets;

        var preset = getChampPresetObject(parseInt(presetIndex));

        var championID = Seed.champion.champions[presetIndex-1].championId;// = 11007

        var equipped_items = [];

        for (chId in uW.kocChampionItems) {
            if (uW.kocChampionItems[chId].equippedTo != championID) continue;
            equipped_items.push(chId);
        }

        if ( equipped_items.length == 0 ) return;

        for (var p in preset) delete preset[p];

        for (ei = 0; ei < equipped_items.length; ei++) {
            var chId = equipped_items[ei];
            preset[chId] = true;
            SAVESTrChOChampPresetData();
        }

        t.paintTags();

    },

    paintTags: function () {
        for (ii in uW.kocChampionItems) {
            $("div#" + ii + ".champItem").children(".ioverlay").children(".tagBorderChamp").remove();
            $("div#" + ii + ".champItem").children(".ioverlay").children(".presetBorderChamp").remove();
            $("div#" + ii + ".champItem").children(".ioverlay").children(".activeBorderChamp").remove();
            if ( STrChOChampPresetData.taggedItems[ii] ) {
                $("div#" + ii + ".champItem").children(".ioverlay").prepend("<div class='tagBorderChamp'></div>");
            }
            $("div#" + ii + ".equipSelected ").children(".ioverlay").prepend("<div class='activeBorderChamp'></div>");
            if ( STrChOChampPresetData.taggedItems01[ii] || STrChOChampPresetData.taggedItems02[ii] || STrChOChampPresetData.taggedItems03[ii] || STrChOChampPresetData.taggedItems04[ii] ) {
                $("div#" + ii + ".champItem").children(".ioverlay").prepend("<div class='presetBorderChamp'></div>");
            }
        }

        $("#itemInvetory div").removeClass('STrChOBlueBorder');
        $("#itemInvetory div").removeClass('STrChOYellowBorder');

        for (ii in STrChOChampQueueData.list) {
            var list_item = STrChOChampQueueData.list[ii];
            if (!list_item) continue;
            if (list_item.status != "complete") {
                var id = list_item.item;
                if (list_item.action == "upgrade") $("div#" + id + ".champItem").addClass('STrChOBlueBorder');
                if (list_item.action == "enhance") $("div#" + id + ".champItem").addClass('STrChOYellowBorder');
            }

        }

    },

    removeAllTagItems: function () {
        var t = Tabs.champPresets;
        var taggedReverse = [];
        for (k in STrChOChampPresetData.taggedItems) taggedReverse.push(k);
        var len = taggedReverse.length;
        while (len--) {
            var chID = taggedReverse[len];
            delete STrChOChampPresetData.taggedItems[chID];
        }
        SAVESTrChOChampPresetData();
        t.paintTags();
    },

    removeTagItem: function (itemId) {
        var t = Tabs.champPresets;
        if (STrChOChampPresetData.taggedItems[itemId]) {
            delete STrChOChampPresetData.taggedItems[itemId];
            SAVESTrChOChampPresetData();
        }
        t.paintTags();
    },

    addAllTagItems: function () {
        var t = Tabs.champPresets;
        t.removeAllTagItems();
        for (chId in uW.kocChampionItems) {
            STrChOChampPresetData.taggedItems[chId] = true;
        }
        SAVESTrChOChampPresetData();
        t.paintTags();
    },

    addTagItem: function (itemId) {
        var t = Tabs.champPresets;
        STrChOChampPresetData.taggedItems[itemId] = true;
        SAVESTrChOChampPresetData();
        t.paintTags();
    },


}

Tabs.champPreview = {
	tabOrder: 207,
	tabLabel: 'PREVIEW',
	tabColor: 'brown',
    tabHeader: 'CHAMP HALL PREVIEW',
    champItemNamesForPreview: {1: 'weapon', 2: 'chest', 3: 'helm', 4: 'boots', 5: 'shield', 6: 'ring1', 7: 'ring2', 8: 'pendant', 9: 'cloak'},
    champItemTypesForPreview: {'weapon': 1, 'chest': 2, 'helm':3, 'boots':4, 'shield': 5, 'ring1': 6, 'ring2': 7, 'pendant': 8, 'cloak': 9},
    lastRing1: 0,
    lastRing2: 0,

	init: function (div) {
		var t = Tabs.champPreview;
		t.mydiv = div;
	},

	hide: function () {},

	show: function () {
		var t = Tabs.champPreview;

        var presetsTagList = "";
        if (STrChOMaxChampions != 0)  {
            for (var i = 1; i < STrChOMaxChampions + 1; i++) {
                presetsTagList += '<option value="' + i + '">' + i + ' (' + STrChOChampPresetData.presetNames[i-1] + ')</option>';
            }
        }

		var m = '<div class=STrChOHeader>' + t.tabHeader + '</div>';
        m += '<div style="height: ' + (dlgHeight - (dlgHeightOffset*2.5)) + 'px; width: ' + (dlgWidth - dlgWidthMenu) + 'px; margin-top:5px; margin-bottom:5px; overflow-x: auto; overflow-y: auto; position: static;">';

        m += '<table>';
        m += '<tr>';
        m += '<td colspan=3>';
        m += '<input type=button class=STrChOButton value="Reset" id=STrChOChampPreviewReset>&nbsp;&nbsp;||&nbsp;&nbsp;';
//        m += '<input type=button value="Equip Now" id=chPreviewEquip><font color=black><b>(5 sec per card to load)</b></font>&nbsp;&nbsp;||&nbsp;&nbsp;';
        m += '<input type=button class=STrChOButton value="Post Stats to Chat" id=STrChOChampPreviewPost>&nbsp;';
        m += '<input type=button class=STrChOButton value="Export to Excel" id=STrChOChampPreviewExcel>&nbsp;';
        m += '<br>';
        m += '<input type=button class=STrChOButton value="Export To Text" id=STrChOChampPreviewExport>&nbsp;&nbsp;||&nbsp;&nbsp;';
        m += '<input type=button class=STrChOButton value="Load Text Export" id=STrChOChampPreviewExportLoad>';
        m += '<input type=button class=STrChOButton value="Browse..." id=STrChOChampPreviewExportLoadItemTrigger onclick="document.getElementById(\'STrChOChampPreviewExportLoadItem\').click()">';
        m += '<input hidden id=STrChOChampPreviewExportLoadItem type=file>';
        m += '<br>';
        m += '<input type=button class=STrChOButton value="Load Champ Preset" id=STrChOChampPreviewLoadPreset>&nbsp;<select class=STrChOSelect style="width:25%;" id=STrChOChampPreviewLoadPresetValue>' + presetsTagList + '</select>&nbsp;&nbsp;';
        m += '<br>';
        m += '<input type=button class=STrChOButton value="Copy To" id=STrChOChampPreviewCopyTo><b>&nbsp;Preset Tag&nbsp;</b><select class=STrChOSelect style="width:25%;" id=STrChOChampPreviewCopyToValue>' + presetsTagList + '</select>&nbsp;&nbsp;';
        m += '<br>';
        m += '<input type=button class=STrChOButton value="Load Champ From" id=STrChOChampPreviewLoadPresetTag><b>&nbsp;Preset Tag&nbsp;</b><select class=STrChOSelect style="width:25%;" id=STrChOChampPreviewLoadPresetTagValue>' + presetsTagList + '</select>&nbsp;&nbsp;';
        m += '</td>';
        m += '</tr>';
        m += '</tr>';
        m += '</table>';


        m += '<div class=STrChOHeader onmouseover="this.style.cursor=\'pointer\'"><img src="'+STrChORightArrow+'"/>&nbsp;PREVIEW STATS&nbsp;<img class=STrChOReverseImage src="'+STrChORightArrow+'"/></div>';

        m += '<div class=STrChOSection style="position: static; width: 100%; height: 380px; overflow-x: auto; overflow-y: auto;">';
        m += '<table class=STrChOSectionTable>';
        m += '<tr><td>';
        m += '<div id=STrChOChampPreviewDetails></div>';
        m += '</td></tr>';
        m += '</table>';
        m += '</div>';


        m += '<div class=STrChOHeader onmouseover="this.style.cursor=\'pointer\'"><img src="'+STrChORightArrow+'"/>&nbsp;PREVIEW CARDS&nbsp;<img class=STrChOReverseImage src="'+STrChORightArrow+'"/></div>';

        m += '<div class=STrChOSection style="position: static; width: 100%; height: 380px; overflow-x: auto; overflow-y: auto;">';
        m += '<table class=STrChOSectionTable>';

        m += '<tr>';

        var idx = 0;
        for (var itemIdx in t.champItemNamesForPreview) {
            if (idx % 3 == 0) m += '</tr><tr>';
            m += '<td width=33% valign=top>';
            m += '<table>';
            m += '<tr><td><b>' + t.champItemNamesForPreview[itemIdx].toUpperCase() + '<b></td></tr>';
            m += '<tr><td>';
            m += '<select class=STrChOSelect id=STrChOChampPreviewValue' + t.champItemNamesForPreview[itemIdx] + ' style="white-space:nowrap;display:inline-block;max-width: 150px;"></select>';
            m += '</td></tr>';
            m += '<tr><td><div id=STrChOChampPreviewCard' + t.champItemNamesForPreview[itemIdx] + '></div></td></tr>';
            m += '</table>';
            m += '</td>';
            idx += 1;
        }
        m += '</tr>';


        m += '</table>';
        m += '</div>';

        m += '</div>';
		t.mydiv.innerHTML = '<div>' + m + '</div>';

        var header = document.getElementsByClassName('STrChOHeader');
        for (var head=0;head<header.length;head++) {
            header[head].addEventListener('click', sectionOpener, false);
        }
        t.buildChampPreviewValueDisplay();

        for (var idx in t.champItemNamesForPreview) {

            document.getElementById('STrChOChampPreviewCard' + t.champItemNamesForPreview[idx]).addEventListener('click', function(A) {
                A.stopPropagation();
                var champType = this.id.split('STrChOChampPreviewCard')[1];
                var STrChOPreviewValue = document.getElementById('STrChOChampPreviewValue' + champType);
                var champId = STrChOPreviewValue.value;
                if (champId == 0) return;
                var champItem = uW.kocChampionItems[champId];
                if (!champItem || champItem ==0) return;
                CardContextMenu(this, champItem, true);
            }, false);

            document.getElementById('STrChOChampPreviewValue' + t.champItemNamesForPreview[idx]).addEventListener('change', function(A) {
                var champ_Type = this.id.split('STrChOChampPreviewValue')[1];
                var chId = this.value;
                t.loadChampPreviewCard(chId, champ_Type);
            }, false);

            document.getElementById('STrChOChampPreviewValue' + t.champItemNamesForPreview[idx]).addEventListener('keyup', function(A) {
                var champ_Type = this.id.split('STrChOChampPreviewValue')[1];
                var chId = this.value;
                t.loadChampPreviewCard(chId, champ_Type);
            }, false);

        }

        document.getElementById('STrChOChampPreviewDetails').innerHTML = t.getPreviewChampDetails();

        document.getElementById('STrChOChampPreviewReset').addEventListener('click', function () {
            t.resetPreview();
            t.buildChampPreviewValueDisplay();
        }, false);

        document.getElementById('STrChOChampPreviewExcel').addEventListener('click', function() {
            if (STrChOChampPresetData.previewChamp.length > 0 )
                ExportChampToExcel(true);
            else
                alert('Nothing To Export');
        }, false);

        document.getElementById('STrChOChampPreviewPost').addEventListener('click', function () {
            if (STrChOChampPresetData.previewChamp.length == 0) return;
            t.postPreviewChampDetails();
        }, false);

        document.getElementById('STrChOChampPreviewExport').addEventListener('click', function() {
            uriContent = 'data:application/octet-stream,' + encodeURIComponent(JSON.stringify(STrChOChampPresetData.previewChamp));
            newWindow = window.open(uriContent, 'file.txt');
        }, false);

        document.getElementById('STrChOChampPreviewExportLoad').addEventListener('click', function () {
            var fileInput = document.getElementById("STrChOChampPreviewExportLoadItem");
            var files = fileInput.files;
            if (files.length==0) {
                alert('Please Select A File');
                return;
            }
            var file = files[0];

            var reader = new FileReader();

            reader.onload = function (e) {
				var output = e.target.result;
				STrChOChampPresetData.previewChamp = JSON.parse(output);
                SAVESTrChOChampPresetData();
                t.show();
                alert('Preview Champ Now Loaded From File');
            };
            reader.readAsText(file);
        }, false);

        document.getElementById('STrChOChampPreviewLoadPresetTag').addEventListener('click', function () {
            var presetNum = document.getElementById('STrChOChampPreviewLoadPresetTagValue').value;
            var presetTag = getChampPresetObject(parseInt(presetNum));
            t.resetPreview();
            for (var p in presetTag) t.loadChampPreviewCard(p)//STrChOChampPresetData.previewChamp[p] = true;
        }, false);

        document.getElementById('STrChOChampPreviewCopyTo').addEventListener('click', function () {
            var presetNum = document.getElementById('STrChOChampPreviewCopyToValue').value;
            var presetTag = getChampPresetObject(parseInt(presetNum));
            for (var p in presetTag) delete presetTag[p];
            for (var idx = 0; idx < STrChOChampPresetData.previewChamp.length; idx++) {
                presetTag[STrChOChampPresetData.previewChamp[idx]] = true;
            }
            STrChOChampPresetData.presetNames[presetNum] = "PREVIEW";
            document.getElementById('STrChOChampPresetName' + presetNum).value = "PREVIEW";
            SAVESTrChOChampPresetData();
            t.show();
        }, false);

        document.getElementById('STrChOChampPreviewLoadPreset').addEventListener('click', function () {
            var t = Tabs.champPreview;

            var presetIndex = document.getElementById('STrChOChampPreviewLoadPresetValue').value;

            var championID = Seed.champion.champions[presetIndex-1].championId;// = 11007
            var equipped_items = [];
            for (chId in uW.kocChampionItems) {
                if (uW.kocChampionItems[chId].equippedTo != championID) continue;
                equipped_items.push(chId);
            }
            var el = equipped_items.length;

            if (el > 0) {
                for (ei = 0; ei < el; ei++) {
                    var chId = equipped_items[ei];
                    champItem = uW.kocChampionItems[chId];
                    t.loadChampPreviewCard(chId);
                }
            }
        }, false);

	},

    buildChampPreviewValueDisplay: function () {
        var t = Tabs.champPreview;
        var elemSelect = null;

        for (var champType in t.champItemNamesForPreview) { //fill the default selection "--Items--"
            elemSelect = document.getElementById('STrChOChampPreviewValue' + t.champItemNamesForPreview[champType]);
            elemSelect.innerHTML = '';
            elemSelect.options.add(new Option('--Items--', '0'));
        }

        for (var champId in uW.kocChampionItems) { //fill with all the champ cards
            var champItem = uW.kocChampionItems[champId];
            if (champItem.type == 6) {
                elemSelect = document.getElementById('STrChOChampPreviewValuering1');
                elemSelect.options.add(new Option(champItem.name, champId));
                elemSelect = document.getElementById('STrChOChampPreviewValuering2');
                elemSelect.options.add(new Option(champItem.name, champId));
            } else {
                elemSelect = document.getElementById('STrChOChampPreviewValue' + t.champItemNamesForPreview[champItem.type]);
                elemSelect.options.add(new Option(champItem.name, champId));
            }
        }

        for (var idx = 0; idx < STrChOChampPresetData.previewChamp.length; idx++) {  //select and display the champion cards in the preview preset
            if (STrChOChampPresetData.previewChamp[idx] != 0) {
                var champItem = uW.kocChampionItems[STrChOChampPresetData.previewChamp[idx]];
                if (champItem == null || !champItem) {
                    STrChOChampPresetData.previewChamp[idx] = 0;
                    SAVESTrChOChampPresetData();
                    continue;
                }
                if (idx == STrChORing1) t.lastRing1 = STrChOChampPresetData.previewChamp[idx];
                if (idx == STrChORing2) t.lastRing2 = STrChOChampPresetData.previewChamp[idx];
                var champCard = BuildChampCard(champItem);
                document.getElementById('STrChOChampPreviewValue' + t.champItemNamesForPreview[idx]).value = STrChOChampPresetData.previewChamp[idx];
                document.getElementById('STrChOChampPreviewCard' + t.champItemNamesForPreview[idx]).innerHTML = champCard;
            }
        }
    },

    postPreviewChampDetails: function () {
        var t = Tabs.champPreview;
        var previewPreset = [];
        for (var idx = 0; idx < STrChOChampPresetData.previewChamp.length; idx++) {
            if (STrChOChampPresetData.previewChamp[idx] != 0) previewPreset.push(STrChOChampPresetData.previewChamp[idx]);
        }

        var stringPreviewChamp = GenerateChampPresetEffectsString(previewPreset, true);
        if (stringPreviewChamp == "") {
            return;
        } else {
            var table = stringPreviewChamp.split("</div><div>");
            stringPreviewChamp = table.join("||");
            stringPreviewChamp = stringPreviewChamp.replace("<div>", ":::. |CHAMP PREVIEW STATS:||");
            stringPreviewChamp = stringPreviewChamp.replace("</div>", "");
            stringPreviewChamp = stringPreviewChamp.replace("<b>","").replace("<i>","").replace("</i>","").replace("</b>","").replace("<b>","").replace("<i>","").replace("</i>","").replace("</b>","");
            sendChat(stringPreviewChamp);
        }
        return;

    },

    resetPreview: function () {
        var t = Tabs.champPreview;

        for (var idx = 0; idx < STrChOChampPresetData.previewChamp.length; idx++) STrChOChampPresetData.previewChamp[idx] = 0;
        SAVESTrChOChampPresetData();

        for (var champType in t.champItemNamesForPreview) {
            document.getElementById('STrChOChampPreviewValue' + t.champItemNamesForPreview[champType]).value = 0;
            document.getElementById('STrChOChampPreviewCard' + t.champItemNamesForPreview[champType]).innerHTML = '';
        }

        document.getElementById('STrChOChampPreviewDetails').innerHTML = t.getPreviewChampDetails();
    },

    clearChampPreviewCard: function(champId) {
        var t = Tabs.champPreview;
        for (var idx = 0; idx < STrChOChampPresetData.previewChamp.length; idx++)
            if (STrChOChampPresetData.previewChamp[idx] == champId) {
                STrChOChampPresetData.previewChamp[idx] = 0;
                SAVESTrChOChampPresetData();
                for (var item in t.champItemTypesForPreview) {
                    if (document.getElementById('STrChOChampPreviewValue' + item).value == champId) {
                        document.getElementById('STrChOChampPreviewValue' + item).value = 0;
                        document.getElementById('STrChOChampPreviewCard' + item).innerHTML = '';
                        if (item == 'ring1') t.lastRing1 = 0;
                        if (item == 'ring2') t.lastRing2 = 0;

                        if (item == 'ring1' || item == 'ring2') {
                            var elemSelect = document.getElementById('STrChOChampPreviewValuering1');
                            for (var i = 0; i < elemSelect.length; i++)
                                if (elemSelect.options[i].value == champId) $(elemSelect).remove(i);
                            elemSelect = document.getElementById('STrChOChampPreviewValuering2');
                            for (var i = 0; i < elemSelect.length; i++)
                                if (elemSelect.options[i].value == champId) $(elemSelect).remove(i);
                        } else {
                            var elemSelect = document.getElementById('STrChOChampPreviewValue' + item);
                            for (var i = 0; i < elemSelect.length; i++)
                                if (elemSelect.options[i].value == champId) $(elemSelect).remove(i);
                        }
                        return;
                    }
                }
                return;
            }

    },

    loadChampPreviewCard: function(champId, champTypeName) {
        var t = Tabs.champPreview;
        if (typeof(champTypeName) == 'undefined') champTypeName = '';
        if (champId == 0 && champTypeName == "") return;

        var t = Tabs.champPreview;
        var champCard = '';
        if (champId == 0) {
            document.getElementById('STrChOChampPreviewCard' + champTypeName).innerHTML = champCard;
            document.getElementById('STrChOChampPreviewValue' + champTypeName).value = champId;
            STrChOChampPresetData.previewChamp[t.champItemTypesForPreview[champTypeName]] = champId;
        } else { //champ id is NOT 0, so load the champ
            var champItem = uW.kocChampionItems[champId];
            if (!champItem || champItem ==0) return;
            champCard = BuildChampCard(champItem);

            if (champTypeName != "") { //champ type name is known
                if (champTypeName == 'ring1') {
                    if (document.getElementById('STrChOChampPreviewValuering2').value == champId) {
                        document.getElementById('STrChOChampPreviewValuering1').value = t.lastRing1;
                    } else {
                        document.getElementById('STrChOChampPreviewCardring1').innerHTML = champCard;
                        document.getElementById('STrChOChampPreviewValuering1').value = champId;
                        STrChOChampPresetData.previewChamp[t.champItemTypesForPreview[champTypeName]] = champId;
                        t.lastRing1 = champId;
                    }
                } else if (champTypeName == 'ring2') {
                    if (document.getElementById('STrChOChampPreviewValuering1').value == champId) {
                        document.getElementById('STrChOChampPreviewValuering2').value = t.lastRing2;
                    } else {
                        document.getElementById('STrChOChampPreviewCardring2').innerHTML = champCard;
                        document.getElementById('STrChOChampPreviewValuering2').value = champId;
                        STrChOChampPresetData.previewChamp[t.champItemTypesForPreview[champTypeName]] = champId;
                        t.lastRing2 = champId;
                    }
                } else {
                    document.getElementById('STrChOChampPreviewCard' + champTypeName).innerHTML = champCard;
                    document.getElementById('STrChOChampPreviewValue' + champTypeName).value = champId;
                    STrChOChampPresetData.previewChamp[t.champItemTypesForPreview[champTypeName]] = champId;
                }
            } else { //champ type name is not known so we get it from the champ.type
                if (champItem.type != 6) { //champ is not a ring
                    champTypeName = t.champItemNamesForPreview[champItem.type];
                    document.getElementById('STrChOChampPreviewCard' + champTypeName).innerHTML = champCard;
                    document.getElementById('STrChOChampPreviewValue' + champTypeName).value = champId;
                    STrChOChampPresetData.previewChamp[t.champItemTypesForPreview[champTypeName]] = champId;
                } else { //most of the time this is coming from the "Send to Preview" option from the context menu
                    if (document.getElementById('STrChOChampPreviewValuering1').value == champId) return;
                    if (document.getElementById('STrChOChampPreviewValuering2').value == champId) return;

                    if (document.getElementById('STrChOChampPreviewValuering1').value == 0) { //if ring1 is empty load it here
                        document.getElementById('STrChOChampPreviewValuering1').value = champId;
                        document.getElementById('STrChOChampPreviewCardring1').innerHTML = champCard;
                        STrChOChampPresetData.previewChamp[t.champItemTypesForPreview['ring1']] = champId;
                        t.lastRing1 = champId;
                    } else if (document.getElementById('STrChOChampPreviewValuering2').value == 0) { //if ring1 was full and ring2 is empty load it here
                        document.getElementById('STrChOChampPreviewValuering2').value = champId;
                        document.getElementById('STrChOChampPreviewCardring2').innerHTML = champCard;
                        STrChOChampPresetData.previewChamp[t.champItemTypesForPreview['ring2']] = champId;
                        t.lastRing2 = champId;
                    } else {  //if both ring1 and ring2 are full, overwrite ring1
                        document.getElementById('STrChOChampPreviewValuering1').value = champId;
                        document.getElementById('STrChOChampPreviewCardring1').innerHTML = champCard;
                        STrChOChampPresetData.previewChamp[t.champItemTypesForPreview['ring1']] = champId;
                        t.lastRing1 = champId;
                    }
                }
            }
        }
        SAVESTrChOChampPresetData();
        document.getElementById('STrChOChampPreviewDetails').innerHTML = t.getPreviewChampDetails();
    },

    getPreviewChampDetails: function () {
        var t = Tabs.champPreview;
        var previewPreset = [];
        for (var idx = 0; idx < STrChOChampPresetData.previewChamp.length; idx++)
            if (STrChOChampPresetData.previewChamp[idx] != 0) previewPreset.push(STrChOChampPresetData.previewChamp[idx]);

        var stringPreviewChamp = GenerateChampPresetEffectsString(previewPreset, true);//GenerateThronePresetEffectsString(previewPreset);
        if (stringPreviewChamp == "") {
            stringPreviewChamp = "No Stats To Preview";
        } else {
            stringPreviewChamp = "<b>PREVIEW STATS:</b>\n" + stringPreviewChamp;
        }
        return stringPreviewChamp;
    },
}

Tabs.champCompare = {
	tabOrder: 208,
	tabLabel: 'COMPARE',
	tabColor: 'brown',
    tabHeader: 'CHAMP HALL COMPARE',

	init: function (div) {
		var t = Tabs.champCompare;
		t.mydiv = div;

		var m = '<div class=STrChOHeader>' + t.tabHeader + '</div>';

        m += '<div>';
        m += '<center>';
        m += '<table>';

        m += '<tr>';
        m += '<td align=center><b>CARD 1</b></td>';
        m += '<td align=center><b>CARD 2</b></td>';
        m += '</tr>';

        m += '<tr>';
        m += '<td>';
        m += '<b>Item Type:</b><select class=STrChOSelect id=STrChOChampCompareType1 style="width: 40%;">';
        m += '<option value="0">--ALL--</option>';
        for (var champType in champItemNames) m += '<option value="' + champType + '">' + champItemNames[champType].capitalizeFirstLetter() + '</option>';
        m += '</select>';
        m += '</td>';
        m += '<td>';
        m += '<b>Item Type:</b><select class=STrChOSelect id=STrChOChampCompareType2 style="width: 40%;">';
        m += '<option value="0">--ALL--</option>';
        for (var champType in champItemNames) m += '<option value="' + champType + '">' + champItemNames[champType].capitalizeFirstLetter() + '</option>';
        m += '</select>';
        m += '</td>';
        m += '</tr>';

        m += '<tr>';
        m += '<td>';
        m += '<b>Champ Item:</b><br/><select class=STrChOSelect id=STrChOChampCompareId1 style="width: 95%;">';
        m += '<option value="0">--Items--</option>';
        for (var champId in uW.kocChampionItems) m += '<option value="' + champId + '">' + uW.kocChampionItems[champId].name + ' </option>';
        m += '</select>';
        m += '</td>';
        m += '<td>';
        m += '<b>Champ Item:</b><br/><select class=STrChOSelect id=STrChOChampCompareId2 style="width: 95%;">';
        m += '<option value="0">--Items--</option>';
        for (var champId in uW.kocChampionItems) m += '<option value="' + champId + '">' + uW.kocChampionItems[champId].name + ' </option>';
        m += '</select>';
        m += '</td>';
        m += '</tr>';

        m += '<tr>';
        m += '<td>';
        m += '<div id=STrChOChampCompareCard1></div>';
        m += '</td>';
        m += '<td>';
        m += '<div id=STrChOChampCompareCard2></div>';
        m += '</td>';
        m += '</tr>';

        m += '</table>';
        m += '</center>';
        m += '</div>';

		t.mydiv.innerHTML = '<div>' + m + '</div>';

        document.getElementById('STrChOChampCompareId1').addEventListener('change', function () { t.loadCard(this, 'STrChOChampCompareCard1'); }, false);

        document.getElementById('STrChOChampCompareId2').addEventListener('change', function () { t.loadCard(this, 'STrChOChampCompareCard2'); }, false);

        document.getElementById('STrChOChampCompareId1').addEventListener('keyup', function () { t.loadCard(this, 'STrChOChampCompareCard1'); }, false);

        document.getElementById('STrChOChampCompareId2').addEventListener('keyup', function () { t.loadCard(this, 'STrChOChampCompareCard2'); }, false);

        document.getElementById('STrChOChampCompareType1').addEventListener('change', function () { t.filterItems(this, 'STrChOChampCompareId1', 'STrChOChampCompareCard1'); }, false);

        document.getElementById('STrChOChampCompareType2').addEventListener('change', function () { t.filterItems(this, 'STrChOChampCompareId2', 'STrChOChampCompareCard2'); }, false);

        document.getElementById('STrChOChampCompareType1').addEventListener('keyup', function () { t.filterItems(this, 'STrChOChampCompareId1', 'STrChOChampCompareCard1'); }, false);

        document.getElementById('STrChOChampCompareType2').addEventListener('keyup', function () { t.filterItems(this, 'STrChOChampCompareId2', 'STrChOChampCompareCard2'); }, false);

    },

    sendToCompare: function (Id) {
        var t = Tabs.champCompare;
        var champItem = uW.kocChampionItems[Id];
        var card1 = document.getElementById('STrChOChampCompareId1');
        var card2 = document.getElementById('STrChOChampCompareId2');
        var obj = '';
        if (card1.value == 0)
            obj = '1';
        else if (card2.value == 0)
            obj = '2';
        else
            obj = '1';

        document.getElementById('STrChOChampCompareType' + obj).value = champItem.type;
        t.filterItems(document.getElementById('STrChOChampCompareType' + obj), ('STrChOChampCompareId' + obj), ('STrChOChampCompareCard' + obj));
        document.getElementById('STrChOChampCompareId' + obj).value = Id;
        t.loadCard(document.getElementById('STrChOChampCompareId' + obj), ('STrChOChampCompareCard' + obj));
    },

    loadCard: function (objectItem, objectName) {
        var div = document.getElementById(objectName);
        if (objectItem.value == 0)
            div.innerHTML = '';
        else
            div.innerHTML = BuildChampCard(uW.kocChampionItems[objectItem.value]);
    },

    filterItems: function (objectItem, objectIdName, objectName) {
        document.getElementById(objectName).innerHTML = '';
        var select = document.getElementById(objectIdName);
        select.value = 0;
        var m = '<option value="0">--Items--</option>';
        if (objectItem.value == 0) {
            for (var champId in uW.kocChampionItems) {
                m += '<option value="' + champId + '">' + uW.kocChampionItems[champId].name + '</option>';
            }
        } else {
            for (var champId in uW.kocChampionItems) {
                if (uW.kocChampionItems[champId].type == objectItem.value)
                    m += '<option value="' + champId + '">' + uW.kocChampionItems[champId].name + '</option>';
            }
        }
        select.innerHTML = m;
    },


	hide: function () {},

	show: function () {},
}

Tabs.champUniques = {
	tabOrder: 209,
	tabLabel: 'UNIQUES',
	tabColor: 'brown',
    tabHeader: 'CHAMP HALL UNIQUES',
    UniqueItems : null,
    selectedCard: 0,
    selectedType: 0,
    selectedLevel: 1,

	init: function (div) {
		var t = Tabs.champUniques;
		t.mydiv = div;

        var UniqueItems = {};
        eval(GM_getResourceText("champion_uniques"));
        t.UniqueItems = UniqueItems;

		var m = '<div class=STrChOHeader>' + t.tabHeader + '</div>';
        m += '<div style="height: ' + (dlgHeight - (dlgHeightOffset*2.5)) + 'px; width: ' + (dlgWidth - dlgWidthMenu) + 'px; margin-top:5px; margin-bottom:5px; overflow-x: auto; overflow-y: auto; position: static;">';

        m += '<center><table>';
        m += '<tr><td><div style="max-width:100%;"><b>Item Type:</b><select class=STrChOSelect id=STrChOChampUniqueType style="width: 40%;">';
        m += '<option value="0">--ALL--</option>';
        for (var champType in champItemNames) m += '<option value="' + champType + '">' + champItemNames[champType].capitalizeFirstLetter() + '</option>';
        m += '</select></div></td></tr>';

        m += '<tr><td><div style="max-width:100%;"><b>Champ Item:</b><br/><select class=STrChOSelect id=STrChOChampUnique style="width: 95%;">';
        m += '<option value="0">--Items--</option>';
        for (Id in t.UniqueItems) {
            var champItem = t.UniqueItems[Id];
            if (champItem == null || !champItem) continue;
            m += '<option value="' + Id + '">' + champItem.Name + ' </option>';
        }
        m += '</select></div></td></tr>';

        m += '<tr><td><div style="max-width:100%;"><b>Level:</b><select class=STrChOSelect id=STrChOChampUniqueLevel style="width: 40%;">';
        m += '<option value="1" selected>+1</option>';
        for (lvl = 2; lvl < STrChOMaxChampLevel + 1; lvl++) m += '<option value="' + lvl + '">+' + lvl + '</option>';
        m += '</select></div></td></tr>';

        m += '<tr><td><div id=STrChOChampUniqueCard></div></td></tr>';

        m += '</table>';

        m += '</div>';
		t.mydiv.innerHTML = '<div>' + m + '</div>';

        document.getElementById('STrChOChampUniqueType').addEventListener('change', function () {
            t.selectedType = document.getElementById('STrChOChampUniqueType').value;
            t.selectedCard = 0;
            t.FilterUniques();
            document.getElementById('STrChOChampUniqueCard').innerHTML = '';
        }, false);

        document.getElementById('STrChOChampUnique').addEventListener('change', function () {
            t.selectedCard = document.getElementById('STrChOChampUnique').value;
            if (t.selectedCard != 0) t.SwitchUnique();
        }, false);

        document.getElementById('STrChOChampUniqueLevel').addEventListener('change', function () {
            t.selectedLevel = document.getElementById('STrChOChampUniqueLevel').value;
            if (t.selectedCard != 0) t.SwitchUnique();
        }, false);

	},

	hide: function () {},

	show: function () {},

    FilterUniques: function (cardType) {
        var t = Tabs.champUniques;
        var champList = document.getElementById('STrChOChampUnique');
        champList.options.length = 0;
        var champOption = document.createElement('option');
        champOption.text = '--Items--';
        champOption.value = 0;
        champList.add(champOption);
        for (Id in t.UniqueItems) {
            var champItem = t.UniqueItems[Id];
            if (champItem == null || !champItem) continue;
            if (champItem.Type == t.selectedType || t.selectedType == 0) {
                var champOption = document.createElement('option');
                champOption.text = champItem.Name;
                champOption.value = Id;
                champList.add(champOption);
            }
        }
    },

    SwitchUnique: function () {
        var t = Tabs.champUniques;
        var div = document.getElementById('STrChOChampUniqueCard');
        var m = ConvertUniqueAndBuildChampCard(t.selectedCard, t.selectedLevel);
        m += t.GetUniqueInventory(t.selectedCard);
        div.innerHTML = m;
        var STrChOChampUseUnique = document.getElementById('STrChOChampUseUnique');
        if (!STrChOChampUseUnique) return;
        STrChOChampUseUnique.addEventListener('click', function() {
            var uniqueId = this.getAttribute('uid');
            var uniqueCount = parseInt(document.getElementById('STrChOChampUniqueCount').innerHTML);
            uniqueCount--;
            document.getElementById('STrChOChampUniqueCount').innerHTML = uniqueCount;
            CM.ItemController.use(uniqueId);
        }, false);
    },


    GetUniqueInventory: function (uniqueId) {
        var m = '<br><b>Champ Hall</b><br>';
        var champitems = {};
        for (champId in uW.kocChampionItems) {
            var champItem = uW.kocChampionItems[champId];
            if (champItem.unique == uniqueId) {
                if (champitems[champItem.level]) {
                    champitems[champItem.level]++;
                } else {
                    champitems[champItem.level] = 1;
                }
            }
        }
        var gotitem = false;
        for (lvl in champitems) {
            gotitem = true;
            m += 'You have '+champitems[lvl]+' at level '+lvl+'<br>';
        }
        if (!gotitem) m += 'You have none in your throne room.<br>';

        m += '<br><b>Inventory</b><br>';
        var inventory = Seed.items['i'+uniqueId];
        m += 'You have <div class=divNoWrap id=STrChOChampUniqueCount>'+(inventory?inventory:'0')+'</div> in your inventory.';
        if ((inventory?inventory:0) != 0) m += '<br><b><a id=STrChOChampUseUnique uid="' + uniqueId + '">Add To Champ Hall</a></b>';
        return m;
    },

}

Tabs.STrChOLog = {
	tabOrder: 300,
	tabLabel: 'LOGS',
	tabColor: 'blue',
    tabHeader: 'LOGGING RECORDS',

	init: function (div) {
		var t = Tabs.STrChOLog;
		t.mydiv = div;
       //t.buildLogDisplay();
	},

	hide: function () {},

    show: function () {
        var t = Tabs.STrChOLog;
        t.buildLogDisplay();
    },

	buildLogDisplay: function () {
		var t = Tabs.STrChOLog;

		var m = '<div class=STrChOHeader>' + t.tabHeader + '</div>';

        m += '<div style="margin-top: 5px; margin-bottom: 5px;">';
        m += '&nbsp;&nbsp;Max Log Entries Per Section <input type=textbox class=STrChOTextbox id=STrChOLogMaxEntries value="' + STrChOLogData.maxEntries + '">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
        m += '<input type=button class=STrChOButton id=STrChOLogClear value="Clear All Logs">';
        m += '</div>';


        m += '<div class=STrChOHeader onmouseover="this.style.cursor=\'pointer\'"><img src="'+STrChORightArrow+'"/>&nbsp;SUCCESS LOG&nbsp;<img class=STrChOReverseImage src="'+STrChORightArrow+'"/></div>';

        m += '<div class=STrChOSection style="height: ' + (dlgHeight - 140) + 'px; width: ' + (dlgWidth - dlgWidthMenu - dlgWidthOffset) + 'px; margin-top:5px; margin-bottom:5px; overflow-x: auto; overflow-y: auto; position: static;">';
        m += '<table class=STrChOSectionTable id=STrChOSuccessLog>';
        if (STrChOLogData.successLog.length == 0) {
            m += '<tr><td>NO LOG DATA</td></tr>';
        } else {
            m += '<tr><td><input id=STrChOClearSuccessLog type=button class=STrChOButton value="Clear Success Log"></td></tr>';
            for (logIndex=0; logIndex < STrChOLogData.successLog.length; logIndex++) {
                var logVar = STrChOLogData.successLog[logIndex];
                var logDate = logVar.split(",")[0];
                var logMsg = logVar.split(",")[1];
                m += '<tr>';
                m += '<td width=20%>' + logDate + '</td>';
                m += '<td width=80%>' + logMsg + '</td>';
                m += '</tr>';
            }
        }
        m += '</table>';
        m += '</div>';


        m += '<div class=STrChOHeader onmouseover="this.style.cursor=\'pointer\'"><img src="'+STrChORightArrow+'"/>&nbsp;ACTION LOG&nbsp;<img class=STrChOReverseImage src="'+STrChORightArrow+'"/></div>';

        m += '<div class=STrChOSection style="height: ' + (dlgHeight - 140) + 'px; width: ' + (dlgWidth - dlgWidthMenu - dlgWidthOffset) + 'px; margin-top:5px; margin-bottom:5px; overflow-x: auto; overflow-y: auto; position: static;">';
        m += '<table class=STrChOSectionTable id=STrChOActionLog>';
        if (STrChOLogData.actionLog.length == 0) {
            m += '<tr><td>NO LOG DATA</td></tr>';
        } else {
            m += '<tr><td><input id=STrChOClearActionLog type=button class=STrChOButton value="Clear Action Log"></td></tr>';
            for (logIndex=0; logIndex < STrChOLogData.actionLog.length; logIndex++) {
                var logVar = STrChOLogData.actionLog[logIndex];
                var logDate = logVar.split(",")[0];
                var logMsg = logVar.split(",")[1];
                m += '<tr>';
                m += '<td width=20%>' + logDate + '</td>';
                m += '<td width=80%>' + logMsg + '</td>';
                m += '</tr>';
            }
        }
        m += '</table>';
        m += '</div>';


        m += '<div class=STrChOHeader onmouseover="this.style.cursor=\'pointer\'"><img src="'+STrChORightArrow+'"/>&nbsp;SALVAGE LOG&nbsp;<img class=STrChOReverseImage src="'+STrChORightArrow+'"/></div>';

        m += '<div class=STrChOSection style="height: ' + (dlgHeight - 140) + 'px; width: ' + (dlgWidth - dlgWidthMenu - dlgWidthOffset) + 'px; margin-top:5px; margin-bottom:5px; overflow-x: auto; overflow-y: auto; position: static;">';
        m += '<table class=STrChOSectionTable id=STrChOSalvageLog>';
        if (STrChOLogData.salvageLog.length == 0) {
            m += '<tr><td>NO LOG DATA</td></tr>';
        } else {
            m += '<tr><td><input id=STrChOClearSalvageLog type=button class=STrChOButton value="Clear Salvage Log"></td></tr>';
            for (logIndex=0; logIndex < STrChOLogData.salvageLog.length; logIndex++) {
                var logVar = STrChOLogData.salvageLog[logIndex];
                var logDate = logVar.split(",")[0];
                var logMsg = logVar.split(",")[1];
                m += '<tr>';
                m += '<td width=20%>' + logDate + '</td>';
                m += '<td width=80%>' + logMsg + '</td>';
                m += '</tr>';
            }
        }
        m += '</table>';
        m += '</div>';

		t.mydiv.innerHTML = '<div>' + m + '</div>';

        var header = document.getElementsByClassName('STrChOHeader');
        for (var head=0;head<header.length;head++) {
            header[head].addEventListener('click', sectionOpener, false);
        }

        if (document.getElementById('STrChOClearActionLog')) {
            document.getElementById('STrChOClearActionLog').addEventListener('click', function () {
                STrChOLogData.actionLog = [];
                SAVESTrChOLogData();
                t.buildLogDisplay();
            }, false);
        }

        if (document.getElementById('STrChOClearSuccessLog')) {
            document.getElementById('STrChOClearSuccessLog').addEventListener('click', function () {
                STrChOLogData.successLog = [];
                SAVESTrChOLogData();
                t.buildLogDisplay();
            }, false);
        }

        if (document.getElementById('STrChOClearSalvageLog')) {
            document.getElementById('STrChOClearSalvageLog').addEventListener('click', function () {
                STrChOLogData.salvageLog = [];
                SAVESTrChOLogData();
                t.buildLogDisplay();
            }, false);
        }

        document.getElementById('STrChOLogMaxEntries').addEventListener('change', function () {
            STrChOLogData.maxEntries = parseInt(document.getElementById('STrChOLogMaxEntries').value);
            SAVESTrChOLogData();
            t.buildLogDisplay();
        }, false);

        document.getElementById('STrChOLogClear').addEventListener('click', function () {
            STrChOLogData.actionLog = [];
            STrChOLogData.salvageLog = [];
            STrChOLogData.successLog = [];
            SAVESTrChOLogData();
            t.buildLogDisplay();
        }, false);

	},

    removeLogEntry: function (logValue) {
        if (logValue == logValues.SUCCESS) {
            while (STrChOLogData.successLog.length >= STrChOLogData.maxEntries) STrChOLogData.successLog.pop();
        } else if (logValue == logValues.SALVAGE) {
            while (STrChOLogData.salvageLog.length >= STrChOLogData.maxEntries) STrChOLogData.salvageLog.pop();
        } else if (logValue == logValues.ACTION) {
            while (STrChOLogData.actionLog.length >= STrChOLogData.maxEntries) STrChOLogData.actionLog.pop();
        } else return;
    },

    addLogEntry: function (logValue, msg) {
        var t = Tabs.STrChOLog;
        if (logValue == logValues.SUCCESS) {
            if (STrChOLogData.successLog.length >= STrChOLogData.maxEntries) t.removeLogEntry(logValue);
            STrChOLogData.successLog.unshift(t.createTimeStamp() + "," + msg);
        } else if (logValue == logValues.SALVAGE) {
            if (STrChOLogData.salvageLog.length >= STrChOLogData.maxEntries) t.removeLogEntry(logValue);
            STrChOLogData.salvageLog.unshift(t.createTimeStamp() + "," + msg);
        } else if (logValue == logValues.ACTION) {
            if (STrChOLogData.actionLog.length >= STrChOLogData.maxEntries) t.removeLogEntry(logValue);
            STrChOLogData.actionLog.unshift(t.createTimeStamp() + "," + msg);
        } else return;
        SAVESTrChOLogData();
    },

    createTimeStamp: function () {
        var d = new Date();
        var ts = d.toDateString().substring(3,10) + " " + d.toTimeString().substring(0,8);
        return ts;
    },

}

Tabs.STrChOOptions = {
	tabOrder: 301,
	tabLabel: 'OPTIONS',
	tabColor: 'blue',
    tabHeader: 'STrChO OPTIONS',

	init: function (div) {
		var t = Tabs.STrChOOptions;
		t.mydiv = div;

		var m = '<div class=STrChOHeader>' + t.tabHeader + '<div class=STrChOSaveSettings id=STrChOOptionsSaveSettings title="Save Options Settings"></div><div class=STrChOLoadSettings id=STrChOOptionsLoadSettings title="Load Options Settings"></div></div>';


        m += '<table class=STrChOSectionTable>';
        m += '<tr><td width=100%><input class=STrChOCheckbox id=STrChODisableAnim type=checkbox ' + (STrChOGeneralOptions.disableAnim ? 'CHECKED ' : '') + '/> Disable Failure Animation (Big Red X) </td></tr>';
        m += '<tr><td><input class=STrChOCheckbox id=STrChODraggableThroneItems type=checkbox ' + (STrChOGeneralOptions.draggableThroneItems ? 'CHECKED ' : '') + '/> Enable Draggable Throne Room Items </td></tr> ';
        m += '<tr><td><input class=STrChOCheckbox id=STrChOShowJewels type=checkbox ' + (STrChOGeneralOptions.showJewels ? 'CHECKED ' : '') + '/> Show Jewels Icon In Throne Room Inventory </td></tr> ';
        m += '</table>';


        m += '<div class=STrChOHeader onmouseover="this.style.cursor=\'pointer\'"><img src="'+STrChORightArrow+'"/>&nbsp;SALVAGER OPTIONS&nbsp;<img class=STrChOReverseImage src="'+STrChORightArrow+'"/></div>';

        m += '<div class=STrChOSection>';
        m += '<table class=STrChOSectionTable>';

        m += '<tr><td><b>Put Aetherstones: </b><div style="display: inline;" id=STrChOSalvageCity></div></td></tr>';
        m += '<tr><td><div style="white-space: pre;" ><input class=STrChOCheckbox id=STrChOSalvageAnyCity type=checkbox ' + (STrChOGeneralOptions.salvageAnyCity ? ' CHECKED' : '') + '> When Full, Put Aetherstones In Any City.</td></tr>';
        m += '<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Maximum Number Of Aetherstones: <input class=STrChOTextbox id=STrChOMaxStones type=text size=7 maxlength=7 value="' + STrChOGeneralOptions.maxStones + '"></div></td></tr>';
        m += '<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Overflow Method: <select class=STrChOSelect id=STrChOOverflow><option value="order" ' + (STrChOGeneralOptions.overflow=='order' ? 'SELECTED' : '') + '>City Order</option><option value="lowest" ' + (STrChOGeneralOptions.overflow=='lowest' ? 'SELECTED' : '') + '>Lowest City</option>  </select></td></tr>';
        m += '<tr><td><div>Load Throne Room Salvager Settings From Domain Number: <input class=STrChOTextbox id=STrChOThroneLoadDomain type=text size=3 maxlength=3 /><input class=STrChOButton id=STrChOThroneLoadDomainRules type=button value="Load"></div></td></tr>';
        m += '<tr><td><div>Load Champ Hall Salvager Settings From Domain Number: <input class=STrChOTextbox id=STrChOChampLoadDomain type=text size=3 maxlength=3 /><input class=STrChOButton id=STrChOChampLoadDomainRules type=button value="Load"></div></td></tr>';
        m += '<tr><td><div style="white-space: pre;" ><input class=STrChOCheckbox id=STrChOThroneSalvageUpgradeFirst type=checkbox ' + (STrChOThroneSalvageData.upgradeFirst ? ' CHECKED' : '') + '> Upgrade Items To +1 Before Deleting.</td></tr>';
        m += '<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Maximum Quality: <select class=STrChOSelect id=STrChOThroneUpgradeFirstQual>';
        for (qual = 0; qual < throneCardQualities.length; qual++) m += '<option value="' + qual + '" ' + (STrChOThroneSalvageData.upgradeFirstQual == qual ? 'SELECTED' : '') + '>' + throneCardQualities[qual].capitalizeFirstLetter() + '</option>';
        m += '</select> (Throne Room Only)</td></tr>';
        m += '<tr><td><div style="white-space: pre;" ><input class=STrChOCheckbox id=STrChOThroneSalvageUpgradeManual type=checkbox ' + (STrChOThroneSalvageData.upgradeManual ? ' CHECKED' : '') + '/> Upgrade Items To +1 On Manual Delete. (Throne Room Only)</td></tr>';
        m += '<tr><td><div style="white-space: pre;" ><input class=STrChOCheckbox id=STrChOThroneSalvageUpgradeAutoFind type=checkbox ' + (STrChOThroneSalvageData.upgradeAutoFind ? ' CHECKED' : '') + '/> Add Items To Throne Upgrader Automatically When A Rule Is Matched</td></tr>';
        m += '<tr><td><div style="white-space: pre;" ><input class=STrChOCheckbox id=STrChOChampSalvageUpgradeAutoFind type=checkbox ' + (STrChOChampSalvageData.upgradeAutoFind ? ' CHECKED' : '') + '/> Add Items To Champ Upgrader Automatically When A Rule Is Matched</td></tr>';

        m += '</table>';
        m += '</div>';



        m += '<div class=STrChOHeader onmouseover="this.style.cursor=\'pointer\'"><img src="'+STrChORightArrow+'"/>&nbsp;ENHANCE/UPGRADE OPTIONS&nbsp;<img class=STrChOReverseImage src="'+STrChORightArrow+'"/></div>';

        m += '<div class=STrChOSection style="width: 100%; height: 360px; overflow-x: hidden; overflow-y: auto;">';
        m += '<table class=STrChOSectionTable>';
        m += '<tr><td><b>Use Aetherstones: </b><div style="display: inline;" id=STrChOUseCity></div></td></tr>';
        m += '<tr><td width=25%>Retry interval (seconds): <input class=STrChOTextbox id=STrChORetryInterval type=text size=3 maxlength=3 value="' + STrChOGeneralOptions.retryInterval + '"/></td></tr>';
        m += '<tr><td><div style="white-space: pre;"><input class=STrChOCheckbox id=STrChOUseAnyCity type=checkbox ' + (STrChOGeneralOptions.useAnyCity ? ' CHECKED' : '') + '/> When Full, Use Aetherstones From Any City.</td></tr>';
        m += '<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Minimum Number Of Aetherstones: <input class=STrChOTextbox id=STrChOMinStones type=text size=7 maxlength=7 value="' + STrChOGeneralOptions.minStones + '"/> </div></td></tr>';
        m += '<tr><td><input class=STrChOCheckbox id=STrChOWhisperCheck type=checkbox ' + (STrChOGeneralOptions.whisperToMe ? 'CHECKED ' : '') + '/> Whisper Myself Successful Upgrades/Enhancements</td></tr> ';
        m += '<tr><td><input class=STrChOCheckbox id=STrChOSendInbox type=checkbox ' + (STrChOGeneralOptions.sendToInbox ? 'CHECKED ' : '') + '/> Send To Inbox Successful Upgrades/Enhancements</td></tr>';
        m += '<tr><td><input class=STrChOCheckbox id=STrChOSafetyCheck type=checkbox ' + (STrChOGeneralOptions.safetyOn ? 'CHECKED ' : '') + '/> Disable Manual Upgrades If Less Than <input class=STrChOTextbox type=text id=STrChOSafetyLimit size=10 maxlength=10 value="' + STrChOGeneralOptions.safetyLimit + '"> Aetherstone</td></tr> ';
        m += '<tr><td><input class=STrChOCheckbox id=STrChOBuffsCheck type=checkbox ' + (STrChOGeneralOptions.buffsOff ? 'CHECKED ' : '') + '/> Prevent Automatic Upgrade Token Selection (Throne Room Only)</td></tr> ';
        m += '<tr><td><input class=STrChOCheckbox id=STrChOMastersTokenCheck type=checkbox ' + (STrChOGeneralOptions.removeMastersTokens ? 'CHECKED ' : '') + '/> Remove Master & Lucky Tokens From Upgrade Panel (Throne Room Only)</td></tr>';
        m += '<tr><td><input class=STrChOCheckbox id=STrChOOtherTokenCheck type=checkbox ' + (STrChOGeneralOptions.removeOtherTokens ? 'CHECKED ' : '') + '/> Remove All Other Tokens From Upgrade Panel (Not LLT Or Stones) (Throne Room Only)</td></tr> ';
        m += '<tr><td><input class=STrChOCheckbox id=STrChOUseMastersToken type=checkbox ' + (STrChOGeneralOptions.useMastersTokens ? 'CHECKED ' : '') + '/> Use Next Masters On Manual Upgrade (Overrides Above 2 Options If Checked, Throne Room Only) </td></tr> ';
        m += '<tr><td><input class=STrChOCheckbox id=STrChOForgedTokenCheck type=checkbox ' + (STrChOGeneralOptions.removeForgedTokens ? 'CHECKED ' : '') + '/> Remove Forged Tokens From Upgrade Panel (Champ Hall Only)</td></tr>';
        m += '<tr><td><input class=STrChOCheckbox id=STrChOOtherForgedTokenCheck type=checkbox ' + (STrChOGeneralOptions.removeOtherForgedTokens ? 'CHECKED ' : '') + '/> Remove All Other Tokens From Upgrade Panel (Champ Hall Only)</td></tr> ';
        m += '<tr><td><input class=STrChOCheckbox id=STrChOUseForgedToken type=checkbox ' + (STrChOGeneralOptions.useForgedTokens ? 'CHECKED ' : '') + '/> Use Next Forged On Manual Upgrade (Overrides Above 2 Options If Checked, Champ Hall Only) </td></tr> ';

        //m += '<tr><td><input class=STrChOCheckbox id=STrChOMultiUpgrade type=checkbox ' + (STrChOGeneralOptions.multiUpgrade ? 'CHECKED ' : '') + '/> Add Button For Combined Upgrade/Enhancement (Throne Room Only)</td></tr> ';
        m += '<tr><td><input class=STrChOCheckbox id=STrChONoEquippedSalvage type=checkbox ' + (STrChOGeneralOptions.noEquippedSalvage ? 'CHECKED ' : '') + '/> Remove Salvage Button When Item Is Equipped In Any Slot</td></tr> ';
        m += '<tr><td><input class=STrChOCheckbox id=STrChONoMassSalvage type=checkbox ' + (STrChOGeneralOptions.noMassSalvage ? 'CHECKED ' : '') + '/> Remove Mass Salvage Button</td></tr> ';
        m += '<tr><td><input class=STrChOCheckbox id=STrChONoForcedSalvage type=checkbox ' + (STrChOGeneralOptions.noForcedSalvage ? 'CHECKED ' : '') + '/> Remove Forced Salvage Button (Throne Room Only)</td></tr> ';
        m += '<tr><td><input class=STrChOCheckbox id=STrChOThroneSalvageSafety type=checkbox ' + (STrChOGeneralOptions.throneSalvageSafety ? 'CHECKED ' : '') + '/> Remove Salvage Button For 1st <input class=STrChOTextbox id=STrChOThroneSafetyNum type=text size=3 maxlength=3 value="' + STrChOGeneralOptions.throneSalvageSafetyNum + '"> Throne Room Items</td></tr> ';
        m += '<tr><td><input class=STrChOCheckbox id=STrChOChampSalvageSafety type=checkbox ' + (STrChOGeneralOptions.champSalvageSafety ? 'CHECKED ' : '') + '/> Remove Salvage Button For 1st <input class=STrChOTextbox id=STrChOChampSafetyNum type=text size=3 maxlength=3 value="' + STrChOGeneralOptions.champSalvageSafetyNum + '"> Champion Items</td></tr> ';
        m += '</table>';
        m += '</div>';

		t.mydiv.innerHTML = '<div>' + m + '</div>';

        document.getElementById('STrChOOptionsSaveSettings').addEventListener('click', function () {
            SaveSettingsToFile(STrChOGeneralOptions);
        }, false);
        document.getElementById('STrChOOptionsLoadSettings').addEventListener('click', function () {
            var loader = document.getElementById('STrChOSettingsFile');
            loader.addEventListener('change', function () {
                LoadSettingsFromFile(STrChOGeneralOptions, Tabs.STrChOOptions);
            }, false);
            loader.click();
        }, false);

        var header = document.getElementsByClassName('STrChOHeader');
        for (var head=0;head<header.length;head++) {
            header[head].addEventListener('click', sectionOpener, false);
        }

        new CdispCityPicker('salcitysel', document.getElementById('STrChOSalvageCity'), true, t.SalvageCityButton, STrChOGeneralOptions.salvageCityNum);
        new CdispCityPicker('upcitysel', document.getElementById('STrChOUseCity'), true, t.UsedCityButton, STrChOGeneralOptions.usedCityNum);

        document.getElementById('STrChOSendInbox').addEventListener('change', function () {
            STrChOGeneralOptions.sendToInbox = document.getElementById('STrChOSendInbox').checked;
            SAVESTrChOGeneralOptions();
        }, false);

        document.getElementById('STrChOShowJewels').addEventListener('change', function () {
            STrChOGeneralOptions.showJewels = document.getElementById('STrChOShowJewels').checked;
            SAVESTrChOGeneralOptions();
        }, false);

        document.getElementById('STrChOMinStones').addEventListener('change', function () {
            STrChOGeneralOptions.minStones = document.getElementById('STrChOMinStones').value;
            SAVESTrChOGeneralOptions();
        }, false);

        document.getElementById('STrChOOverflow').addEventListener('change', function () {
            STrChOGeneralOptions.overflow = document.getElementById('STrChOOverflow').value;
            SAVESTrChOGeneralOptions();
        }, false);

        document.getElementById('STrChOMaxStones').addEventListener('change', function () {
            STrChOGeneralOptions.maxStones = document.getElementById('STrChOMaxStones').value;
            SAVESTrChOGeneralOptions();
        }, false);

        document.getElementById('STrChOUseAnyCity').addEventListener('change', function () {
            STrChOGeneralOptions.useAnyCity = document.getElementById('STrChOUseAnyCity').checked;
            SAVESTrChOGeneralOptions();
        }, false);

        document.getElementById('STrChOThroneSalvageUpgradeFirst').addEventListener('change', function () {
            STrChOThroneSalvageData.upgradeFirst = document.getElementById('STrChOThroneSalvageUpgradeFirst').checked;
            SAVESTrChOThroneSalvageData();
        }, false);

        document.getElementById('STrChOThroneUpgradeFirstQual').addEventListener('change', function () {
            STrChOThroneSalvageData.upgradeFirstQual = document.getElementById('STrChOThroneUpgradeFirstQual').value;
            SAVESTrChOThroneSalvageData();
        }, false);

        document.getElementById('STrChOThroneSalvageUpgradeManual').addEventListener('change', function () {
            STrChOThroneSalvageData.upgradeManual = document.getElementById('STrChOThroneSalvageUpgradeManual').checked;
            SAVESTrChOThroneSalvageData();
        }, false);

        document.getElementById('STrChOThroneSalvageUpgradeAutoFind').addEventListener('change', function () {
            STrChOThroneSalvageData.upgradeAutoFind = document.getElementById('STrChOThroneSalvageUpgradeAutoFind').checked;
            SAVESTrChOThroneSalvageData();
        }, false);

        document.getElementById('STrChOChampSalvageUpgradeAutoFind').addEventListener('change', function () {
            STrChOChampSalvageData.upgradeAutoFind = document.getElementById('STrChOChampSalvageUpgradeAutoFind').checked;
            SAVESTrChOChampSalvageData();
        }, false);

        document.getElementById('STrChOSalvageAnyCity').addEventListener('change', function () {
            STrChOGeneralOptions.salvageAnyCity = document.getElementById('STrChOSalvageAnyCity').checked;
            SAVESTrChOGeneralOptions();
        }, false);

        document.getElementById('STrChORetryInterval').addEventListener('change', function () {
            STrChOGeneralOptions.retryInterval = parseInt(document.getElementById('STrChORetryInterval').value);
            if (STrChOGeneralOptions.retryInterval < 15) STrChOGeneralOptions.retryInterval = 15;
            SAVESTrChOGeneralOptions();
        }, false);

        document.getElementById('STrChOThroneSafetyNum').addEventListener('change', function () {
            STrChOGeneralOptions.throneSalvageSafetyNum = parseInt(document.getElementById('STrChOThroneSafetyNum').value);
            SAVESTrChOGeneralOptions();
        }, false);

        document.getElementById('STrChOChampSafetyNum').addEventListener('change', function () {
            STrChOGeneralOptions.champSalvageSafetyNum = parseInt(document.getElementById('STrChOChampSafetyNum').value);
            SAVESTrChOGeneralOptions();
        }, false);

        document.getElementById('STrChOBuffsCheck').addEventListener('change', function () {
            STrChOGeneralOptions.buffsOff = document.getElementById('STrChOBuffsCheck').checked;
            SAVESTrChOGeneralOptions();
        }, false);

        document.getElementById('STrChOSafetyLimit').addEventListener('change', function () {
            STrChOGeneralOptions.safetyLimit = parseInt(document.getElementById('STrChOSafetyLimit').value);
            SAVESTrChOGeneralOptions();
        }, false);

        document.getElementById('STrChODisableAnim').addEventListener('change', function () {
            STrChOGeneralOptions.disableAnim = document.getElementById('STrChODisableAnim').checked;
            disableAnimation(STrChOGeneralOptions.disableAnim);
            SAVESTrChOGeneralOptions();
        }, false);

        document.getElementById('STrChODraggableThroneItems').addEventListener('change', function () {
            STrChOGeneralOptions.draggableThroneItems = document.getElementById('STrChODraggableThroneItems').checked;
            SAVESTrChOGeneralOptions();
        }, false);

        document.getElementById('STrChOWhisperCheck').addEventListener('change', function () {
            STrChOGeneralOptions.whisperToMe = document.getElementById('STrChOWhisperCheck').checked;
            SAVESTrChOGeneralOptions();
        }, false);

        document.getElementById('STrChOSafetyCheck').addEventListener('change', function () {
            STrChOGeneralOptions.safetyOn = document.getElementById('STrChOSafetyCheck').checked;
            SAVESTrChOGeneralOptions();
        }, false);

        document.getElementById('STrChOMastersTokenCheck').addEventListener('change', function () {
            STrChOGeneralOptions.removeMastersTokens = document.getElementById('STrChOMastersTokenCheck').checked;
            SAVESTrChOGeneralOptions();
        }, false);

        document.getElementById('STrChOOtherTokenCheck').addEventListener('change', function () {
            STrChOGeneralOptions.removeOtherTokens = document.getElementById('STrChOOtherTokenCheck').checked;
            SAVESTrChOGeneralOptions();
        }, false);

        document.getElementById('STrChOUseMastersToken').addEventListener('change', function () {
            STrChOGeneralOptions.useMastersTokens = document.getElementById('STrChOUseMastersToken').checked;
            SAVESTrChOGeneralOptions();
        }, false);

        document.getElementById('STrChOForgedTokenCheck').addEventListener('change', function () {
            STrChOGeneralOptions.removeForgedTokens = document.getElementById('STrChOForgedTokenCheck').checked;
            SAVESTrChOGeneralOptions();
        }, false);

        document.getElementById('STrChOOtherForgedTokenCheck').addEventListener('change', function () {
            STrChOGeneralOptions.removeOtherForgedTokens = document.getElementById('STrChOOtherForgedTokenCheck').checked;
            SAVESTrChOGeneralOptions();
        }, false);

        document.getElementById('STrChOUseForgedToken').addEventListener('change', function () {
            STrChOGeneralOptions.useForgedTokens = document.getElementById('STrChOUseForgedToken').checked;
            SAVESTrChOGeneralOptions();
        }, false);


//        document.getElementById('STrChOMultiUpgrade').addEventListener('change', function () {
//            STrChOGeneralOptions.multiUpgrade = document.getElementById('STrChOMultiUpgrade').checked;
//            SAVESTrChOGeneralOptions();
//        }, false);

        document.getElementById('STrChONoForcedSalvage').addEventListener('change', function () {
            STrChOGeneralOptions.noForcedSalvage = document.getElementById('STrChONoForcedSalvage').checked;
            SAVESTrChOGeneralOptions();
        }, false);

        document.getElementById('STrChONoEquippedSalvage').addEventListener('change', function () {
            STrChOGeneralOptions.noEquippedSalvage = document.getElementById('STrChONoEquippedSalvage').checked;
            SAVESTrChOGeneralOptions();
        }, false);

        document.getElementById('STrChONoMassSalvage').addEventListener('change', function () {
            STrChOGeneralOptions.noMassSalvage = document.getElementById('STrChONoMassSalvage').checked;
            SAVESTrChOGeneralOptions();
        }, false);

        document.getElementById('STrChOThroneSalvageSafety').addEventListener('change', function () {
            STrChOGeneralOptions.throneSalvageSafety = document.getElementById('STrChOThroneSalvageSafety').checked;
            SAVESTrChOGeneralOptions();
        }, false);

        document.getElementById('STrChOChampSalvageSafety').addEventListener('change', function () {
            STrChOGeneralOptions.champSalvageSafety = document.getElementById('STrChOChampSalvageSafety').checked;
            SAVESTrChOGeneralOptions();
        }, false);

        document.getElementById('STrChOThroneLoadDomainRules').addEventListener('click', function () {
            var d = document.getElementById('STrChOThroneLoadDomain').value;
            if (d != null) ThroneLoadDomainSalvageData(d);
        }, false);

        document.getElementById('STrChOChampLoadDomainRules').addEventListener('click', function () {
            var d = document.getElementById('STrChOChampLoadDomain').value;
            if (d != null) ChampLoadDomainSalvageData(d);
        }, false);

        disableAnimation(STrChOGeneralOptions.disableAnim);
	},

	hide: function () {},

	show: function () {},

    SalvageCityButton: function (city, x, y) {
        STrChOGeneralOptions.salvageCityNum = city.idx;
        SAVESTrChOGeneralOptions();
    },

    UsedCityButton: function (city, x, y) {
        STrChOGeneralOptions.usedCityNum = city.idx;
        SAVESTrChOGeneralOptions();
    },
}

Tabs.STrChOJewels = {
	tabOrder: 302,
	tabLabel: 'JEWELS',
	tabColor: 'blue',
    tabHeader: 'JEWEL ORGANIZER',
    jewelEffects: [],
    totalInventroy: 0,
    inventoryList: [],

	init: function (div) {
		var t = Tabs.STrChOJewels;
		t.mydiv = div;
	},

	hide: function () {},

	show: function () {
		var t = Tabs.STrChOJewels;

        t.buildJewelList();

		var m = '<div class=STrChOHeader>' + t.tabHeader + '</div>';

        m += '<table class=STrChOSectionTable>';

        m += '<tr><td><b>Effects</b></td><td><b>Quality</b></td></tr>';

        m += '<tr>';
        m += '<td><div id=STrChOJewelEffectFilterRow style="float: left; width: 250px; border:2px solid #ccc; height: 110px; overflow-y: scroll; background-color: white;">';
        for (fx=0;fx<t.jewelEffects.length;fx++) {
            var effect = t.jewelEffects[fx];
            effect = effect.split(' ').join('');
            effect = effect.split('.').join('');
            m += '<input class=STrChOCheckbox id=STrChOJewelEffect' + effect + ' type=checkbox  CHECKED />' + t.jewelEffects[fx] + '<br />';

        }
        m += '</div></td>';

        m += '<td><div id=STrChOJewelQualityFilterRow style="float: left; width: 120px; border:2px solid #ccc; height: 110px; overflow-y: scroll; background-color: white;">';
        for (jwl=0;jwl<STrChOJewelQualities.length;jwl++) {
            m += '<input class=STrChOCheckbox id=STrChOJewelQuality' + String(STrChOJewelQualities[jwl]).capitalizeFirstLetter() + ' type=checkbox  CHECKED />' + String(STrChOJewelQualities[jwl]).capitalizeFirstLetter() + '<br />';
        }
        m += '</div></td>';
        m += '</tr>';

        m += '<tr><td><input style="width:120px;" class=STrChOButton type=button id=STrChOJewelEffectsUnselectAll value="Unselect All"></td>';
        m += '<td><input style="width:120px;" class=STrChOButton type=button id=STrChOJewelQualitiesUnselectAll value="Unselect All"></td></tr>';
        m += '<tr><td><input style="width:120px;" class=STrChOButton type=button id=STrChOJewelEffectsSelectAll value="Select All"></td>';
        m += '<td><input style="width:120px;" class=STrChOButton type=button id=STrChOJewelQualitiesSelectAll value="Select All"></td></tr>';

        m += '<tr><td colspan=2 align=center><div class=divNoWrap id=STrChOJewelBuffFilterRow><input id=STrChOJewelBuff' + true + ' type=checkbox  CHECKED />Buff&nbsp;&nbsp;<input id=STrChOJewelBuff' + false + ' type=checkbox  CHECKED />Debuff</div></td></tr>';


        m += '</table></div>';


        m += '<div class=STrChOHeader onmouseover="this.style.cursor=\'pointer\'"><img src="'+STrChORightArrow+'"/>&nbsp;JEWEL INVENTORY&nbsp;<img class=STrChOReverseImage src="'+STrChORightArrow+'"/></div>';

        m += '<div class=STrChOSection>';

        m += '<table cellpadding=0 cellspacing=0 width=100%>';
        m += '<thead>';
        m += '<tr>';
        m += '<th align=left width=60%>Effect</th>';
        m += '<th align=left width=10%>Quality</th>';
        m += '<th align=left width=10%>Type</th>';
        m += '<th align=center width=10%>Amount</th>';
        m += '<th align=center width=10%>In Stock</th>';
        m += '</tr>';
        m += '</thead>';
        m += '</table>';

        m += '<div style="position: static; width: 100%; height: 225px; overflow-x: hidden; overflow-y: auto;">';

        m += '<table id=STrChOJewelInventory cellpadding=0 cellspacing=0 width=100%>';

        m += '<tbody>';
        m += '</tbody>';
        m += '</table>';

        m += '</div>';
        m += '<hr/>';
        m += '<input class=STrChOButton id=STrChOJewelRefresh type=button value="Refresh"/>&nbsp;<i>(new jewels found may take a couple seconds to add to total)</i>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>Total:</b><div class=divNoWrap id=STrChOJewelTotal></div>';
        m += '</div>';

		t.mydiv.innerHTML = '<div>' + m + '</div>';

        var header = document.getElementsByClassName('STrChOHeader');
        for (var head=0;head<header.length;head++) {
            header[head].addEventListener('click', sectionOpener, false);
        }

        t.buildInventory();

        document.getElementById('STrChOJewelEffectFilterRow').addEventListener('change', function () {
            t.buildInventory();
        }, false);

        document.getElementById('STrChOJewelQualityFilterRow').addEventListener('change', function () {
            t.buildInventory();
        }, false);

        document.getElementById('STrChOJewelBuffFilterRow').addEventListener('change', function () {
            t.buildInventory();
        }, false);

        document.getElementById('STrChOJewelRefresh').addEventListener('click', function () {
            t.buildJewelList();
            t.buildInventory();
        }, false);

        document.getElementById('STrChOJewelQualitiesUnselectAll').addEventListener('click', function () {
            for (qly=0;qly<=STrChOJewelQualities.length;qly++) {
                var quality = STrChOJewelQualities[qly];
                var ch = document.getElementById("STrChOJewelQuality" + quality.capitalizeFirstLetter());
                ch.checked = false;
            }
            t.buildInventory();
        }, false);

        document.getElementById('STrChOJewelQualitiesSelectAll').addEventListener('click', function () {
            for (qly=0;qly<=STrChOJewelQualities.length;qly++) {
                var quality = STrChOJewelQualities[qly];
                var ch = document.getElementById("STrChOJewelQuality" + quality.capitalizeFirstLetter());
                ch.checked = true;
            }
            t.buildInventory();
        }, false);

        document.getElementById('STrChOJewelEffectsUnselectAll').addEventListener('click', function () {
            for (ef=0;ef<t.jewelEffects.length;ef++) {
                var effect = t.jewelEffects[ef];
                effect = effect.split(' ').join('');
                effect = effect.split('.').join('');
                var ch = document.getElementById("STrChOJewelEffect" + effect);
                ch.checked = false;
            }
            t.buildInventory();
        }, false);

        document.getElementById('STrChOJewelEffectsSelectAll').addEventListener('click', function () {
            for (ef=0;ef<t.jewelEffects.length;ef++) {
                var effect = t.jewelEffects[ef];
                effect = effect.split(' ').join('');
                effect = effect.split('.').join('');
                var ch = document.getElementById("STrChOJewelEffect" + effect);
                ch.checked = true;
            }
            t.buildInventory();
        }, false);

	},

    addJewel: function (jewel_id, jewel_quality, throne_item_id) {
        var params = uW.Object.clone(ajfx);
        params.ctrl = 'throneRoom\\ThroneRoomServiceAjax';
        params.action = 'addJewel';
        params.itemId = throne_item_id;
        params.quality = jewel_quality;
        params.effectId = jewel_id;

        new AjaxRequest(uW.g_ajaxpath + "ajax/_dispatch53.php" + uW.g_ajaxsuffix, {
            method: "post",
            parameters: params,
            loading: true,
            onSuccess: function (transport) {
                try {
                    var rslt = eval("(" + transport.responseText + ")");
                    if (rslt.ok) {
                    }
                    else {
                        return 'Error Adding Jewel';
                    }
                } catch (e) {
                }
                return;
            },
            onFailure: function (rst) {
                return;
            }
        });
        CM.ThronePanelView.removeSpinny();
    },

    removeJewel: function (city_id, throne_item_id) {
        var params = uW.Object.clone(ajfx);
        params.ctrl = 'throneRoom\\ThroneRoomServiceAjax';
        params.action = 'removeJewel';
        params.cityId = city_id;
        params.itemId = throne_item_id;

        new AjaxRequest(uW.g_ajaxpath + "ajax/_dispatch53.php" + uW.g_ajaxsuffix, {
            method: "post",
            parameters: params,
            loading: true,
            onSuccess: function (transport) {
                try {
                    var rslt = eval("(" + transport.responseText + ")");
                    if (rslt.ok) {
                        var astone_gain = rslt.aetherstones * -1;
                        Seed.resources["city" + rslt.cityId]["rec5"][0] += astone_gain;
                    } else {
                        return 'Error Removing Jewel';
                    }
                } catch (e) {
                }
                return;
            },
            onFailure: function (rst) {
                return;
            }
        });
        CM.ThronePanelView.removeSpinny();
    },

    buildInventory: function () {
        var t = Tabs.STrChOJewels;
        var inv = "";

        for (i = 0; i < t.inventoryList.length; i++) {

            var jewel_item = t.inventoryList[i];
            var qlty = CM.thronestats.jewelGrowthLimit[jewel_item.quality];
            var amt = CM.ThroneController.getEffectAmount(jewel_item, qlty);
            var name = CM.ThroneController.jewelName(jewel_item);
            var buffed = true;
            if (name.indexOf("Debuff") > 0) buffed = false;
            var effect = CM.ThroneController.getEffectName(jewel_item.id);
            var qty = CM.ThroneController.getJewelQuantity(jewel_item);
            var qualityName = CM.ThroneController.jewelQualityName(jewel_item.quality);
            var tmpEffect = CM.ThroneController.getEffectName(jewel_item.id);
            tmpEffect = tmpEffect.split(' ').join('');
            tmpEffect = tmpEffect.split('.').join('');
            if (!(document.getElementById('STrChOJewelEffect' + tmpEffect).checked)) continue;
            if (!(document.getElementById('STrChOJewelQuality' + qualityName).checked)) continue;
            if (!(document.getElementById('STrChOJewelBuff' + buffed).checked)) continue;

            inv += '<tr><td width=62%>' + effect + '</td>';
            inv += '<td width=10%>' + qualityName + '</td>';
            inv += '<td width=10%>' + (buffed ? 'Buff ' : 'Debuff') + '</td>';
            inv += '<td align=center width=10%>' + amt + '%</td>';
            inv += '<td align=right width=8%>' + qty + '</td></tr>';

        }

        var jwl_inv = document.getElementById('STrChOJewelInventory').tBodies[0];
        jwl_inv.innerHTML = inv;

        var jwl_total = document.getElementById('STrChOJewelTotal');
        jwl_total.innerHTML = t.totalInventroy;

    },

    buildJewelList: function () {
        var t = Tabs.STrChOJewels;
        t.inventoryList = [];
        t.totalInventroy = 0;
        for (var jwl=0;jwl<uW.kocJewelItems.length;jwl++) {
            var jewel_item = uW.kocJewelItems[jwl];
            var qlty = CM.thronestats.jewelGrowthLimit[jewel_item.quality];
            var amt = CM.ThroneController.getEffectAmount(jewel_item, qlty);
            var effect = CM.ThroneController.getEffectName(jewel_item.id);
            if (amt == 0) break;
            if (t.jewelEffects.indexOf(effect) < 0) t.jewelEffects.push(effect);
            var jewel_quantity = CM.ThroneController.getJewelQuantity(jewel_item);
            t.totalInventroy += jewel_quantity;
            t.inventoryList.push(jewel_item);
        }
    },
}

Tabs.STrChONews = {
	tabOrder: 303,
	tabLabel: 'NEWS',
	tabColor: 'blue',
    tabHeader: 'BREAKING NEWS',

	init: function (div) {
		var t = Tabs.STrChONews;
		t.mydiv = div;
		var m = '<div class=STrChOHeader>' + t.tabHeader + '</div>';

        m += '<table cellpadding=0 cellspacing=0 width=100% height=35px>';
        m += '<tr><td align=center>';
       // m += '<a href="https://www.facebook.com/tco4koc" target="_BLANK" style="font-family: tahoma,verdana,arial,sans-serif; font-size: 11px; font-variant: normal; font-style: normal; font-weight: normal; color: #3B5998; text-decoration: none;" title="KoC Throne &amp; Champ Organizer by Ne0"><img src="https://www.facebookbrand.com/img/assets/asset.find.us.on.facebook.lg.png" style="border: 0px;" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
        //m += '<iframe src="//www.facebook.com/plugins/like.php?href=https%3A%2F%2Fwww.facebook.com%2Ftco4koc&amp;width&amp;layout=standard&amp;action=like&amp;show_faces=false&amp;share=true&amp;height=15" scrolling="no" frameborder="0" style="border:none; overflow:hidden; height:15px;" allowTransparency="true"></iframe>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
        m += '</td></tr>';
         m += '<tr></tr><tr><td align=center><b>In Hounour Of<br><br>Mark Branscombe (TCO)<br><br>Phil Cazz (MadMaxx)<br><br>That Paved The Way For Organizers Like This Thanks Guys !!! </b></td></tr>';
        m += '</table>';
        m += '<div style="height: ' + (dlgHeight - (dlgHeightOffset*5)) + 'px; width: ' + (dlgWidth - dlgWidthMenu) + 'px; margin-top:5px; margin-bottom:5px; overflow-x: auto; overflow-y: auto; position: static;">';

        m += '<div class=STrChOHeader onmouseover="this.style.cursor=\'pointer\'"><img src="'+STrChORightArrow+'"/>&nbsp;WHATS NEW&nbsp;<img class=STrChOReverseImage src="'+STrChORightArrow+'"/></div>';

        m += '<div class=STrChOSection style="position: static; width: 100%; overflow-x: auto; overflow-y: auto;">';
        m += '<table class=STrChOSectionTable>';
        m += NewsItemRow('<b>2020</b>');
        m += NewsItemRow('Spawn STrChO (Throne And Champ Organizer)');
        m += '</table>';
        m += '</div>';

        m += '</table>';
        m += '</div>';
        m += '</div>';

		t.mydiv.innerHTML = '<div>' + m + '</div>';

        var header = document.getElementsByClassName('STrChOHeader');
        for (var head=0;head<header.length;head++) {
            header[head].addEventListener('click', sectionOpener, false);
        }

	},

	hide: function () {},

	show: function () {
	},
}

Tabs.STrChOLinks = {
	tabOrder: 304,
	tabLabel: 'LINKS',
	tabColor: 'blue',
    tabHeader: 'MY FAVORITE LINKS',

	init: function (div) {
		var t = Tabs.STrChOLinks;
		t.mydiv = div;

		var m = '<div class=STrChOHeader>' + t.tabHeader + '</div>';

		m += '<div>';

        m += '<table class=STrChOSectionTable>';//cellpadding=0 cellspacing=0 width=100%>';

        m += '<tr><td align=center><div id=STrChOLink1 class=STrChOLinksClass style="cursor:pointer;"><font class=STrChOLinksHeader>STrChO (Throne And Champ Organizer)</td></tr>';
        m += '<tr><td align=center class=STrChOTDLinks><div id=STrChOLink1data class=STrChOLinkData style="display:none;">';
        m += '<a target="_blank" href="https://greasyfork.org/en/scripts/408041-spawn-trcho "><font class=STrChOLinks>https://greasyfork.org/en/scripts/408041-spawn-trcho </a><br>';
        m += '<font class=STrChOLinksDesc>An advanced organizer that upgrades and salvages KOC throne room and champion items, with many extra features</font>';
        m += '</div></td></tr>';

        m += '<tr><td align=center><div id=STrChOLink2 class=STrChOLinksClass style="cursor:pointer;"><font class=STrChOLinksHeader>Demon Spawn koc bot</td></tr>';
        m += '<tr><td align=center class=STrChOTDLinks><div id=STrChOLink2data class=STrChOLinkData style="display:none;">';
        m += '<a target="_blank" href="https://greasyfork.org/en/scripts/407074-demon-spawn-koc-bot"><font class=STrChOLinks>https://greasyfork.org/en/scripts/407074-demon-spawn-koc-bot</a><br>';
        m += '<font class=STrChOLinksDesc>A powerful bot that automates features for KOC</font>';
        m += '</div></td></tr>';

		m += '<tr><td align=center><div id=STrChOLink3 class=STrChOLinksClass style="cursor:pointer;"><font class=STrChOLinksHeader>Tampermonkey</td></tr>';
        m += '<tr><td align=center class=STrChOTDLinks><div id=STrChOLink3data class=STrChOLinkData style="display:none;">';
        m += '<a target="_blank" href="https://www.tampermonkey.net/"><font class=STrChOLinks>https://www.tampermonkey.net/</a><br>';
        m += '<font class=STrChOLinksDesc> A extension that allows users to install scripts that make on-the-fly changes to web page content after or before the page is loaded in the browser</font>';
        m += '</div></td></tr>';

        m += '<tr><td align=center><div id=STrChOLink4 class=STrChOLinksClass style="cursor:pointer;"><font class=STrChOLinksHeader>Throne Room Spreadsheet</td></tr>';
        m += '<tr><td align=center class=STrChOTDLinks><div id=STrChOLink4data class=STrChOLinkData style="display:none;">';
        m += '<a target="_blank" href="https://docs.google.com/spreadsheets/d/1gs02x8aURak1D4MGTBzrYc5_ZDAg6cB_Kq2xiRU6kfE/edit?pli=1#gid=0"><font class=STrChOLinks>https://docs.google.com/spreadsheets/d/1gs02x8aURak1D4MGTBzrYc5_ZDAg6cB_Kq2xiRU6kfE/edit?pli=1#gid=0</a><br>';
        m += '<font class=STrChOLinksDesc>Great spreadsheet to view what stats are available on throne cards, and some other throne/champ related items</font>';
        m += '</div></td></tr>';

        m += '<tr><td align=center><div id=STrChOLink5 class=STrChOLinksClass style="cursor:pointer;"><font class=STrChOLinksHeader>Google Translator for Firefox</td></tr>';
        m += '<tr><td align=center class=STrChOTDLinks><div id=STrChOLink5data class=STrChOLinkData style="display:none;">';
        m += '<a target="_blank" href="https://addons.mozilla.org/en-US/firefox/addon/google-translator-for-firefox/"><font class=STrChOLinks>https://addons.mozilla.org/en-US/firefox/addon/google-translator-for-firefox/</a><br>';
        m += '<font class=STrChOLinksDesc>With this addon you can translate any text to your own language</font>';
	    m += '</div></td></tr>';

        m += '<tr><td align=center><div id=STrChOLink6 class=STrChOLinksClass style="cursor:pointer;"><font class=STrChOLinksHeader>Tab Reloader for Chrome</td></tr>';
        m += '<tr><td align=center class=STrChOTDLinks><div id=STrChOLink6data class=STrChOLinkData style="display:none;">';
        m += '<a target="_blank" href="https://chrome.google.com/webstore/detail/tab-reloader-page-auto-re/dejobinhdiimklegodgbmbifijpppopn?hl=en"><font class=STrChOLinks>https://chrome.google.com/webstore/detail/tab-reloader-page-auto-re/dejobinhdiimklegodgbmbifijpppopn?hl=en</a><br>';
        m += '<font class=STrChOLinksDesc>Reloads web pages every so many seconds or minutes</font>';
        m += '</div></td></tr>';

        m += '<tr><td align=center><div id=STrChOLink7 class=STrChOLinksClass style="cursor:pointer;"><font class=STrChOLinksHeader>Tab Reloader for Firefox</td></tr>';
        m += '<tr><td align=center class=STrChOTDLinks><div id=STrChOLink7data class=STrChOLinkData style="display:none;">';
        m += '<a target="_blank" href="https://addons.mozilla.org/en-US/firefox/addon/tab-reloader/?src=search"><font class=STrChOLinks>https://addons.mozilla.org/en-US/firefox/addon/tab-reloader/?src=search</a><br>';
        m += '<font class=STrChOLinksDesc>Reloads web pages every so many seconds or minutes</font>';
        m += '</div></td></tr>';


	   m += '</table>';

        m += '</div>';


        m += '<div class=STrChOHeader onmouseover="this.style.cursor=\'pointer\'"><img src="'+STrChORightArrow+'"/>&nbsp;TUTORIAL LINKS&nbsp;<img class=STrChOReverseImage src="'+STrChORightArrow+'"/></div>';

        m += '<div class=STrChOSection>';
        m += '<table class=STrChOSectionTable>';

        m += '<tr><td align=center>';
        m += '<a target="_blank" href="http://www.youtube.com/embed/fXlHAzszico?rel=0&autoplay=1"><font class=STrChOLinks>Preview/Preset/Repair Tabs Tutorial</font></a>';
        m += '</td></tr>';

        m += '<tr><td align=center>';
        m += '<a target="_blank" href="http://www.youtube.com/embed/-maykvcbk4o?rel=0&autoplay=1"><font class=STrChOLinks>Throne Organizer-Preview Tutorial</font></a>';
        m += '</td></tr>';

        m += '</table>';
        m += '</div>';

		t.mydiv.innerHTML = '<div>' + m + '</div>';

        var STrChOLinkClick = function() {
            var id = this.getAttribute("id");
            var linkNumber = id.split("STrChOLink")[1];
            var divLinkName = 'STrChOLink' + linkNumber + 'data';
            var divLink = document.getElementById(divLinkName);
            var hidden = (divLink.style.display == "none");
            var links = document.getElementsByClassName("STrChOLinkData");
            for (i = 1; i < links.length + 1; i++) {
                document.getElementById('STrChOLink' + i + 'data').style.display = "none";
            }
            if (hidden) {
                divLink.style.display = "block";
            } else {
                divLink.style.display = "none";
            }
        };

        var STrChOLinksClass = document.getElementsByClassName("STrChOLinksClass");

        for(var i = 0; i < STrChOLinksClass.length; i++){
            STrChOLinksClass[i].addEventListener('click', STrChOLinkClick, false);
        };

        var header = document.getElementsByClassName('STrChOHeader');
        for (var head=0;head<header.length;head++) {
            header[head].addEventListener('click', sectionOpener, false);
        }

	},

	hide: function () {},

	show: function () {},
}

Tabs.STrChODonate = {
	tabOrder: 305,
	tabLabel: 'DONATE',
	tabColor: 'blue',
    tabHeader: 'DONATIONS',

	init: function (div) {
		var t = Tabs.STrChODonate;
		t.mydiv = div;

		var m = '<div class=STrChOHeader>' + t.tabHeader + '</div>';

        m += '<div class=indent5><b>';
        m +='Hi there, thanks for taking the time to consider donating. I never ask for handouts, although a thank you is nice. And sometimes a monetary thank you is nicer.';
        m +='Because it lets me continue working on the KoC script. You may or may not spend a few dollars on gems in support of the game you love. Maybe you can send a ';
        m +='little our way and support the coders who make your life a bit easier by automating it? If you would like to donate, please press the donate button';
        m +='below and I will be a very happy coder! All donations are processed through PayPal on my behalf. Thanks again for your support, without people like you, I would lose interest in this game';
        m += '</b></div>';

        m += '<div align=center><table><tr><td width=100% align=center>';
        m += '<a id=STrChOPayPalLink><img onmouseover="this.style.cursor=\'pointer\'" id=STrChOPayPalImage /></a>';
        m += '</td></tr></table></div>';

		t.mydiv.innerHTML = '<div>' + m + '</div>';

        document.getElementById('STrChOPayPalLink').setAttribute('href', 'https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=CB2MLZCP8FPE8');
        document.getElementById('STrChOPayPalLink').setAttribute('target', '_blank');
        document.getElementById('STrChOPayPalImage').setAttribute('src', 'https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif');
        document.getElementById('STrChOPayPalImage').setAttribute('alt', 'donate');

	},

	hide: function () {},

	show: function () {},
}

/***********************************************************************************************************************************************************************************/

function QueueItem() {  //class definition for upgrade queue items
    this.item   = 0;
    this.action = "upgrade";
    this.level  = 1;
    this.status = "not started";
    this.triesTotal = 0;
    this.triesThis = 0;
    this.triesLast = 0;
    this.lastUpgrade = "none";
    this.upgrades = [];
}

function ThroneRule(type, faction, conditions, advancedrule) { //class definition for rules and conditions
    this.type = type;
    this.faction = faction;
    this.advancedrule = advancedrule;
    if (conditions)
        this.conditions = conditions;
    else
        this.conditions = [];

    this.ThroneAddCondition = ThroneAddCondition;
    this.ThroneApplyRule    = ThroneApplyRule;
}

function ThroneCloneRule(rule) {
    this.type = rule.type;
    this.faction = rule.faction;
    this.advancedrule = rule.advancedrule;
    this.conditions = [];
    if (rule.conditions) this.conditions = rule.conditions;

    this.ThroneAddCondition = ThroneAddCondition;
    this.ThroneApplyRule    = ThroneApplyRule;
}

function ThroneAddCondition(c) {
    this.conditions.push(c);
}

function ThroneApplyRule(id) {
    var ThroneItem = uW.kocThroneItems[id];

    if (this.type != 'any' && (this.type != ThroneItem.type)) return false;
    if (this.faction != 'any' && (this.faction != ThroneItem.faction)) return false;
    for (r in this.conditions) {
        if (!this.conditions[r].ThroneCheckCondition(id)) return false;
    }
    return true;
}

function ThroneCondition(mustHave, number, effect, buffType, slots ) {
    this.mustHave = mustHave;
    this.number   = number;
    this.effect   = effect;
    this.buffType = buffType;
    this.slots    = slots;

    this.ThroneCheckCondition = ThroneCheckCondition;
}

function ThroneCheckCondition(id) {
    var numberFound  = 0;
    var effectsFound = false;
    // get card
    var ThroneItem = uW.kocThroneItems[id];

    if (!ThroneItem) return false;

    // for loop for stat
    // count up occurances
    for (i in ThroneItem.effects) {
        var CardEffect = CM.thronestats.effects[ThroneItem.effects[i].id][1];
        var slotid = i.split("slot")[1];

        if (!this.slots[slotid-1]) continue;

        var eff = this.effect + " ";

        if (CardEffect.indexOf(" Debuff") < 0) CardEffect += " ";

        if (!CardEffect.startsWith(eff)) continue;

        // special rule for Chance to Find Items
        if ( (CardEffect == "Chance to Find Items ") && (CardEffect != eff ) ) continue;

        // If we do not care about buff/debuff then we are done
        if (this.buffType == "e") {
            numberFound++;
        } else {
            // Does the description end with a Debuff
            if (CardEffect.endsWith(" Debuff")) {
                // Are we looking for a debuff
                if (this.buffType == "d") numberFound++;
            } else {
                if (this.buffType == "b") numberFound++;
            }
        }
    }

    if ( numberFound >= this.number) effectsFound = true;

    if (this.mustHave != "false")
        return effectsFound;
    else
        return (!effectsFound);
}

function ChampRule(type, faction, conditions, advancedrule) {  //class definition for rules and conditions
    this.type = type;
    this.faction = faction;
    this.advancedrule = advancedrule;
    if (conditions)
        this.conditions = conditions;
    else
        this.conditions = [];

    this.ChampAddCondition = ChampAddCondition;
    this.ChampApplyRule    = ChampApplyRule;
}

function ChampCloneRule(rule) {
    this.type = rule.type;
    this.faction = rule.faction;
    this.advancedrule = rule.advancedrule;
    this.conditions = [];
    if (rule.conditions) this.conditions = rule.conditions;

    this.ChampAddCondition = ChampAddCondition;
    this.ChampApplyRule    = ChampApplyRule;
}

function ChampAddCondition(c) {
    this.conditions.push(c);
}

function ChampApplyRule(id) {
    var champItem = uW.kocChampionItems[id];

    if (this.type != "any" && (champItemTypes[this.type] != champItem.type)) return false;
    if (this.faction != "any" && (this.faction != champItem.faction)) return false;
    for (r in this.conditions)
    {
        if (!this.conditions[r].ChampCheckCondition(id)) return false;
    }
    return true;
}

function ChampCondition(mustHave, number, effect, buffType, slots ) {
    this.mustHave = mustHave;
    this.number   = number;
    this.effect   = effect;
    this.buffType = buffType;
    this.slots    = slots;

    this.ChampCheckCondition = ChampCheckCondition;
}

function ChampCheckCondition(id) {
    var numberFound  = 0;
    var effectsFound = false;
    // get card
    var champItem = uW.kocChampionItems[id];

    if (!champItem) return false;

    // for loop for stat
    // count up occurances
    for (i in champItem.effects) {
        var id = champItem.effects[i].id;
        var card_effect = "";


        card_effect = uW.g_js_strings.effects["name_" + id];

        var slotid = +i;
        if (!this.slots[slotid-1]) continue;

        var eff = this.effect + " ";

        if (card_effect.indexOf(" Debuff") < 0) card_effect += " ";

        if (!card_effect.startsWith(eff)) continue;

        // If we do not care about buff/debuff then we are done
        if (this.buffType == "e") {
            numberFound++;
        } else {
            // Does the description end with a Debuff
            if (card_effect.endsWith(" Debuff")) {
                // Are we looking for a debuff
                if (this.buffType == "d")
                {
                    numberFound++;
                }
            } else {
                if (this.buffType == "b")
                {
                    numberFound++;
                }
            }
        }
    }

    if ( numberFound >= this.number) {
        effectsFound = true;
    }

    if (this.mustHave != "false")
        return effectsFound;
    else
        return (!effectsFound);
}

function ReplaceToolTips() {

    var TToldF = CM.ThroneView.boostsTooltip;

    var ThroneToolTip = function (L, E, K) {
        var J = new Array();
        var slot = L.innerHTML;

        slot = slot.replace("<span>","").replace("</span>","").trim();

        if (L.id == "maparea_boosts_throneroom") slot = Seed.throne.activeSlot;

        J.push("<div id='boosts_tooltip'><b>Throne Room:</b><br/>");
        J.push("<b><i>(" + STrChOThronePresetData.presetNames[slot] + ")</i></b>");
        J.push("<br/>");

        var equipped_items = Seed.throne.slotEquip[slot];

        if (equipped_items.length > 0) {
            J.push(GenerateThronePresetEffectsString(equipped_items, true));
        } else {
            J.push("<div>This Preset has no Items equipped</div>");
        }

        J.push("</div>");
        if (L.id == "maparea_boosts_throneroom") {
            uW.showTooltip(J.join(""), L, E, K)
        } else {
            uW.Tooltip.show(E, J.join(""), [10, 10], null)
        }
    }

    CM.ThroneView.boostsTooltip = ThroneToolTip;
}
function alterChampHall() {

    function addNewHover() {
		$(".Champion div[hover_id]").unbind("hover").hover(function () {
			if ($(this).hasClass("edit_container") && $(this).attr("champion_idx")) {
				$(".mini_tooltip").remove();
				$(".tooltip").remove();
				var champSlot = $(this).attr("champion_idx");
				var topVal = parseInt(champSlot) * 100 + 47;
				var leftVal = 150;

				champSlot++;
				var champId = getChampID(champSlot);
				var D = [];
				for (var chId in uW.kocChampionItems) if (uW.kocChampionItems[chId].equippedTo == champId) D.push(chId);
				var champStats = GenerateChampPresetEffectsString(D, false);
				champStats = champStats.split('||').join('<br>');
				D = [];
				D.push("Champ Hall Slot #" + champSlot);
				D.push(getChampName(champSlot));
				if (STrChOChampPresetData.showChampName) D.push("(" + STrChOChampPresetData.presetNames[champSlot-1] + ")");
				if (STrChOChampPresetData.showChampMight) D.push(getChampMight());
				D.push(champStats);

				var champText = D.join('<br>');

				$(".Champion").append('<div class="tooltip" style="pointer-events: none;  left: ' + leftVal + "px; top: " + topVal + 'px;">' + champText + "</div>");
				$(this).append('<div class="mini_tooltip"></div>')
				this.addEventListener('mouseout', function () {
					$(".mini_tooltip").remove();
					$(".tooltip").remove();
				});
			}
		});
	}

    function addPostChamp() {
        var button_sizes = '38px';
        var assign_button = document.getElementsByClassName('assign_city')[0];
        assign_button.style.width = button_sizes;
        assign_button.className += ' divNoWrap';
        assign_button.parentElement.className += ' divNoWrap';

        if (!document.getElementById('STrChOHideShow')) {
            var STrChO_button = document.createElement('div');
            STrChO_button.className = 'buttonv2 brown divNoWrap';
            STrChO_button.innerHTML = 'STrChO';
            STrChO_button.id = 'STrChOHideShow';
            STrChO_button.style.width = button_sizes;
            assign_button.parentElement.appendChild(STrChO_button);
            STrChO_button.addEventListener('click', function () {
                eventHideShow();
            }, false);
        }
        if (!document.getElementById('STrChOPostChamp')) {
            var post_button = document.createElement('div');
            post_button.className = 'buttonv2 red divNoWrap';
            post_button.innerHTML = 'POST';
            post_button.id = 'STrChOPostChamp';
            post_button.style.width = button_sizes;
            assign_button.parentElement.appendChild(post_button);
            post_button.addEventListener('click', function () {
                var champDiv = document.getElementsByClassName('name active')[0];
                var champClass = champDiv.className;
                var champIndex = parseInt(champClass.replace(' name active', '').replace('name', ''));
                postChampSlot(champIndex+1);
            }, false);
        }
    }

    function addMenus() {

        $(".champItem").click(function (A) {
            CardContextMenu(this, uW.kocChampionItems[this.id], false);
        });
    }

    function addBorders() {

        Tabs.champPresets.paintTags();

        var dv = document.getElementById('STrChOChampMight')

        if (!dv) {

            var modContainers = document.getElementsByClassName("cmModalContainer Champion");
            if (modContainers == null || !modContainers) return;

            var modContainer = modContainers[0];
            if (modContainer == null || !modContainer) return;

            var elem = modContainer.getElementsByClassName("primarytitlebar")[0];
            dv = document.createElement('div');
            dv.id = "STrChOChampMight";
            dv.style.whiteSpace='nowrap';
            dv.style.position='absolute';
            dv.style.overflow='visible';
            dv.style.top = '15px';
            dv.style.left = '435px';
            dv.style.zIndex=2005;
            elem.insertBefore(dv, elem.childNodes[1].nextSibling);
        }

        dv.innerHTML = getChampMight();

    }

    var oldOpen = CM.ChampionModalController.open;
    CM.ChampionModalController.open = function (j) {
        oldOpen(j);
        addBorders();
        addPostChamp();
		addNewHover();
    }

    var rfi = CM.ChampionModalView.renderFilteredItems;
    CM.ChampionModalView.renderFilteredItems = function () {
        rfi();
        addMenus();
        addBorders();
    }

    var rdr = CM.ChampionModalView.render;
    CM.ChampionModalView.render = function (ab,aa) {
        rdr(ab,aa);
        addMenus();
        addBorders();
        addPostChamp();
		addNewHover();
    }

    var oldUpgEnh = CM.ChampionModalView.renderUpgEnh;
    CM.ChampionModalView.renderUpgEnh = function (ag, aa) {
        oldUpgEnh(ag, aa);
        var NextClick = document.getElementById('upgEnhStatsTarget');
        var t = Tabs.champOrganizer;
        t.panelId = ag;  //this is the champ item ID
        t.panelNextLevel = uW.kocChampionItems[ag].level + 1;
        NextClick.removeEventListener("click", t.showNextChampLevel);
        var Locked = document.getElementById('chLockedStatIcon');
        if (Locked != null) return;
        NextClick.addEventListener("click", t.showNextChampLevel);

        var champUpgTab = document.getElementById('champUpgTab');
        if (!champUpgTab) return;

        var clearForgedTokens = function () {
            // remove options for tokens

            var removeItems =  [
                                  uW.ksoItems[21093].name,   //45s
                                  uW.ksoItems[21092].name,   //44s
                                  uW.ksoItems[21091].name,   //43s
                                  uW.ksoItems[21090].name,   //42s
                                  uW.ksoItems[21089].name,   //41s
                                  uW.ksoItems[21088].name,   //40s
                                  uW.ksoItems[21087].name,   //39s
                                  uW.ksoItems[21086].name,   //38s
                                  uW.ksoItems[21085].name,   //37s
                                  uW.ksoItems[21084].name,   //36s
                                  uW.ksoItems[21083].name,   //35s
                                  uW.ksoItems[21082].name,   //34s
                                  uW.ksoItems[21081].name,   //33s
                                  uW.ksoItems[21080].name,   //32s
                                  uW.ksoItems[21079].name,   //31s
                                  uW.ksoItems[21078].name,   //30s
                                  uW.ksoItems[21077].name,   //29s
                                  uW.ksoItems[21076].name,   //28s
                                  uW.ksoItems[21075].name,   //27s
                                  uW.ksoItems[21074].name,   //26s
                                  uW.ksoItems[21073].name,   //25s
                                  uW.ksoItems[21072].name,   //24s
                                  uW.ksoItems[21071].name,   //23s
                                  uW.ksoItems[21070].name,   //22s
                                  uW.ksoItems[21069].name,   //21s
                                  uW.ksoItems[21068].name,   //20s
                                  uW.ksoItems[21067].name,   //19s
                                  uW.ksoItems[21066].name,   //18s
                                  uW.ksoItems[21065].name,   //17s
                                  uW.ksoItems[21064].name,   //16s
                                  uW.ksoItems[21063].name,   //15s
                                  uW.ksoItems[21062].name,   //14s
                                  uW.ksoItems[21061].name,   //13s
                                  uW.ksoItems[21060].name,   //12s
                                  uW.ksoItems[21059].name,   //11s
                                  uW.ksoItems[21055].name,   //10s
                                  uW.ksoItems[21054].name,   //9s
                                  uW.ksoItems[21057].name,   //8s
                                  uW.ksoItems[21053].name,   //7s
                                  uW.ksoItems[21056].name   //6s
                                ];

            $(document.querySelector("#upgEnhBuffSelect")).children("option").each(function () {
                if ($.inArray($(this).text(), removeItems) > -1) $(this).remove();
            });
        }

        var clearOtherForgedTokens = function () {
            // remove options for tokens
            var removeItems =  [uW.ksoItems[21051].name, // Journeyman Smith's Token
                                uW.ksoItems[21052].name, // Smith's Token
                                uW.ksoItems[21058].name  // Expert Smith's Token
                                ];

            $(document.querySelector("#upgEnhBuffSelect")).children("option").each(function () {
                if ($.inArray($(this).text(), removeItems) > -1) $(this).remove();
            });

        }

        if (champUpgTab.className == 'upgEnhTab active') {
            if (STrChOGeneralOptions.useForgedTokens) autoSelectForged();
            if (STrChOGeneralOptions.removeForgedTokens && !STrChOGeneralOptions.useForgedTokens) clearForgedTokens();
            if (STrChOGeneralOptions.removeOtherForgedTokens && !STrChOGeneralOptions.useForgedTokens) clearOtherForgedTokens();
        }
    }

};

var ThroneOldRenderMenu = CM.ContextualMenuThrone.renderMenu;

function installThroneHandlerFunctions() {

    // add some new functionality here ...
    var oldThroneRenderPanel = CM.ThronePanelView.renderPanel;
    var newThroneRenderPanel = function (v1, v2) {
        oldThroneRenderPanel(v1, v2);

        // save off this data ...
        Tabs.throneOrganizer.panelId = v2.id;
        Tabs.throneOrganizer.panelType = v1;
        Tabs.throneOrganizer.panelNextLevel = 2;

        var clearMasterTokens = function () {
            // remove options for tokens
            var removeItems =  [uW.ksoItems[20012].name, // +3 master
                                uW.ksoItems[20013].name, // +5 master
                                uW.ksoItems[20014].name, // +7
                                uW.ksoItems[20015].name, // +9
                                uW.ksoItems[20016].name, // +10
                                uW.ksoItems[20017].name, // +11
                                uW.ksoItems[20018].name, // +12
                                uW.ksoItems[20020].name, // +13
                                uW.ksoItems[20021].name, // +14
                                uW.ksoItems[20023].name, // +15
                                uW.ksoItems[20024].name, // +16
                                uW.ksoItems[20025].name, // +17
                                uW.ksoItems[20026].name, // +18
                                uW.ksoItems[20027].name, // +19
                                uW.ksoItems[20028].name, // +20
                                uW.ksoItems[20029].name, // +21
                                uW.ksoItems[20030].name, // +22
                                uW.ksoItems[20031].name, // +23
                                uW.ksoItems[20032].name, // +24
                                uW.ksoItems[20033].name, // +25
                                uW.ksoItems[20034].name, // +26
                                uW.ksoItems[20035].name, // +27
                                uW.ksoItems[20036].name, // +28
                                uW.ksoItems[20037].name, // +29
                                uW.ksoItems[20038].name, // +30
                                uW.ksoItems[20039].name,  // +31
								uW.ksoItems[20040].name, // +32 master
                                uW.ksoItems[20041].name, // +33master
                                uW.ksoItems[20042].name, // +34
                                uW.ksoItems[20043].name, // +35
                                uW.ksoItems[20044].name, // +36
                                uW.ksoItems[20045].name, // +37
                                uW.ksoItems[20046].name, // +38
                                uW.ksoItems[20047].name, // +39
                                uW.ksoItems[20048].name, // +40
                                uW.ksoItems[20049].name, // +41
                                uW.ksoItems[20050].name, // +42
                                uW.ksoItems[20051].name, // +43
                                uW.ksoItems[20052].name, // +44
                                uW.ksoItems[20053].name, // +45
                                uW.ksoItems[20054].name, // +46
                                uW.ksoItems[20055].name, // +47
                                uW.ksoItems[20056].name, // +48
                                uW.ksoItems[20057].name, // +49
                                uW.ksoItems[20058].name, // +50
                                uW.ksoItems[20059].name, // +51
                                uW.ksoItems[20060].name // +52

                                ];

            $(document.querySelector("#buffDropDown")).children("option").each(function () {
                if ($.inArray($(this).text(), removeItems) > -1) $(this).remove();
            });
            $(document.querySelector("#thronePanelBuffIcon")).removeClass().addClass('icon').addClass('i0');
            if (!STrChOGeneralOptions.useMastersTokens) $(document.querySelector("#thronePanelBuffPrice")).children("span.items").html('');
        }
        var clearOtherTokens = function () {
            // remove options for tokens
            var removeItems =  [uW.ksoItems[20006].name, // lucky token
                                uW.ksoItems[20007].name, // common master
                                uW.ksoItems[20008].name, // uncommon
                                uW.ksoItems[20009].name, // rare
                                uW.ksoItems[20010].name, // epic
                                uW.ksoItems[20011].name, // wondrous
                                uW.ksoItems[20019].name, // super lucky token
                                uW.ksoItems[20022].name, // apprentice token
                                uW.ksoItems[20101].name, //Fortune's Token +19
                                uW.ksoItems[20102].name, //Opportunity's Token +19
                                uW.ksoItems[20103].name, //Prospector's Token +19
                                uW.ksoItems[20104].name, //Fortune's Token +20
                                uW.ksoItems[20105].name, //Opportunity's Token +20
                                uW.ksoItems[20106].name, //Prospector's Token +20
                                uW.ksoItems[20107].name, //Fortune's Token +21
                                uW.ksoItems[20108].name, //Opportunity's Token +21
                                uW.ksoItems[20109].name, //Prospector's Token +21
                                uW.ksoItems[20110].name, //Fortune's Token +22
                                uW.ksoItems[20111].name, //Opportunity's Token +22
                                uW.ksoItems[20112].name, //Prospector's Token +22
                                uW.ksoItems[20113].name, //Fortune's Token +23
                                uW.ksoItems[20114].name, //Opportunity's Token +23
                                uW.ksoItems[20115].name, //Prospector's Token +23
                                uW.ksoItems[20116].name, //Fortune's Token +24
                                uW.ksoItems[20117].name, //Opportunity's Token +24
                                uW.ksoItems[20118].name, //Prospector's Token +24
                                uW.ksoItems[20119].name, //Fortune's Token +25
                                uW.ksoItems[20120].name, //Opportunity's Token +25
                                uW.ksoItems[20121].name, //Prospector's Token +25
                                uW.ksoItems[20122].name, //Fortune's Token +26
                                uW.ksoItems[20123].name, //Opportunity's Token +26
                                uW.ksoItems[20124].name, //Prospector's Token +26
                                uW.ksoItems[20125].name, //Fortune's Token +27
                                uW.ksoItems[20126].name, //Opportunity's Token +27
                                uW.ksoItems[20127].name, //Prospector's Token +27
                                uW.ksoItems[20128].name, //Fortune's Token +28
                                uW.ksoItems[20129].name, //Opportunity's Token +28
                                uW.ksoItems[20130].name, //Prospector's Token +28
                                uW.ksoItems[20131].name, //Fortune's Token +29
                                uW.ksoItems[20132].name, //Opportunity's Token +29
                                uW.ksoItems[20133].name, //Prospector's Token +29
                                uW.ksoItems[20134].name, //Fortune's Token +30
                                uW.ksoItems[20135].name, //Opportunity's Token +30
                                uW.ksoItems[20136].name,  //Prospector's Token +30
                                uW.ksoItems[20137].name, //Fortune's Token +31
                                uW.ksoItems[20138].name, //Opportunity's Token +31
                                uW.ksoItems[20139].name, //Prospector's Token +31
                                uW.ksoItems[20140].name, //Fortune's Token +32
                                uW.ksoItems[20141].name, //Opportunity's Token +32
                                uW.ksoItems[20142].name, //Prospector's Token +32
                                uW.ksoItems[20143].name, //Fortune's Token +33
                                uW.ksoItems[20144].name, //Opportunity's Token +33
                                uW.ksoItems[20145].name, //Prospector's Token +33
                                uW.ksoItems[20146].name, //Fortune's Token +34
                                uW.ksoItems[20147].name, //Opportunity's Token +34
                                uW.ksoItems[20148].name, //Prospector's Token +34
                                uW.ksoItems[20149].name, //Fortune's Token +35
                                uW.ksoItems[20150].name, //Opportunity's Token +35
                                uW.ksoItems[20151].name, //Prospector's Token +35
                                uW.ksoItems[20152].name, //Fortune's Token +36
                                uW.ksoItems[20153].name, //Opportunity's Token +36
                                uW.ksoItems[20154].name, //Prospector's Token +36
                                uW.ksoItems[20155].name, //Fortune's Token +37
                                uW.ksoItems[20156].name, //Opportunity's Token +37
                                uW.ksoItems[20157].name, //Prospector's Token +37
                                uW.ksoItems[20158].name, //Fortune's Token +38
                                uW.ksoItems[20159].name, //Opportunity's Token +38
                                uW.ksoItems[20160].name, //Prospector's Token +38
                                uW.ksoItems[20161].name, //Fortune's Token +39
                                uW.ksoItems[20162].name, //Opportunity's Token +39
                                uW.ksoItems[20163].name, //Prospector's Token +39
                                uW.ksoItems[20164].name, //Fortune's Token +40
                                uW.ksoItems[20165].name, //Opportunity's Token +40
                                uW.ksoItems[20166].name, //Prospector's Token +40
                                uW.ksoItems[20167].name, //Fortune's Token +41
                                uW.ksoItems[20168].name, //Opportunity's Token +41
                                uW.ksoItems[20169].name,  //Prospector's Token +41
								uW.ksoItems[20170].name, //Fortune's Token +42
                                uW.ksoItems[20171].name, //Opportunity's Token +42
                                uW.ksoItems[20172].name, //Prospector's Token +42
                                uW.ksoItems[20173].name, //Fortune's Token +43
                                uW.ksoItems[20174].name, //Opportunity's Token +43
                                uW.ksoItems[20175].name, //Prospector's Token +43
                                uW.ksoItems[20176].name, //Fortune's Token +44
                                uW.ksoItems[20177].name, //Opportunity's Token +44
                                uW.ksoItems[20178].name, //Prospector's Token +44
                                uW.ksoItems[20179].name, //Fortune's Token +45
                                uW.ksoItems[20180].name, //Opportunity's Token +45
                                uW.ksoItems[20181].name, //Prospector's Token +45
                                uW.ksoItems[20182].name, //Fortune's Token +46
                                uW.ksoItems[20183].name, //Opportunity's Token +46
                                uW.ksoItems[20184].name, //Prospector's Token +46
                                uW.ksoItems[20185].name, //Fortune's Token +47
                                uW.ksoItems[20186].name, //Opportunity's Token +47
                                uW.ksoItems[20187].name, //Prospector's Token +47
                                uW.ksoItems[20188].name, //Fortune's Token +48
                                uW.ksoItems[20189].name, //Opportunity's Token +48
                                uW.ksoItems[20190].name, //Prospector's Token +48
                                uW.ksoItems[20191].name, //Fortune's Token +49
                                uW.ksoItems[20192].name, //Opportunity's Token +49
                                uW.ksoItems[20193].name, //Prospector's Token +49
                                uW.ksoItems[20194].name, //Fortune's Token +50
                                uW.ksoItems[20195].name, //Opportunity's Token +50
                                uW.ksoItems[20196].name, //Prospector's Token +50
                                uW.ksoItems[20197].name, //Fortune's Token +51
                                uW.ksoItems[20198].name, //Opportunity's Token +51
                                uW.ksoItems[20199].name //Prospector's Token +51

                                ];

            $(document.querySelector("#buffDropDown")).children("option").each(function () {
                if ($.inArray($(this).text(), removeItems) > -1) $(this).remove();
            });
            $(document.querySelector("#thronePanelBuffIcon")).removeClass().addClass('icon').addClass('i0');
            if (!STrChOGeneralOptions.useMastersTokens) $(document.querySelector("#thronePanelBuffPrice")).children("span.items").html('');

        }

        var doUpdradeChecks = function () {
            if (STrChOGeneralOptions.useMastersTokens) autoSelectMasters(); //v2.id is the throneItemID
            if (!STrChOGeneralOptions.useMastersTokens && STrChOGeneralOptions.removeMastersTokens) clearMasterTokens();
            if (!STrChOGeneralOptions.useMastersTokens && STrChOGeneralOptions.removeOtherTokens) clearOtherTokens();
            if (!STrChOGeneralOptions.useMastersTokens && STrChOGeneralOptions.buffsOff) unselectToken();
            if (STrChOGeneralOptions.safetyOn) throneSafetyCheck();
        }

        var doEnhanceChecks = function () {
            if (!STrChOGeneralOptions.useMastersTokens && STrChOGeneralOptions.buffsOff) unselectToken();
            if (STrChOGeneralOptions.safetyOn) throneSafetyCheck();
        }

        var addTabButtonChecks = function () {
            // register some callbacks when the buttons are pushed

            var pc = document.querySelector('#thronePanelContainer');
            $(pc).find("div.navigation ul").children("li.upgrade").click(function() {
                doUpdradeChecks();
                addTabButtonChecks();
            });

            $(pc).find("div.navigation ul").children("li.enhance").click(function() {
                doEnhanceChecks();
                addTabButtonChecks();
            });

            $(pc).find("div.navigation ul").children("li.jewel").click(function() {
                addTabButtonChecks();
            });
        }

        if (v1 == "upgrade") doUpdradeChecks();
        if (v1 == "enhance") doEnhanceChecks();

        addTabButtonChecks();
    }
    // hook up to the new function
    CM.ThronePanelView.renderPanel = newThroneRenderPanel;


	var oldAddJewel = CM.ThroneController.addJewel; //fixes the issue with adding/removing jewels and having it get stuck with the spinney
	var newAddJewel = function (aj, ai) {
		oldAddJewel(aj, ai);
		CM.ThronePanelView.removeSpinny();
	}
	CM.ThroneController.addJewel = newAddJewel;


	var oldRemoveJewel = CM.ThroneController.removeJewel;
	var newRemoveJewel = function (ak, ai) {
		oldRemoveJewel(ak, ai);
		CM.ThronePanelView.removeSpinny();
	}
	CM.ThroneController.removeJewel = newRemoveJewel;

    // override the salvageItem function to allow upgrade to +1 first
    var oldSalvageItem = CM.ThroneController.salvageItem;
    var newSalvageItem = function (item) {
        if ( STrChOThroneSalvageData.upgradeManual )
        {
            if (item && item.quality <= STrChOThroneSalvageData.upgradeFirstQual && item.level==0 )
            {
                var status = Tabs.throneSalvager.deleting;
                Tabs.throneSalvager.deleting = true;
                Tabs.throneUpgrader.doUpgrade(item.id,true);
                Tabs.throneSalvager.deleting = status;
            }
        }
        oldSalvageItem(item);
    };
    CM.ThroneController.salvageItem = newSalvageItem;


    var oldRenderInventory = CM.ThroneView.renderInventory;
    var newRenderInventory = function(l) {
        oldRenderInventory(l);

        $("ul#throneInventoryList > li > div").removeClass('STrChOBlueBorder');
        $("ul#throneInventoryList > li > div").removeClass('STrChOYellowBorder');
        for (ii in STrChOThroneQueueData.list) {
            var list_item = STrChOThroneQueueData.list[ii];
            if (!list_item) continue;
            if (list_item.status != "complete") {
                var id = list_item.item;

                if (list_item.action == "upgrade") $("div#throneInventoryItem" + id).addClass('STrChOBlueBorder');
                if (list_item.action == "enhance") $("div#throneInventoryItem" + id).addClass('STrChOYellowBorder');
            }
        }
        Tabs.thronePresets.paintTags();

    }
    CM.ThroneView.renderInventory = newRenderInventory;

    var oldOpenThrone = CM.ThroneView.openThrone;
    var newOpenThrone = function (F) {
        oldOpenThrone(F);

        STrChOSwapTile = null;

        if (STrChOGeneralOptions.draggableThroneItems) {
            $("#advisorContainer").draggable();
            $("#heroContainer").draggable();
            $("#chairContainer").draggable();
            $("#candelabrumContainer").draggable();
            $("#tableContainer").draggable();
            $("#windowContainer").draggable();
            $("#bannerContainer").draggable();
            $("#trophyContainer").draggable();
            $("#statueContainer").draggable();
            $("#petContainer").draggable();
            $("#tapestryContainer").draggable();
            $("#pillarContainer").draggable();
        }

        Tabs.throneSalvager.updateThroneMenu();
        Tabs.throneUpgrader.updateThroneMenu();
        Tabs.throneRepair.updateThroneMenu();
        Tabs.throneSorter.updateThroneMenu();

        $("ul#throneInventoryList > li > div").removeClass('STrChOBlueBorder');
        $("ul#throneInventoryList > li > div").removeClass('STrChOYellowBorder');

        for (ii in STrChOThroneQueueData.list) {
            var list_item = STrChOThroneQueueData.list[ii];
            if (!list_item) continue;
            if (list_item.status != "complete") {
                var id = list_item.item;
                if (list_item.action == "upgrade") $("div#throneInventoryItem" + id).addClass('STrChOBlueBorder');
                if (list_item.action == "enhance") $("div#throneInventoryItem" + id).addClass('STrChOYellowBorder');
            }
        }

        Tabs.thronePresets.paintTags();

        //these next few lines expands the throne inventory list
        var h = 564;
        var el1 = document.getElementById('throneStatList');
        if (el1) { h=h-el1.clientHeight; }
        $("ul#throneInventoryList").css('height', h+'px');
        $("div#throneInventoryContainer").css('height', h+'px');

        if (STrChOGeneralOptions.throneSorter) {
            if (STrChOThroneSorter.length == 0) resetThroneSorter();
            sortThroneSorter(false);
        }
    }
    CM.ThroneView.openThrone = newOpenThrone;

    CM.ContextualMenuThrone.renderMenu = CardContextMenu;

}

function STrChOThroneSorterEventListener(obj) {
    var throneId = obj.id.split('throneInventoryItem')[1];
    var throneItem = uW.kocThroneItems[throneId];
    if (STrChOSwapTile == null) { //this means i haven't clicked the first tile to swap yet, so set it and wait for the second to swap with
        STrChOSwapTile = throneId
        $(obj).prepend("<div class='swapBorderThrone'></div>");
    } else {
        if (throneId == STrChOSwapTile) {
            $('#throneInventoryItem' + STrChOSwapTile).children(".swapBorderThrone").remove();
            STrChOSwapTile = null;
            return;
        }
        $('#throneInventoryItem' + STrChOSwapTile).children(".swapBorderThrone").remove();

        var fromTile = document.getElementById('throneInventoryItem' + STrChOSwapTile);
        var fromTilePosition = 0;
        var child = fromTile;
        while( (child = child.previousSibling) != null ) fromTilePosition++;

        var toTile = document.getElementById('throneInventoryItem' + throneId);
        var toTilePosition = 0;
        child = obj;
        while( (child = child.previousSibling) != null ) toTilePosition++;

        var fromParent = fromTile.parentElement;
        var toParent = toTile.parentElement;

        var fromDelete = fromParent.children[fromTilePosition];
        var toDelete = toParent.children[toTilePosition];

        if (fromParent != toParent) { //simple swap
            $(fromDelete).remove();
            $(toDelete).remove();
            fromParent.insertBefore(toTile, fromParent.childNodes[fromTilePosition]);
            toParent.insertBefore(fromTile, toParent.childNodes[toTilePosition]);
        } else { //little more tricky
            var newRow = [];
            for (var idx = 0; idx < fromParent.children.length; idx++) {
                if (idx == fromTilePosition) {
                    newRow.unshift(toTile);
                } else if (idx == toTilePosition) {
                    newRow.unshift(fromTile);
                } else {
                    newRow.unshift(fromParent.children[idx]);
                }
            }
            while (fromParent.hasChildNodes()) fromParent.removeChild(fromParent.lastChild);
            while (newRow.length > 0) fromParent.appendChild(newRow.pop());
        }
        STrChOSwapTile = null;
        setThroneSorter(false);
        SAVESTrChOThroneSorter();
    }

}

function resetThroneSorter() {
    STrChOThroneSorter = [];
    counter = 0;
    for (var throneId in uW.kocThroneItems) {
        STrChOThroneSorter.push(throneId);
        counter++;
        if (counter == STrChOMaxThroneCards) break;
    }
    SAVESTrChOThroneSorter();
}

function sortThroneSorter(fromOrganizer) {  //you should never really call this function from the sorter tab because it won't do anything
    if (STrChOThroneSorter.length == 0) resetThroneSorter();
    var reorder = [];
    if (!fromOrganizer) {
        //store all the TILES in the sorter array and remove them from inventory
        for (var idx = 0; idx < STrChOThroneSorter.length; idx++) {
            var throneTile = document.getElementById('throneInventoryItem' + STrChOThroneSorter[idx]);
            if (!throneTile) continue;
            reorder.unshift(throneTile);
            $(throneTile).remove();
        }
        //check for any remaining TILES and store them temp and remove from inventory
        var throneInventoryList = document.getElementById('throneInventoryList');
        var throneRows = throneInventoryList.getElementsByClassName('active');
        for (var row = 0; row < throneRows.length; row++) {
            var throneRow = throneRows[row];
            if (throneRow.children.length > 0) {
                for (var c = 0; c < throneRow.children.length; c++) {
                    var throneTile = throneRow.children[c];
                    if (!throneTile) continue;
                    reorder.unshift(throneTile);
                }
                while (throneRow.firstChild) throneRow.removeChild(throneRow.firstChild);
            }
        }
        //by now, ALL TILES should be in the reorder array, time to put them back up on the display
        var throneInventoryList = document.getElementById('throneInventoryList');
        var throneRows = throneInventoryList.getElementsByClassName('active');
        for (var row = 0; row < throneRows.length; row++) {
            var throneRow = throneRows[row];
            for (var c = 0; c < 5; c++) {
                var throneTile = reorder.pop();
                if (!throneTile) continue;
                throneTile.addEventListener('contextmenu', function(evt) {
                    evt.preventDefault();
                    STrChOThroneSorterEventListener(this);
                }, false);
                throneRow.appendChild(throneTile);
            }
        }
        setThroneSorter(fromOrganizer);
    }
}

function setThroneSorter(fromOrganizer) {
    if (STrChOThroneSorter.length == 0) resetThroneSorter();
    var reorder = [];
    var notIn = [];

    if (fromOrganizer) {
        var STrChOThroneSorterInventoryList = document.getElementById('STrChOThroneSorterInventoryList');
        var throneRows = STrChOThroneSorterInventoryList.getElementsByClassName('active');
        for (var row = 0; row < throneRows.length; row++) {
            var throneRow = throneRows[row];
            if (throneRow.children.length > 0) {
                for (var col = 0; col < throneRow.children.length; col++) {
                    var throneDiv = throneRow.children[col];
                    if (!throneDiv) continue;
                    var cellId = throneDiv.id;
                    var throneId = cellId.split('STrChOThroneSorterInventoryIcon')[1];
                    if (STrChOThroneSorter.indexOf(throneId) == -1) {
                        notIn.unshift(throneId);
                    } else {
                        reorder.unshift(throneId);
                    }
                }
            }
        }
    } else {
        var throneInventoryList = document.getElementById('throneInventoryList');
        var throneRows = throneInventoryList.getElementsByClassName('active');
        for (var row = 0; row < throneRows.length; row++) {
            var throneRow = throneRows[row];
            if (throneRow.children.length > 0) {
                for (var col = 0; col < throneRow.children.length; col++) {
                    var cellId = throneRow.children[col].id;
                    var throneId = cellId.split('throneInventoryItem')[1];
                    if (STrChOThroneSorter.indexOf(throneId) == -1) {
                        notIn.unshift(throneId);
                    } else {
                        reorder.unshift(throneId);
                    }
                }
            }
        }
    }
    STrChOThroneSorter = [];
    while (reorder.length > 0) STrChOThroneSorter.push(reorder.pop());
    while (notIn.length > 0) STrChOThroneSorter.push(notIn.pop());
}

function isUndefined(obj) {
    if (typeof(obj) == 'undefined')
        return true;
    else
        return false;
}

function indexOfChampCard(Id) {
    var counter = 0;
    for (var champId in uW.kocChampionItems) {
        counter += 1;
        if (champId == Id) return counter;
    }
    return counter;
}

function indexOfThroneCard(Id) {
    var counter = 0;
    for (var throneId in uW.kocThroneItems) {
        counter += 1;
        if (throneId == Id) return counter;
    }
    return counter;
}

function countHowManyThroneCards() {
    var counter = 0;
    for (var throneId in uW.kocThroneItems) counter ++;
    return counter;
}

function countHowManyChampCards() {
    var counter = 0;
    for (var champId in uW.kocChampionItems) counter++;
    return counter;
}

function countHowManyThroneSlots(Id) {
    var presetSlots = getObjectCollectionCount(Seed.throne.slotEquip);
    var counter = 0;
    for (var slot = 1; slot < presetSlots + 1; slot++) {
        var throneItems = Seed.throne.slotEquip[slot];
        for (itemIdx = 0; itemIdx < throneItems.length; itemIdx++)
            if (Id == throneItems[itemIdx]) counter++;
    }
    return counter;
}

function howManyThroneSlots(Id) {
    var presetSlots = getObjectCollectionCount(Seed.throne.slotEquip);
    var presetSlotsFound = [];
    var presetSlotMsg = '';
    for (var slot = 1; slot < presetSlots + 1; slot++) {
        var throneItems = Seed.throne.slotEquip[slot];
        for (itemIdx = 0; itemIdx < throneItems.length; itemIdx++) {
            if (Id == throneItems[itemIdx]) {
                if (presetSlotsFound.length % 8 == 0) {
                    presetSlotsFound.push('<br>' + slot);
                } else {
                    presetSlotsFound.push(slot);
                }
            }
        }
    }
    if (presetSlotsFound.length > 0) {
        presetSlotMsg = 'Card Found In The<br>Following Preset Slots:' + presetSlotsFound.join(', ');
    } else {
        presetSlotMsg = 'Not In Any Presets';
    }
    return presetSlotMsg;
}

function whichChampSlot(Id) {
    var presetSlotMsg = '';
    var champItem = uW.kocChampionItems[Id];
    var championId = champItem.equippedTo;
    for (var i = 1; i < STrChOMaxChampions+1; i++) {
        var thisChampion = Seed.champion.champions[i-1];
        if (thisChampion.championId == championId) {
            presetSlotMsg = 'Item Equipped To<br> Champ In Slot ' + i + '<br>Name: ' + thisChampion.name;
            break;
        }
    }
    return presetSlotMsg;
}

var CardContextMenu = function (tileDiv, theItem, fromOrganizer) {

    if (typeof(fromOrganizer) == 'undefined') fromOrganizer = false;

    if (theItem == null) {
        ThroneOldRenderMenu(tileDiv, theItem);
        return;
    }

    var lastMenuItem = null;

    var throneItem = theItem;
    var champItem = theItem;

    var isThrone = (typeof(champItem.equipmentId) == 'undefined');
    var hasJewel = false;

    var cmContainerOpen = (document.getElementsByClassName('cmModalContainer').length == 1 ? true : false);

    var itemIndex = 0;
    var isBroken = false;
    var isRepairing = false;
    var isRepairAll = false;
    var itemId = null;
    var itemLevel = 0;

    var presetSlot = 1;
    var championId = Seed.champion.champions[presetSlot-1].championId;
    var presetTagCount = 0;
    var howManyMessage = '';
    var inPresets = false;

    if (isThrone) {
        if (!fromOrganizer) ThroneOldRenderMenu(tileDiv, theItem);
        if (throneItem.jewel) {
            if (throneItem.jewel.valid) hasJewel = true;
        }
        //hasJewel = throneItem.jewel.valid;
        isBroken = throneItem.isBroken
        presetSlot = Seed.throne.activeSlot;
        isRepairAll = isAnyThroneBroke();
        presetTagCount = getThronePresetTagCount(presetSlot);
        itemId = throneItem.id;
        itemIndex = indexOfThroneCard(itemId);
        itemLevel = throneItem.level;
        howManyMessage = howManyThroneSlots(itemId);
        if (countHowManyThroneSlots(itemId) > 0) inPresets = true;
    } else {
        isBroken = (champItem.status == CM.CHAMPION.STATUS_BROKEN_UPGRADE || champItem.status == CM.CHAMPION.STATUS_BROKEN_ENHANCE);
        isRepairing = (champItem.status == CM.CHAMPION.STATUS_REPAIRING_ENHANCE || champItem.status == CM.CHAMPION.STATUS_REPAIRING_UPGRADE);
        if (!fromOrganizer) {
            for (i = 0; i < STrChOMaxChampions; i++) {
                var champClass = $(".champion_states").children(".name" + i).attr('class');
                if ( champClass.indexOf("active") == -1) continue;
                presetSlot = i + 1;
                break;
            }
        }
        isRepairAll = isAnyChampBroke();
        presetTagCount = getChampPresetTagCount(presetSlot);
        itemId = champItem.equipmentId;
        itemIndex = indexOfChampCard(itemId);
        itemLevel = champItem.level;
        howManyMessage = whichChampSlot(itemId);
        if (howManyMessage != '') {
            inPresets = true;
        } else {
            howManyMessage = 'Not Equipped';
        }
    }

    if (!fromOrganizer) {
        uW.removeTooltip();
        uW.Tooltip.hide();
    }

    function ContextMenuExpandCollapse(menuItem, isExpanding) {
        var menuSubItemClass = menuItem.id + "_SubItem";
        var SubItems = document.getElementsByClassName(menuSubItemClass);
        for (var idx = 0; idx < SubItems.length; idx++) {
            var menuSubItem = SubItems[idx];
            if (isExpanding)
                menuSubItem.className = menuSubItem.className.replace('STrChOContextHidden', 'STrChOContextVisible');
            else
                menuSubItem.className = menuSubItem.className.replace('STrChOContextVisible', 'STrChOContextHidden');
        }
    }

    var STrChOContextMenu = document.getElementById("contextMenu");
    if (STrChOContextMenu) {
        while (STrChOContextMenu.hasChildNodes()) STrChOContextMenu.removeChild(STrChOContextMenu.lastChild);
    } else {
        STrChOContextMenu = document.createElement('div');
        STrChOContextMenu.addEventListener('mouseleave', function () {
            $(this).remove();
        }, false);
    }

    if (isThrone)
        STrChOContextMenu.innerHTML = throneItem.type.capitalizeFirstLetter() + '+' + itemLevel;  //throneItem.name.replace(/ /g, '<br>');
    else
        STrChOContextMenu.innerHTML = champItemNames[champItem.type].capitalizeFirstLetter() + '+' + itemLevel; //champItem.name.replace(/ /g, '<br>');

    STrChOContextMenu.className = 'STrChOContextMenu';

    var STrChOContextMenuUpgrading = document.createElement('div');
    STrChOContextMenuUpgrading.className = 'STrChOContextMenuItem STrChOBrown';
    STrChOContextMenuUpgrading.innerHTML = 'UPGRADING';
    STrChOContextMenuUpgrading.id = 'STrChOContextMenuUpgrading';
    STrChOContextMenuUpgrading.addEventListener('click', function(A) {
        A.stopPropagation();
        if (lastMenuItem == this) {
            ContextMenuExpandCollapse(this, false);
            lastMenuItem = null;
            return;
        }
        if (lastMenuItem == null) lastMenuItem = this;
        if (lastMenuItem.id != this.id) ContextMenuExpandCollapse(lastMenuItem, false);
        ContextMenuExpandCollapse(this, true);
        lastMenuItem = this;
    }, false);
    STrChOContextMenu.appendChild(STrChOContextMenuUpgrading);

    var STrChOContextMenuUpgrading_AutoUpg = document.createElement('div');
    STrChOContextMenuUpgrading_AutoUpg.className = 'STrChOContextMenuSubItem STrChOContextHidden STrChOBlue STrChOContextMenuUpgrading_SubItem';
    STrChOContextMenuUpgrading_AutoUpg.innerHTML = 'Auto Upgrade';
    if ( (isThrone && throneItem.level < STrChOMaxThroneLevel) || (!isThrone && champItem.level < STrChOMaxChampLevel) ) {
        STrChOContextMenuUpgrading_AutoUpg.addEventListener('click', function(A) {
            A.stopPropagation();
            if (isThrone)
                Tabs.throneUpgrader.addUpgradeItem(itemId);
            else
                Tabs.champUpgrader.addUpgradeItem(itemId);
            $(STrChOContextMenu).remove();
        }, false);
    } else {
        STrChOContextMenuUpgrading_AutoUpg.className += ' STrChODisabled';
    }
    STrChOContextMenu.appendChild(STrChOContextMenuUpgrading_AutoUpg);

    var STrChOContextMenuUpgrading_Upgrade = document.createElement('div');
    STrChOContextMenuUpgrading_Upgrade.className = 'STrChOContextMenuSubItem STrChOContextHidden STrChOBlue STrChOContextMenuUpgrading_SubItem';
    STrChOContextMenuUpgrading_Upgrade.innerHTML = 'Upgrade';
    if ( ( (isThrone && throneItem.level < STrChOMaxThroneLevel) || (!isThrone && champItem.level < STrChOMaxChampLevel) ) && !isBroken ) {
        STrChOContextMenuUpgrading_Upgrade.addEventListener('click', function(A) {
            A.stopPropagation();
            if (isThrone) {
                if (!cmContainerOpen) CM.ThroneView.openThrone();
                CM.ThronePanelView.renderPanel("upgrade", throneItem)
            } else {
                if (!cmContainerOpen) CM.ChampionModalController.open();
                CM.ChampionModalView.upgEnhSlideIn(itemId, "upg");
            }
            $(STrChOContextMenu).remove();
        }, false);
    } else {
        STrChOContextMenuUpgrading_Upgrade.className += ' STrChODisabled';
    }
    STrChOContextMenu.appendChild(STrChOContextMenuUpgrading_Upgrade);

    var STrChOContextMenuEnhancing = document.createElement('div');
    STrChOContextMenuEnhancing.className = 'STrChOContextMenuItem STrChOBrown';
    STrChOContextMenuEnhancing.innerHTML = 'ENHANCING';
    STrChOContextMenuEnhancing.id = 'STrChOContextMenuEnhancing';
    STrChOContextMenuEnhancing.addEventListener('click', function(A) {
        if (lastMenuItem == this) {
            ContextMenuExpandCollapse(this, false);
            lastMenuItem = null;
            return;
        }
        A.stopPropagation();
        if (lastMenuItem == null) lastMenuItem = this;
        if (lastMenuItem.id != this.id) ContextMenuExpandCollapse(lastMenuItem, false);
        ContextMenuExpandCollapse(this, true);
        lastMenuItem = this;
    }, false);
    STrChOContextMenu.appendChild(STrChOContextMenuEnhancing);


    var STrChOContextMenuEnhancing_AutoEnh = document.createElement('div');
    STrChOContextMenuEnhancing_AutoEnh.className = 'STrChOContextMenuSubItem STrChOContextHidden STrChOBlue STrChOContextMenuEnhancing_SubItem';
    STrChOContextMenuEnhancing_AutoEnh.innerHTML = 'Auto Enhance';
    if ( (isThrone && throneItem.quality < STrChOMaxThroneQuality) || (!isThrone && champItem.rarity < STrChOMaxChampQuality) ) {
        STrChOContextMenuEnhancing_AutoEnh.addEventListener('click', function(A) {
            A.stopPropagation();
            if (isThrone)
                Tabs.throneUpgrader.addEnhanceItem(itemId);
            else
                Tabs.champUpgrader.addEnhanceItem(itemId);
            $(STrChOContextMenu).remove();
        }, false);
    } else {
        STrChOContextMenuEnhancing_AutoEnh.className += ' STrChODisabled';
    }
    STrChOContextMenu.appendChild(STrChOContextMenuEnhancing_AutoEnh);

    var STrChOContextMenuEnhancing_Enhance = document.createElement('div');
    STrChOContextMenuEnhancing_Enhance.className = 'STrChOContextMenuSubItem STrChOContextHidden STrChOBlue STrChOContextMenuEnhancing_SubItem';
    STrChOContextMenuEnhancing_Enhance.innerHTML = 'Enhance';
    if (!fromOrganizer) {
        if ( ( (isThrone && throneItem.quality < STrChOMaxThroneQuality) || (!isThrone && champItem.rarity < STrChOMaxChampQuality) ) && !isBroken ) {
            STrChOContextMenuEnhancing_Enhance.addEventListener('click', function(A) {
                A.stopPropagation();
                if (isThrone) {
                    if (!cmContainerOpen) CM.ThroneView.openThrone();
                    CM.ThronePanelView.renderPanel("enhance", throneItem)
                } else {
                    if (!cmContainerOpen) CM.ChampionModalController.open();
                    CM.ChampionModalView.upgEnhSlideIn(itemId, "enh");
                }
                $(STrChOContextMenu).remove();
            }, false);
        } else {
            STrChOContextMenuEnhancing_Enhance.className += ' STrChODisabled';
        }
    } else {
        STrChOContextMenuEnhancing_Enhance.className += ' STrChODisabled';
    }
    STrChOContextMenu.appendChild(STrChOContextMenuEnhancing_Enhance);

    var STrChOContextMenuEnhancing_Jewel = document.createElement('div');
    STrChOContextMenuEnhancing_Jewel.className = 'STrChOContextMenuSubItem STrChOContextHidden STrChOBlue STrChOContextMenuEnhancing_SubItem';
    STrChOContextMenuEnhancing_Jewel.innerHTML = 'Jewel';
    if (isThrone && !isBroken) {
        STrChOContextMenuEnhancing_Jewel.addEventListener('click', function(A) {
            A.stopPropagation();
            if (!cmContainerOpen) CM.ThroneView.openThrone();
            CM.ThronePanelView.renderPanel("jewel", throneItem)
            $(STrChOContextMenu).remove();
        }, false);
    } else {
        STrChOContextMenuEnhancing_Jewel.className += ' STrChODisabled';
    }
    STrChOContextMenu.appendChild(STrChOContextMenuEnhancing_Jewel);

    var STrChOContextMenuEquipping = document.createElement('div');
    STrChOContextMenuEquipping.className = 'STrChOContextMenuItem STrChOBrown';
    STrChOContextMenuEquipping.innerHTML = 'EQUIPPING';
    STrChOContextMenuEquipping.id = 'STrChOContextMenuEquipping';
    STrChOContextMenuEquipping.addEventListener('click', function(A) {
        if (lastMenuItem == this) {
            ContextMenuExpandCollapse(this, false);
            lastMenuItem = null;
            return;
        }
        A.stopPropagation();
        if (lastMenuItem == null) lastMenuItem = this;
        if (lastMenuItem.id != this.id) ContextMenuExpandCollapse(lastMenuItem, false);
        ContextMenuExpandCollapse(this, true);
        lastMenuItem = this;
    }, false);
    STrChOContextMenu.appendChild(STrChOContextMenuEquipping);

    var STrChOContextMenuEquipping_Equip = document.createElement('div');
    STrChOContextMenuEquipping_Equip.className = 'STrChOContextMenuSubItem STrChOContextHidden STrChOGreen STrChOContextMenuEquipping_SubItem';
    STrChOContextMenuEquipping_Equip.innerHTML = 'Equip';
    if (!isBroken) {
        if ( (!throneItem.isEquipped && isThrone) || (!isThrone && champItem.equippedTo != championId) ) {
            STrChOContextMenuEquipping_Equip.addEventListener('click', function(A) {
                A.stopPropagation();
                if (isThrone)
                    CM.ThroneController.equipItem(throneItem);
                else
                    Tabs.champPresets.equipItem(itemId);
                    //CM.ChampionManager.equipItem(chId);
                $(STrChOContextMenu).remove();
            }, false);
        } else {
            STrChOContextMenuEquipping_Equip.className += ' STrChODisabled';
        }
    } else {
        STrChOContextMenuEquipping_Equip.className += ' STrChODisabled';
    }
    STrChOContextMenu.appendChild(STrChOContextMenuEquipping_Equip);

    var STrChOContextMenuEquipping_Unequip = document.createElement('div');
    STrChOContextMenuEquipping_Unequip.className = 'STrChOContextMenuSubItem STrChOContextHidden STrChOGreen STrChOContextMenuEquipping_SubItem';
    STrChOContextMenuEquipping_Unequip.innerHTML = 'Unequip';
    if (!isBroken) {
        if ( (throneItem.isEquipped && isThrone) || (!isThrone && champItem.equippedTo != 0) ) {
            STrChOContextMenuEquipping_Unequip.addEventListener('click', function(A) {
                A.stopPropagation();
                if (isThrone)
                    CM.ThroneController.unequipItem(throneItem);
                else
                    Tabs.champPresets.unequipItem(itemId);
                    //CM.ChampionManager.unequipItem(itemId);
                $(STrChOContextMenu).remove();
            }, false);
        } else {
            STrChOContextMenuEquipping_Unequip.className += ' STrChODisabled';
        }
    } else {
        STrChOContextMenuEquipping_Unequip.className += ' STrChODisabled';
    }
    STrChOContextMenu.appendChild(STrChOContextMenuEquipping_Unequip);


    var STrChOContextMenuEquipping_UnequipAll = document.createElement('div');
    STrChOContextMenuEquipping_UnequipAll.className = 'STrChOContextMenuSubItem STrChOContextHidden STrChOGreen STrChOContextMenuEquipping_SubItem';
    STrChOContextMenuEquipping_UnequipAll.innerHTML = 'Unequip All';
    STrChOContextMenuEquipping_UnequipAll.addEventListener('click', function(A) {
        A.stopPropagation();
        if (isThrone)
            Tabs.thronePresets.unequipAllItems(presetSlot);
        else
            Tabs.champPresets.unequipAllItems(presetSlot);
        $(STrChOContextMenu).remove();
    }, false);
    STrChOContextMenu.appendChild(STrChOContextMenuEquipping_UnequipAll);


    var STrChOContextMenuRepair = document.createElement('div');
    STrChOContextMenuRepair.className = 'STrChOContextMenuItem STrChOBrown';
    STrChOContextMenuRepair.innerHTML = 'REPAIR';
    STrChOContextMenuRepair.id = 'STrChOContextMenuRepair';
    STrChOContextMenuRepair.addEventListener('click', function(A) {
        if (lastMenuItem == this) {
            ContextMenuExpandCollapse(this, false);
            lastMenuItem = null;
            return;
        }
        A.stopPropagation();
        if (lastMenuItem == null) lastMenuItem = this;
        if (lastMenuItem.id != this.id) ContextMenuExpandCollapse(lastMenuItem, false);
        ContextMenuExpandCollapse(this, true);
        lastMenuItem = this;
    }, false);
    STrChOContextMenu.appendChild(STrChOContextMenuRepair);


    var STrChOContextMenuRepair_Repair = document.createElement('div');
    STrChOContextMenuRepair_Repair.className = 'STrChOContextMenuSubItem STrChOContextHidden STrChOBlue STrChOContextMenuRepair_SubItem';
    STrChOContextMenuRepair_Repair.innerHTML = 'Repair Card';
    if (isBroken || (isRepairing && !isThrone) ) {
        STrChOContextMenuRepair_Repair.addEventListener('click', function(A) {
            A.stopPropagation();
            if (isThrone)
                CM.ThronePanelView.renderBroken(throneItem);
            else
                CM.ChampionPanelView.renderBroken(champItem);
            $(STrChOContextMenu).remove();
        }, false);
    } else {
        STrChOContextMenuRepair_Repair.className += ' STrChODisabled';
    }
    STrChOContextMenu.appendChild(STrChOContextMenuRepair_Repair);


    var STrChOContextMenuRepair_AutoRepair = document.createElement('div');
    STrChOContextMenuRepair_AutoRepair.className = 'STrChOContextMenuSubItem STrChOContextHidden STrChOBlue STrChOContextMenuRepair_SubItem';
    STrChOContextMenuRepair_AutoRepair.innerHTML = 'Auto Repair';
    if (isBroken) {
        STrChOContextMenuRepair_AutoRepair.addEventListener('click', function(A) {
            A.stopPropagation();
            if (isThrone) {
                Tabs.throneRepair.addQueue(itemId);
                Tabs.throneRepair.buildThroneRepairDisplay();
            } else {
                Tabs.champRepair.addQueue(itemId);
                Tabs.champRepair.buildChampRepairDisplay();
            }
            $(STrChOContextMenu).remove();
        }, false);
    } else {
        STrChOContextMenuRepair_AutoRepair.className += ' STrChODisabled';
    }
    STrChOContextMenu.appendChild(STrChOContextMenuRepair_AutoRepair);


    var STrChOContextMenuRepair_AutoRepairAll = document.createElement('div');
    STrChOContextMenuRepair_AutoRepairAll.className = 'STrChOContextMenuSubItem STrChOContextHidden STrChOBlue STrChOContextMenuRepair_SubItem';
    STrChOContextMenuRepair_AutoRepairAll.innerHTML = 'Auto Repair All';
    if (isRepairAll) {
        STrChOContextMenuRepair_AutoRepairAll.addEventListener('click', function(A) {
            A.stopPropagation();
            if (isThrone) {
                Tabs.throneRepair.addAllQueue();
                Tabs.throneRepair.buildThroneRepairDisplay();
            } else {
                Tabs.champRepair.addAllQueue();
                Tabs.champRepair.buildChampRepairDisplay();
            }
            $(STrChOContextMenu).remove();
        }, false);
    } else {
        STrChOContextMenuRepair_AutoRepairAll.className += ' STrChODisabled';
    }
    STrChOContextMenu.appendChild(STrChOContextMenuRepair_AutoRepairAll);

    var STrChOContextMenuSalvaging = document.createElement('div');
    STrChOContextMenuSalvaging.className = 'STrChOContextMenuItem STrChOBrown';
    STrChOContextMenuSalvaging.innerHTML = 'SALVAGING';
    STrChOContextMenuSalvaging.id = 'STrChOContextMenuSalvaging';
    STrChOContextMenuSalvaging.addEventListener('click', function(A) {
        if (lastMenuItem == this) {
            ContextMenuExpandCollapse(this, false);
            lastMenuItem = null;
            return;
        }
        A.stopPropagation();
        if (lastMenuItem == null) lastMenuItem = this;
        if (lastMenuItem.id != this.id) ContextMenuExpandCollapse(lastMenuItem, false);
        ContextMenuExpandCollapse(this, true);
        lastMenuItem = this;
    }, false);
    STrChOContextMenu.appendChild(STrChOContextMenuSalvaging);

    var STrChOContextMenuSalvaging_Salvage = document.createElement('div');
    STrChOContextMenuSalvaging_Salvage.className = 'STrChOContextMenuSubItem STrChOContextHidden STrChOBlue STrChOContextMenuSalvaging_SubItem';
    STrChOContextMenuSalvaging_Salvage.innerHTML = 'Salvage';
    if (!isBroken) {
        if (!(inPresets && STrChOGeneralOptions.noEquippedSalvage)) {
            if (((!STrChOGeneralOptions.throneSalvageSafety) || (STrChOGeneralOptions.throneSalvageSafety && itemIndex > STrChOGeneralOptions.throneSalvageSafetyNum)) ||
            ((!STrChOGeneralOptions.champSalvageSafety) || (STrChOGeneralOptions.champSalvageSafety && itemIndex > STrChOGeneralOptions.champSalvageSafetyNum))) {
                if (!isThrone || (isThrone && !hasJewel)) {
                    STrChOContextMenuSalvaging_Salvage.addEventListener('click', function(A) {
                        A.stopPropagation();
                        if (confirm('Are you sure you want to salvage this item?')) {
                            if (isThrone) {
                                SalvageThroneItem(itemId);
                            } else {
                                SalvageChampItem(itemId);
                                if (cmContainerOpen) CM.ChampionModalController.open()
                                Tabs.champPreview.clearChampPreviewCard(itemId);
                                Tabs.champOrganizer.paintChampTables();
                            }
                        }
                        $(STrChOContextMenu).remove();
                    }, false);
                } else {
                    STrChOContextMenuSalvaging_Salvage.className += ' STrChODisabled';
                }
            } else {
                STrChOContextMenuSalvaging_Salvage.className += ' STrChODisabled';
            }
        } else {
            STrChOContextMenuSalvaging_Salvage.className += ' STrChODisabled';
        }
    } else {
        STrChOContextMenuSalvaging_Salvage.className += ' STrChODisabled';
    }
    STrChOContextMenu.appendChild(STrChOContextMenuSalvaging_Salvage);


    var STrChOContextMenuSalvaging_Forced = document.createElement('div');
    STrChOContextMenuSalvaging_Forced.className = 'STrChOContextMenuSubItem STrChOContextHidden STrChOBlue STrChOContextMenuSalvaging_SubItem';
    STrChOContextMenuSalvaging_Forced.innerHTML = 'Forced Salvage';
    if (!isBroken && isThrone && hasJewel && !STrChOGeneralOptions.noForcedSalvage) {
        if (!(inPresets && STrChOGeneralOptions.noEquippedSalvage)) {
            STrChOContextMenuSalvaging_Forced.addEventListener('click', function(A) {
                A.stopPropagation();
                if (confirm('Are you sure you want to forced salvage this item?')) Tabs.throneSalvager.forceSalvage(itemId);
                $(STrChOContextMenu).remove();
            }, false);
        } else {
            STrChOContextMenuSalvaging_Forced.className += ' STrChODisabled';
        }
    } else {
        STrChOContextMenuSalvaging_Forced.className += ' STrChODisabled';
    }
    STrChOContextMenu.appendChild(STrChOContextMenuSalvaging_Forced);


    var STrChOContextMenuSalvaging_Mass = document.createElement('div');
    STrChOContextMenuSalvaging_Mass.className = 'STrChOContextMenuSubItem STrChOContextHidden STrChOBlue STrChOContextMenuSalvaging_SubItem';
    STrChOContextMenuSalvaging_Mass.innerHTML = 'Mass Salvage';
    if (!STrChOGeneralOptions.noMassSalvage) {
        STrChOContextMenuSalvaging_Mass.addEventListener('click', function(A) {
            A.stopPropagation();
            if (isThrone)
                CM.ThroneView.renderMassSalvage();
            else
                CM.ChampionModalView.renderMassSalvage();
            $(STrChOContextMenu).remove();
        }, false);
    } else {
        STrChOContextMenuSalvaging_Mass.className += ' STrChODisabled';
    }
    STrChOContextMenu.appendChild(STrChOContextMenuSalvaging_Mass);

    var STrChOContextMenuStats = document.createElement('div');
    STrChOContextMenuStats.className = 'STrChOContextMenuItem STrChOBrown';
    STrChOContextMenuStats.innerHTML = 'STATS';
    STrChOContextMenuStats.id = 'STrChOContextMenuStats';
    STrChOContextMenuStats.addEventListener('click', function(A) {
        if (lastMenuItem == this) {
            ContextMenuExpandCollapse(this, false);
            lastMenuItem = null;
            return;
        }
        A.stopPropagation();
        if (lastMenuItem == null) lastMenuItem = this;
        if (lastMenuItem.id != this.id) ContextMenuExpandCollapse(lastMenuItem, false);
        ContextMenuExpandCollapse(this, true);
        lastMenuItem = this;
    }, false);
    STrChOContextMenu.appendChild(STrChOContextMenuStats);


    var STrChOContextMenuStats_Copy = document.createElement('div');
    STrChOContextMenuStats_Copy.className = 'STrChOContextMenuSubItem STrChOContextHidden STrChORed STrChOContextMenuStats_SubItem';
    STrChOContextMenuStats_Copy.innerHTML = 'Copy Stats';
    STrChOContextMenuStats_Copy.addEventListener('click', function(A) {
        A.stopPropagation();
        if (isThrone) {
            var displayText = getThroneItemStats(itemId, "    ");
            if (displayText != "") window.prompt("Copy to clipboard: Ctrl+C", displayText);
        } else {
            var displayText = getChampItemStats(itemId, "    ");
            if (displayText != "") window.prompt("Copy to clipboard: Ctrl+C", displayText);
        }
        $(STrChOContextMenu).remove();
    }, false);
    STrChOContextMenu.appendChild(STrChOContextMenuStats_Copy);


    var STrChOContextMenuStats_Post = document.createElement('div');
    STrChOContextMenuStats_Post.className = 'STrChOContextMenuSubItem STrChOContextHidden STrChORed STrChOContextMenuStats_SubItem';
    STrChOContextMenuStats_Post.innerHTML = 'Post Stats';
    STrChOContextMenuStats_Post.addEventListener('click', function(A) {
        A.stopPropagation();
        if (isThrone)
            sendChat(getThroneItemStats(itemId, '||'));
        else
            sendChat(getChampItemStats(itemId, '||'));
        $(STrChOContextMenu).remove();
    }, false);
    STrChOContextMenu.appendChild(STrChOContextMenuStats_Post);


    var STrChOContextMenuStats_Export = document.createElement('div');
    STrChOContextMenuStats_Export.className = 'STrChOContextMenuSubItem STrChOContextHidden STrChORed STrChOContextMenuStats_SubItem';
    STrChOContextMenuStats_Export.innerHTML = 'Export Cards';
    STrChOContextMenuStats_Export.addEventListener('click', function(A) {
        A.stopPropagation();
        if (isThrone)
            ExportThroneToExcel(false);
        else
            ExportChampToExcel(false);
        $(STrChOContextMenu).remove();
    }, false);
    STrChOContextMenu.appendChild(STrChOContextMenuStats_Export);

    var STrChOContextMenuStats_Compare = document.createElement('div');
    STrChOContextMenuStats_Compare.className = 'STrChOContextMenuSubItem STrChOContextHidden STrChORed STrChOContextMenuStats_SubItem';
    STrChOContextMenuStats_Compare.innerHTML = 'Send To Compare';
    STrChOContextMenuStats_Compare.addEventListener('click', function(A) {
        A.stopPropagation();
        if (isThrone)
            Tabs.throneCompare.sendToCompare(itemId);
        else
            Tabs.champCompare.sendToCompare(itemId);
        $(STrChOContextMenu).remove();
    }, false);
    STrChOContextMenu.appendChild(STrChOContextMenuStats_Compare);


    var STrChOContextMenuPresets = document.createElement('div');
    STrChOContextMenuPresets.className = 'STrChOContextMenuItem STrChOBrown';
    STrChOContextMenuPresets.innerHTML = 'PRESETS';
    STrChOContextMenuPresets.id = 'STrChOContextMenuPresets';
    STrChOContextMenuPresets.addEventListener('click', function(A) {
        if (lastMenuItem == this) {
            ContextMenuExpandCollapse(this, false);
            lastMenuItem = null;
            return;
        }
        A.stopPropagation();
        if (lastMenuItem == null) lastMenuItem = this;
        if (lastMenuItem.id != this.id) ContextMenuExpandCollapse(lastMenuItem, false);
        ContextMenuExpandCollapse(this, true);
        lastMenuItem = this;
    }, false);
    STrChOContextMenu.appendChild(STrChOContextMenuPresets);


    var STrChOContextMenuPresets_EquipPreset = document.createElement('div');
    STrChOContextMenuPresets_EquipPreset.className = 'STrChOContextMenuSubItem STrChOContextHidden STrChORed STrChOContextMenuPresets_SubItem';
    STrChOContextMenuPresets_EquipPreset.innerHTML = 'Equip Tag #' + presetSlot;
    if (presetTagCount != 0) {
        STrChOContextMenuPresets_EquipPreset.addEventListener('click', function(A) {
            A.stopPropagation();
            if (isThrone)
                Tabs.thronePresets.equipPresetTags(presetSlot);
            else
                Tabs.champPresets.equipPresetTags(presetSlot);
            $(STrChOContextMenu).remove();
        }, false);
    } else {
        STrChOContextMenuPresets_EquipPreset.className += ' STrChODisabled';
    }
    STrChOContextMenu.appendChild(STrChOContextMenuPresets_EquipPreset);


    var STrChOContextMenuPresets_ClearPreset = document.createElement('div');
    STrChOContextMenuPresets_ClearPreset.className = 'STrChOContextMenuSubItem STrChOContextHidden STrChORed STrChOContextMenuPresets_SubItem';
    STrChOContextMenuPresets_ClearPreset.innerHTML = 'Clear Tag #' + presetSlot;
    if (presetTagCount != 0) {
        STrChOContextMenuPresets_ClearPreset.addEventListener('click', function(A) {
            A.stopPropagation();
            if (isThrone) {
                Tabs.thronePresets.clearPresetTags(presetSlot);
                Tabs.thronePresets.paintTags();
            } else {
                Tabs.champPresets.clearPresetTags(presetSlot);
                Tabs.champPresets.paintTags();
            }
            $(STrChOContextMenu).remove();
        }, false);
    } else {
        STrChOContextMenuPresets_ClearPreset.className += ' STrChODisabled';
    }
    STrChOContextMenu.appendChild(STrChOContextMenuPresets_ClearPreset);


    var STrChOContextMenuPresets_SavePreset = document.createElement('div');
    STrChOContextMenuPresets_SavePreset.className = 'STrChOContextMenuSubItem STrChOContextHidden STrChORed STrChOContextMenuPresets_SubItem';
    STrChOContextMenuPresets_SavePreset.innerHTML = 'Save Tag #' + presetSlot;
    STrChOContextMenuPresets_SavePreset.addEventListener('click', function(A) {
        A.stopPropagation();
        if (isThrone) {
            Tabs.thronePresets.addPresetTags(presetSlot);
            Tabs.thronePresets.paintTags();
        } else {
            Tabs.champPresets.addPresetTags(presetSlot);
            Tabs.champPresets.paintTags();
        }
        $(STrChOContextMenu).remove();
    }, false);
    STrChOContextMenu.appendChild(STrChOContextMenuPresets_SavePreset);


    var STrChOContextMenuPresets_LoadToPreview = document.createElement('div');
    STrChOContextMenuPresets_LoadToPreview.className = 'STrChOContextMenuSubItem STrChOContextHidden STrChORed STrChOContextMenuPresets_SubItem';
    STrChOContextMenuPresets_LoadToPreview.innerHTML = 'Send To Preview';
    STrChOContextMenuPresets_LoadToPreview.addEventListener('click', function(A) {
        A.stopPropagation();
        if (isThrone) {
            Tabs.thronePreview.loadThronePreviewCard(itemId, throneItem.type);
            //Tabs.thronePreview.buildThronePreviewValueDisplay();
        } else {
            Tabs.champPreview.loadChampPreviewCard(itemId);
            Tabs.champPreview.buildChampPreviewValueDisplay();
        }
        $(STrChOContextMenu).remove();
    }, false);
    STrChOContextMenu.appendChild(STrChOContextMenuPresets_LoadToPreview);


    var STrChOContextMenuTagging = document.createElement('div');
    STrChOContextMenuTagging.className = 'STrChOContextMenuItem STrChOBrown';
    STrChOContextMenuTagging.innerHTML = 'TAGGING';
    STrChOContextMenuTagging.id = 'STrChOContextMenuTagging';
    STrChOContextMenuTagging.addEventListener('click', function(A) {
        if (lastMenuItem == this) {
            ContextMenuExpandCollapse(this, false);
            lastMenuItem = null;
            return;
        }
        A.stopPropagation();
        if (lastMenuItem == null) lastMenuItem = this;
        if (lastMenuItem.id != this.id) ContextMenuExpandCollapse(lastMenuItem, false);
        ContextMenuExpandCollapse(this, true);
        lastMenuItem = this;
    }, false);
    STrChOContextMenu.appendChild(STrChOContextMenuTagging);


    var STrChOContextMenuTagging_TagItem = document.createElement('div');
    STrChOContextMenuTagging_TagItem.className = 'STrChOContextMenuSubItem STrChOContextHidden STrChOGreen STrChOContextMenuTagging_SubItem';
    STrChOContextMenuTagging_TagItem.innerHTML = 'Tag Item';
    if ( (!STrChOThronePresetData.taggedItems[itemId] && isThrone) || (!STrChOChampPresetData.taggedItems[itemId] && !isThrone) ) {
        STrChOContextMenuTagging_TagItem.addEventListener('click', function(A) {
            A.stopPropagation();
            if (isThrone) {
                Tabs.thronePresets.addTagItem(itemId);
                Tabs.thronePresets.paintTags();
            } else {
                Tabs.champPresets.addTagItem(itemId);
                Tabs.champPresets.paintTags();
            }
            $(STrChOContextMenu).remove();
        }, false);
    } else {
        STrChOContextMenuTagging_TagItem.className += ' STrChODisabled';
    }
    STrChOContextMenu.appendChild(STrChOContextMenuTagging_TagItem);


    var STrChOContextMenuTagging_RemoveTag = document.createElement('div');
    STrChOContextMenuTagging_RemoveTag.className = 'STrChOContextMenuSubItem STrChOContextHidden STrChOGreen STrChOContextMenuTagging_SubItem';
    STrChOContextMenuTagging_RemoveTag.innerHTML = 'Remove Tag';
    if ( (STrChOThronePresetData.taggedItems[itemId] && isThrone) || (STrChOChampPresetData.taggedItems[itemId] && !isThrone) ) {
        STrChOContextMenuTagging_RemoveTag.addEventListener('click', function(A) {
            A.stopPropagation();
            if (isThrone) {
                Tabs.thronePresets.removeTagItem(itemId);
                Tabs.thronePresets.paintTags();
            } else {
                Tabs.champPresets.removeTagItem(itemId);
                Tabs.champPresets.paintTags();
            }
            $(STrChOContextMenu).remove();
        }, false);
    } else {
        STrChOContextMenuTagging_RemoveTag.className += ' STrChODisabled';
    }
    STrChOContextMenu.appendChild(STrChOContextMenuTagging_RemoveTag);


    var STrChOContextMenuTagging_TagItemAll = document.createElement('div');
    STrChOContextMenuTagging_TagItemAll.className = 'STrChOContextMenuSubItem STrChOContextHidden STrChOGreen STrChOContextMenuTagging_SubItem';
    STrChOContextMenuTagging_TagItemAll.innerHTML = 'Tag All';
    STrChOContextMenuTagging_TagItemAll.addEventListener('click', function(A) {
        A.stopPropagation();
        if (isThrone) {
            Tabs.thronePresets.addAllTagItems();
            Tabs.thronePresets.paintTags();
        } else {
            Tabs.champPresets.addAllTagItems();
            Tabs.champPresets.paintTags();
        }
        $(STrChOContextMenu).remove();
    }, false);
    STrChOContextMenu.appendChild(STrChOContextMenuTagging_TagItemAll);


    var STrChOContextMenuTagging_RemoveTagAll = document.createElement('div');
    STrChOContextMenuTagging_RemoveTagAll.className = 'STrChOContextMenuSubItem STrChOContextHidden STrChOGreen STrChOContextMenuTagging_SubItem';
    STrChOContextMenuTagging_RemoveTagAll.innerHTML = 'Remove All Tags';
    if ( (isThrone && getObjectCollectionCount(STrChOThronePresetData.taggedItems) > 0) ||
         (!isThrone && getObjectCollectionCount(STrChOChampPresetData.taggedItems) > 0) ) {
        STrChOContextMenuTagging_RemoveTagAll.addEventListener('click', function(A) {
            A.stopPropagation();
            if (isThrone) {
                Tabs.thronePresets.clearAllTagItems();
                Tabs.thronePresets.paintTags();
            } else {
                Tabs.champPresets.removeAllTagItems();
                Tabs.champPresets.paintTags();
            }
            $(STrChOContextMenu).remove();
        }, false);
    } else {
        STrChOContextMenuTagging_RemoveTagAll.className += ' STrChODisabled';
    }
    STrChOContextMenu.appendChild(STrChOContextMenuTagging_RemoveTagAll);

    var STrChOContextMenuCardInfo = document.createElement('div');
    STrChOContextMenuCardInfo.innerHTML = howManyMessage;

    STrChOContextMenu.appendChild(STrChOContextMenuCardInfo);

    if (fromOrganizer) tileDiv.insertBefore(STrChOContextMenu,  tileDiv.firstChild);

}

var sectionOpener = function() {
    var imgs = this.childNodes;
    if (imgs[0].src == STrChODownArrow) {
        imgs[0].src = STrChORightArrow
        imgs[2].src = STrChORightArrow
    } else {
        imgs[0].src = STrChODownArrow
        imgs[2].src = STrChODownArrow
    }
    var section = this.nextSibling;
    if (section.className != "STrChOSection") return;
    var sections = document.getElementsByClassName('STrChOSection');
    for (var sect=0;sect<sections.length;sect++) {
        if (section != sections[sect]) {
            sections[sect].style.display = "none";
            var nextImgs = sections[sect].previousSibling.childNodes;
            nextImgs[0].src = STrChORightArrow
            nextImgs[2].src = STrChORightArrow
        }
    }
    if (section.style.display == "block") {
        section.style.display = "none";
    } else {
        section.style.display = "block";
    }
};

//onClick (city{name, id, x, y}, x, y) city may be null!
function CdispCityPicker (id, span, dispName, notify, selbut){
    function CcityButHandler (t) {
        var that = t;

        function clickedCityBut (e){
            if (that.selected != null)
                that.selected.className = "STrChOCastleButton STrChOCastleButtonNot";
            that.city = Cities.cities[e.target.id.substr(that.prefixLen)];
            if (that.dispName)
                document.getElementById(that.id+'cname').innerHTML = that.city.name;
            e.target.className = "STrChOCastleButton STrChOCastleButtonSelect";
            that.selected = e.target;
            if (that.coordBoxX){
                that.coordBoxX.value = that.city.x;
                that.coordBoxY.value = that.city.y;
                var evt = document.createEvent("HTMLEvents");
                evt.initEvent('change', true, true ); // event (type,bubbling,cancelable)
                that.coordBoxX.dispatchEvent(evt);
                that.coordBoxY.dispatchEvent(evt);
                that.coordBoxX.style.backgroundColor = '#ffffff';
                that.coordBoxY.style.backgroundColor = '#ffffff';
            }
            if (that.notify != null)
                that.notify(that.city, that.city.x, that.city.y);
        }

        this.clickedCityBut = clickedCityBut;
    }

    function selectBut (idx){
        document.getElementById(this.id+'_'+idx).click();
    }

    function bindToXYboxes (eX, eY){
        function CboxHandler (t){
            var that = t;
            this.eventChange = eventChange;
            if (that.city){
                eX.value = that.city.x;
                eY.value = that.city.y;
            }
            function eventChange (){
                var xValue=that.coordBoxX.value.trim();
                var xI=/^\s*([0-9]+)[\s|,|-|.]+([0-9]+)/.exec(xValue);
                if(xI) {
                    that.coordBoxX.value=xI[1]
                    that.coordBoxY.value=xI[2]
                }
                var x = parseInt(that.coordBoxX.value, 10);
                var y = parseInt(that.coordBoxY.value, 10);
                if (isNaN(x) || x<0 || x>750){
                    that.coordBoxX.style.backgroundColor = '#ff8888';
                    return;
                }
                if (isNaN(y) || y<0 || y>750){
                    that.coordBoxY.style.backgroundColor = '#ff8888';
                    return;
                }
                that.coordBoxX.style.backgroundColor = '#ffffff';
                that.coordBoxY.style.backgroundColor = '#ffffff';
                if (that.notify != null)
                    that.notify (null, x, y);
            }
            return false;
        }
        this.coordBoxX = eX;
        this.coordBoxY = eY;
        var bh = new CboxHandler(this);
        eX.maxLength=8;
        eY.maxLength=3;
        eX.style.width='2em';
        eY.style.width='2em';
        eX.addEventListener('change', bh.eventChange, false);
        eY.addEventListener('change', bh.eventChange, false);
    }

    this.selectBut = selectBut;
    this.bindToXYboxes = bindToXYboxes;
    this.coordBoxX = null;
    this.coordBoxY = null;
    this.id = id;
    this.dispName = dispName;
    this.prefixLen = id.length+1;
    this.notify = notify;
    this.selected = null;
    this.city = null;
    var m = '';
    for (var i=0; i < Cities.cities.length; i++)
        m += '<input class="STrChOCastleButton STrChOCastleButtonNot" id="'+ id +'_'+ i +'" value="'+ (i+1) +'" type=button />';
    if (dispName)
        m += ' &nbsp; <span style="display:inline-block; width:85px; font-weight:bold;" id='+ id +'cname' +'></span>';
    span.innerHTML = m;
    var handler = new CcityButHandler(this);
    for (var i=0; i < Cities.cities.length; i++)
        document.getElementById (id+'_'+i).addEventListener('click', handler.clickedCityBut, false);
    if (selbut != null)
        this.selectBut(selbut);
};

function upgradeIt(citynum, chId, cost) {
    var t = Tabs.champPresets;
    var params = uW.Object.clone(ajfx);
    params.action = '5';
    params.cityId = citynum;
    params.eid = chId;
    params.chanceItem = 0;
    params.aetherstones = cost;
    params.gems = 0;
	new AjaxRequest(uW.g_ajaxpath + "ajax/ceEquipmentManagerAjax.php" + uW.g_ajaxsuffix, {
		method: "post",
		parameters: params,
		loading: true,
		onSuccess: function (transport) {
            try {
				var rslt = eval("(" + transport.responseText + ")");
				if (rslt.ok) {
                    t.broke_items += 1;
                    t.setBreakStatus();
                    Seed.resources["city" + citynum]["rec5"][0] = Seed.resources["city" + citynum]["rec5"][0] - parseInt(rslt.aetherstones);
					if (rslt.updateSeed) uW.update_seed(rslt.updateSeed);
				}
				if (rslt.gems > 0) {
                	alert("UNEXPECTED ERROR: 'BREAK CH' accidentally spent gems.... Refreshing to stop the feature now!");
                    ActionLog('BREAK CH accidentally spent gems!  Stopping now!');
                    RefreshCamelot();
                    return false;
                }
	        } catch (e) {
	        }
		},
		onFailure: function (rrr) {
		}
	});
    return true;
}

function repairTimeToText(total_time) {
    var secondsInMinutes = 60;
    var secondsInHours = 3600;
    var secondsInDays = 43200;

    var totalDays = 0;
    var totalHours = 0;
    var totalMinutes = 0;

    if (total_time > secondsInDays) {
        totalDays = (total_time - (total_time % secondsInDays)) / secondsInDays;
        total_time = total_time % secondsInDays;
    }
    if (total_time > secondsInHours) {
        totalHours = (total_time - (total_time % secondsInHours)) / secondsInHours;
        total_time = total_time % secondsInHours;
    }
    if (total_time > secondsInMinutes) {
        totalMinutes = (total_time - (total_time % secondsInMinutes)) / secondsInMinutes;
        total_time = total_time % secondsInMinutes;
    }
    var totalSeconds = total_time;

    return (totalDays + " Days " + totalHours + " Hours " + totalMinutes + " Minutes " + totalSeconds + " Seconds");
};

function ExportChampPresetToExcel(presetNumber) {
    var headers = [ "ID", "NAME", "FACTION", "QUALITY", "TYPE", "LEVEL", "MIGHT", "ROW 1", "ROW 2", "ROW 3", "ROW 4", "ROW 5"];
    var ExcelTable = document.createElement('table');
    var ExcelBody = document.createElement('tbody');
    var ExcelRow = document.createElement('tr');
    var ExcelColumn = "";
    for (i = 0; i < headers.length; i++) {
        ExcelColumn = document.createElement('th');
        ExcelColumn.appendChild(document.createTextNode(headers[i]));
        ExcelRow.appendChild(ExcelColumn);
    }
    ExcelBody.appendChild(ExcelRow);

    var columns = [];

    var preset = getChampPresetObject(parseInt(presetNumber));

    for (chId in preset) {
        var champ_item = uW.kocChampionItems[chId];
        if (!champ_item) continue;
        columns = [];
        columns.push(chId);
        columns.push(champ_item.name);
        columns.push(CM.CHAMPION.getFactionClasses(champ_item.faction));
        if (champ_item.unique) {
            columns.push("unique");
        } else {
            columns.push(CM.CHAMPION.getRarityClasses(champ_item.rarity));
        }
        columns.push(CM.CHAMPION.getEquipmentNames(champ_item.type));
        columns.push(champ_item.level);
        columns.push(champ_item.might);
        for (var slotNumber = 1; slotNumber < STrChOMaxChampQuality + 1; slotNumber++) {
            var effectLine = champ_item.effects[slotNumber];
            var effect = CM.ChampionManager.getEffect(effectLine, champ_item.level);
            columns.push(effect.amount + " " + effect.name);
        }
        columns.reverse();
        ExcelRow = document.createElement('tr');
        while (columns.length > 0) {
            ExcelColumn = document.createElement('td');
            ExcelColumn.appendChild(document.createTextNode(columns.pop()));
            ExcelRow.appendChild(ExcelColumn);
        }
        ExcelBody.appendChild(ExcelRow);
    }
    ExcelTable.appendChild(ExcelBody);

    window.open('data:application/vnd.ms-excel,' + encodeURIComponent(ExcelTable.outerHTML));
}

function ExportChampToExcel(preview) {
    var headers = [ "ID", "NAME", "FACTION", "QUALITY", "TYPE", "LEVEL", "MIGHT", "ROW 1", "ROW 2", "ROW 3", "ROW 4", "ROW 5"];
    var ExcelTable = document.createElement('table');
    var ExcelBody = document.createElement('tbody');
    var ExcelRow = document.createElement('tr');
    var ExcelColumn = "";
    for (i = 0; i < headers.length; i++) {
        ExcelColumn = document.createElement('th');
        ExcelColumn.appendChild(document.createTextNode(headers[i]));
        ExcelRow.appendChild(ExcelColumn);
    }
    ExcelBody.appendChild(ExcelRow);

    var columns = [];

    for (chId in uW.kocChampionItems) {
        if (preview && STrChOChampPresetData.previewChamp.indexOf(chId) == -1 ) continue;
        var champ_item = uW.kocChampionItems[chId];
        if (!champ_item) continue;
        columns = [];
        columns.push(chId);
        columns.push(champ_item.name);
        columns.push(CM.CHAMPION.getFactionClasses(champ_item.faction));
        if (champ_item.unique) {
            columns.push("unique");
        } else {
            columns.push(CM.CHAMPION.getRarityClasses(champ_item.rarity));
        }
        columns.push(CM.CHAMPION.getEquipmentNames(champ_item.type));
        columns.push(champ_item.level);
        columns.push(champ_item.might);
        for (var slotNumber = 1; slotNumber < STrChOMaxChampQuality + 1; slotNumber++) {
            var effectLine = champ_item.effects[slotNumber];
            var effect = CM.ChampionManager.getEffect(effectLine, champ_item.level);
            columns.push(effect.amount + " " + effect.name);
        }
        columns.reverse();
        ExcelRow = document.createElement('tr');
        while (columns.length > 0) {
            ExcelColumn = document.createElement('td');
            ExcelColumn.appendChild(document.createTextNode(columns.pop()));
            ExcelRow.appendChild(ExcelColumn);
        }
        ExcelBody.appendChild(ExcelRow);
    }
    ExcelTable.appendChild(ExcelBody);

    window.open('data:application/vnd.ms-excel,' + encodeURIComponent(ExcelTable.outerHTML));
};

function ExportThronePresetToExcel(presetNumber) {
    var headers = [ "ID", "NAME", "FACTION", "QUALITY", "TYPE", "LEVEL", "MIGHT", "JEWEL", "ROW 1", "ROW 2", "ROW 3", "ROW 4", "ROW 5", "ROW 6"];
    var ExcelTable = document.createElement('table');
    var ExcelBody = document.createElement('tbody');
    var ExcelRow = document.createElement('tr');
    var ExcelColumn = "";
    for (i = 0; i < headers.length; i++) {
        ExcelColumn = document.createElement('th');
        ExcelColumn.appendChild(document.createTextNode(headers[i]));
        ExcelRow.appendChild(ExcelColumn);
    }
    ExcelBody.appendChild(ExcelRow);

    var columns = [];

    var preset = getThronePresetObject(parseInt(presetNumber));

    for (trId in preset) {
        var throne_item = uW.kocThroneItems[trId];
        if (!throne_item) continue;
        columns = [];
        columns.push(trId);
        columns.push(throne_item.name);
        columns.push(throne_item.faction);
        columns.push(throne_item.quality);
        columns.push(throne_item.type);
        columns.push(throne_item.level);
        columns.push(CM.ThroneView.getMightBonus(throne_item));
        if (throne_item.jewel.valid) {
            var jewel_item = throne_item.jewel;
            var qlty = CM.thronestats.jewelGrowthLimit[jewel_item.quality];
            var amt = CM.ThroneController.getEffectAmount(jewel_item, qlty);
            var jewelName = CM.ThroneController.jewelName(jewel_item);
            if (amt == 0) jewelName = "none";
            columns.push(jewelName);
        } else {
            columns.push("none");
        }
        for (var O in throne_item["effects"]) {
            var slotNumber = +(O.split("slot")[1]);
            var id = throne_item["effects"]["slot" + slotNumber]["id"];
            var tier = parseInt(throne_item["effects"]["slot" + slotNumber]["tier"]);
            var level = throne_item.level;
            p = CM.thronestats.tiers[id][tier];
            var effectName = CM.thronestats["effects"][id]["1"];
            while (!p && (tier > 0)) { tier--; p = CM.thronestats.tiers[id][tier]; }
            if (!p) continue; // can't find stats for tier

            if (slotNumber == 6) {
                JewelQuality = throne_item["effects"]["slot" + slotNumber].quality;
                GrowthLimit = CM.thronestats.jewelGrowthLimit[JewelQuality];
                if (GrowthLimit <= level) level = GrowthLimit
            }
            var Current = p.base + ((level * level + level) * p.growth * 0.5);
            columns.push(Current + "% " + effectName);
        }

        columns.reverse();
        ExcelRow = document.createElement('tr');
        while (columns.length > 0) {
            ExcelColumn = document.createElement('td');
            ExcelColumn.appendChild(document.createTextNode(columns.pop()));
            ExcelRow.appendChild(ExcelColumn);
        }
        ExcelBody.appendChild(ExcelRow);
    }
    ExcelTable.appendChild(ExcelBody);

    window.open('data:application/vnd.ms-excel,' + encodeURIComponent(ExcelTable.outerHTML));
};

function getThroneMight() {
    var totMight = 0;
    for (trId in uW.kocThroneItems) {
        var throne_item = uW.kocThroneItems[trId];
        if (throne_item == null || !throne_item) continue;
        totMight += CM.ThroneView.getMightBonus(throne_item);
    }
    return addCommas(totMight);
};

function postThroneSlot( slot ) {
    var throneStats = GenerateThronePresetEffectsString(Seed.throne.slotEquip[slot], false);
    var D = [];
    D.push("Throne Room Slot #" + slot);
    if (STrChOThronePresetData.showThroneName) D.push("(" + STrChOThronePresetData.presetNames[slot] + ")");
    if (STrChOThronePresetData.showThroneMight) D.push("TR Might: " + getThroneMight());
    D.push(throneStats);

    sendChat(":::. |" + D.join("||"));
};

function postThronePreset( presetIndex ) {
    var trP = getThronePresetObject(parseInt(presetIndex));
    var D = [];
    for (var p in trP) D.push(p);
    var throneStats = GenerateThronePresetEffectsString(D, false);
    D = [];
    D.push("Throne Room Tag #" + presetIndex);
    if (STrChOThronePresetData.showThroneName) D.push("(" + STrChOThronePresetData.presetNames[presetIndex] + ")");
    if (STrChOThronePresetData.showThroneMight) D.push("TR Might: " + getThroneMight());
    D.push(throneStats);

    sendChat(":::. |" + D.join("||"));
};

function GenerateThronePresetEffectsString(presetObject, htmlEffects ) {

    var J = new Array();

    var Effects = [];
    for (var effect in CM.thronestats.effects) Effects[effect] = 0;
    var counter = presetObject.length;
    var items = [];

    for (i = 0; i < counter; i++) items.push(presetObject[i]);

    while (items.length > 0) {
        var throne_item = uW.kocThroneItems[items.pop()];
        if (throne_item == null || !throne_item) continue;
        for (var O in throne_item["effects"]) {
            var slotNumber = +(O.split("slot")[1]);
            var id = throne_item["effects"]["slot" + slotNumber]["id"];
            var tier = parseInt(throne_item["effects"]["slot" + slotNumber]["tier"]);
            var level = throne_item.level;
            p = CM.thronestats.tiers[id][tier];
            while (!p && (tier > 0)) { tier--; p = CM.thronestats.tiers[id][tier]; }
            if (!p) continue; // can't find stats for tier

            if (slotNumber == 6) {
                JewelQuality = throne_item["effects"]["slot" + slotNumber].quality;
                GrowthLimit = CM.thronestats.jewelGrowthLimit[JewelQuality];
                if (GrowthLimit <= level) level = GrowthLimit
            }
            var Current = p.base + ((level * level + level) * p.growth * 0.5);
            if (slotNumber <= parseInt(throne_item.quality)) Effects[id] += Current;
        }
    }

    for (effect in Effects) {
        if (Effects[effect] && (Effects[effect] != 0) && CM.thronestats["effects"][effect]) {
            var effectName = CM.thronestats["effects"][effect]["1"];
            if (htmlEffects == true) {
                J.push("<div>" + (Math.round(Effects[effect] * 100) / 100) + '% ' + effectName + "</div>");
            } else {
                J.push((Math.round(Effects[effect] * 100) / 100) + '% ' + effectName);
            }
        }
    }
    if (htmlEffects == true) {
        return J.join("");
    } else {
        return J.join("||");
    }
};

function getObjectCollectionCount( objColl ) {
    var c = 0;
    for (var k in objColl) {
        c++;
    }
    return c;
};


function getChampPresetTagCount(presetIndex) {
    switch(presetIndex) {
        case 1:
            return getObjectCollectionCount(STrChOChampPresetData.taggedItems01);
            break;
        case 2:
            return getObjectCollectionCount(STrChOChampPresetData.taggedItems02);
            break;
        case 3:
            return getObjectCollectionCount(STrChOChampPresetData.taggedItems03);
            break;
        case 4:
            return getObjectCollectionCount(STrChOChampPresetData.taggedItems04);
            break;
    }
    return 0;
};

function getThronePresetTagCount(presetIndex) {
    switch(presetIndex) {
        case 1:
            return getObjectCollectionCount(STrChOThronePresetData.taggedItems01);
            break;
        case 2:
            return getObjectCollectionCount(STrChOThronePresetData.taggedItems02);
            break;
        case 3:
            return getObjectCollectionCount(STrChOThronePresetData.taggedItems03);
            break;
        case 4:
            return getObjectCollectionCount(STrChOThronePresetData.taggedItems04);
            break;
        case 5:
            return getObjectCollectionCount(STrChOThronePresetData.taggedItems05);
            break;
        case 6:
            return getObjectCollectionCount(STrChOThronePresetData.taggedItems06);
            break;
        case 7:
            return getObjectCollectionCount(STrChOThronePresetData.taggedItems07);
            break;
        case 8:
            return getObjectCollectionCount(STrChOThronePresetData.taggedItems08);
            break;
        case 9:
            return getObjectCollectionCount(STrChOThronePresetData.taggedItems09);
            break;
        case 10:
            return getObjectCollectionCount(STrChOThronePresetData.taggedItems10);
            break;
        case 11:
            return getObjectCollectionCount(STrChOThronePresetData.taggedItems11);
            break;
        case 12:
            return getObjectCollectionCount(STrChOThronePresetData.taggedItems12);
            break;
        case 13:
            return getObjectCollectionCount(STrChOThronePresetData.taggedItems13);
            break;
        case 14:
            return getObjectCollectionCount(STrChOThronePresetData.taggedItems14);
            break;
        case 15:
            return getObjectCollectionCount(STrChOThronePresetData.taggedItems15);
            break;
        case 16:
            return getObjectCollectionCount(STrChOThronePresetData.taggedItems16);
            break;
        case 17:
            return getObjectCollectionCount(STrChOThronePresetData.taggedItems17);
            break;
        case 18:
            return getObjectCollectionCount(STrChOThronePresetData.taggedItems18);
            break;
        case 19:
            return getObjectCollectionCount(STrChOThronePresetData.taggedItems19);
            break;
        case 20:
            return getObjectCollectionCount(STrChOThronePresetData.taggedItems20);
            break;
        case 21:
            return getObjectCollectionCount(STrChOThronePresetData.taggedItems21);
            break;
        case 22:
            return getObjectCollectionCount(STrChOThronePresetData.taggedItems22);
            break;
        case 23:
            return getObjectCollectionCount(STrChOThronePresetData.taggedItems23);
            break;
        case 24:
            return getObjectCollectionCount(STrChOThronePresetData.taggedItems24);
            break;
    };
    return 0;
};

function getThronePresetObject(presetIndex) {
    switch(presetIndex) {
        case 1:
            return STrChOThronePresetData.taggedItems01;
            break;
        case 2:
            return STrChOThronePresetData.taggedItems02;
            break;
        case 3:
            return STrChOThronePresetData.taggedItems03;
            break;
        case 4:
            return STrChOThronePresetData.taggedItems04;
            break;
        case 5:
            return STrChOThronePresetData.taggedItems05;
            break;
        case 6:
            return STrChOThronePresetData.taggedItems06;
            break;
        case 7:
            return STrChOThronePresetData.taggedItems07;
            break;
        case 8:
            return STrChOThronePresetData.taggedItems08;
            break;
        case 9:
            return STrChOThronePresetData.taggedItems09;
            break;
        case 10:
            return STrChOThronePresetData.taggedItems10;
            break;
        case 11:
            return STrChOThronePresetData.taggedItems11;
            break;
        case 12:
            return STrChOThronePresetData.taggedItems12;
            break;
        case 13:
            return STrChOThronePresetData.taggedItems13;
            break;
        case 14:
            return STrChOThronePresetData.taggedItems14;
            break;
        case 15:
            return STrChOThronePresetData.taggedItems15;
            break;
        case 16:
            return STrChOThronePresetData.taggedItems16;
            break;
        case 17:
            return STrChOThronePresetData.taggedItems17;
            break;
        case 18:
            return STrChOThronePresetData.taggedItems18;
            break;
        case 19:
            return STrChOThronePresetData.taggedItems19;
            break;
        case 20:
            return STrChOThronePresetData.taggedItems20;
            break;
        case 21:
            return STrChOThronePresetData.taggedItems21;
            break;
        case 22:
            return STrChOThronePresetData.taggedItems22;
            break;
        case 23:
            return STrChOThronePresetData.taggedItems23;
            break;
        case 24:
            return STrChOThronePresetData.taggedItems24;
            break;
    };
    return null;
};

function getChampPresetObject(presetIndex) {
    switch(presetIndex) {
        case 1:
            return STrChOChampPresetData.taggedItems01;
            break;
        case 2:
            return STrChOChampPresetData.taggedItems02;
            break;
        case 3:
            return STrChOChampPresetData.taggedItems03;
            break;
        case 4:
            return STrChOChampPresetData.taggedItems04;
            break;
    };
    return null;
};

function logit (msg) {
    var now = new Date();
    GM_log (getServerId() +' @ '+ now.toTimeString().substring (0,8) +'.' + now.getMilliseconds() +': '+  msg);
};

function addCommas(nStr){
    nStr += '';
    var x = nStr.split('.');
    var x1 = x[0];
    var x2 = x.length > 1 ? '.' + x[1] : '';
    var rgx = /(\d+)(\d{3})/;
    while (rgx.test(x1)) {
        x1 = x1.replace(rgx, '$1' + ',' + '$2');
    }
    return x1 + x2;
};

function setCities(){
    Cities.numCities = Seed.cities.length;
    Cities.cities = [];
    Cities.byID = {};
    for (i=0; i<Cities.numCities; i++){
        city = {};
        city.idx = i;
        city.id = parseInt(Seed.cities[i][0]);
        city.name = Seed.cities[i][1];
        city.x = parseInt(Seed.cities[i][2]);
        city.y = parseInt(Seed.cities[i][3]);
        city.tileId = parseInt(Seed.cities[i][5]);
        city.provId = parseInt(Seed.cities[i][4]);
        Cities.cities[i] = city;
        Cities.byID[Seed.cities[i][0]] = city;
    }
};

function isAnyChampBroke() {
    for (champId in uW.kocChampionItems) {
        var champItem = uW.kocChampionItems[champId];
        if (champItem == null || !champItem) return false;
        if (champItem.status == CM.CHAMPION.STATUS_BROKEN_UPGRADE || champItem.status == CM.CHAMPION.STATUS_BROKEN_ENHANCE) return true;
    }
    return false;
}

function isAnyThroneBroke() {
    for (trId in uW.kocThroneItems) {
        var throne_item = uW.kocThroneItems[trId];
        if (throne_item == null || !throne_item) return false;
        if (throne_item.isBroken) return true;
    }
    return false;
};

function getChampItemStats(chId, separater) {

    separater = separater || "    ";

    var champ_item = uW.kocChampionItems[chId];

    var D = [];

    D.push(champ_item.name);

    D.push("Faction: " + CM.CHAMPION.getFactionClasses(champ_item.faction));
    var quality = (champ_item.unique > 0) ? "Unique" : CM.CHAMPION.getRarityClasses(champ_item.rarity);
    D.push("Quality: " + quality);
    D.push("Type: " + uW.g_js_strings.champ[CM.CHAMPION.getEquipmentNames(champ_item.type)]);
    D.push("Level: " + champ_item.level);
    D.push("Might: " + champ_item.might);

    for (var slotNumber = 1; slotNumber < STrChOMaxChampQuality + 1; slotNumber++) {
        var effectLine = champ_item.effects[slotNumber];
        var effect = CM.ChampionManager.getEffect(effectLine, champ_item.level);
        D.push("Row " + slotNumber + ": " + effect.amount + " " + effect.name);
    }

    var cText = D.join(separater);

    if (separater == "||") cText = ":::. |" + cText;

    return cText;
}

function getThroneItemStats(trId, separater) {

    separater = separater || "    ";

    var throne_item = uW.kocThroneItems[trId];

    if (throne_item == null || !throne_item) return "";

    var D = [];

    D.push(throne_item.name);
    D.push("Faction: " + throne_item.faction);
    D.push("Quality: " + throne_item.createPrefix());
    D.push("Type: " + throne_item.type);
    D.push("Level: " + throne_item.level);
    D.push("Might: " + CM.ThroneView.getMightBonus(throne_item));
    for (slot in throne_item.effects) {
        try {
            var N = throne_item.effects[slot];
            effect = CM.thronestats.effects[N.id];

            tier = CM.thronestats.tiers[N.id][N.tier];
            if (!tier) tier = CM.thronestats.tiers[N.id][N.tier - 1];

            var base = tier.base || 0;
            var level = throne_item.level || 0;
            var growth = tier.growth || 0;

            if (slot == 'slot6') {  //if it has a slot 6, it automatically has a jewel
                JewelQuality = throne_item["effects"]['slot6'].quality;
                GrowthLimit = CM.thronestats.jewelGrowthLimit[JewelQuality];
                if (GrowthLimit <= level) level = GrowthLimit
            }

            percent = +(base + ((level * level + level) * growth * 0.5));

            var wholeNumber = false;
            if (Math.round(parseFloat(percent)) == parseFloat(percent)) wholeNumber = true;

            percent = (percent > 0) ? "+" + percent : +percent;

            if (wholeNumber)
                percent = parseFloat(percent)           .toFixed(0);
            else
                percent = parseFloat(percent).toFixed(2);

            css = (slot % 2 === 0) ? "even" : "odd";
            B = +(slot.split("slot")[1]);

            effect[1] = effect[1];

            D.push("Row " + B + ": " + percent + "% " + effect[1]);
        }
        catch (e) { }

    }
    var cText = D.join(separater);
    if (separater == "||") cText = ":::. |" + cText;

    return cText;
}

function displayCityAstone() {
    var city = pickAetherUseCity();
    var m = '';
    if (city == -1) {
        m = '<div>No Aetherstone Available</div>';
    } else {
        var aether = parseInt(Seed.resources["city" + Seed.cities[city][0]]["rec5"][0]);
        m = '<div>AETHER: City #' + (city + 1) + ' = ' + addCommas(aether) + '</div>';
    }
    return m;
};

function pickAetherUseCity() {
    if (parseInt(Seed.resources["city" + Seed.cities[STrChOGeneralOptions.usedCityNum][0]]["rec5"][0]) >= STrChOGeneralOptions.minStones) return STrChOGeneralOptions.usedCityNum;
    if (STrChOGeneralOptions.usedAnyCity) {
        for (i = 0; i < Seed.cities.length; i++) {
            if (parseInt(Seed.resources["city" + Seed.cities[i][0]]["rec5"][0]) >= STrChOGeneralOptions.minStones) return i;
        }
    }
    return -1;
};

function getThroneBrokeMight() {
    var totMight = 0;
    for (trId in uW.kocThroneItems) {
        var throne_item = uW.kocThroneItems[trId];
        if (throne_item == null || !throne_item) continue;
        if (throne_item.isBroken) totMight += CM.ThroneView.getMightBonus(throne_item);
    }
    return "<b>You have " + addCommas(totMight) + " in broken throne might</b>";
};

function contentEval(source) {
    // Check for function input.
    if ('function' == typeof source) {
        // Execute this function with no arguments, by adding parentheses.
        // One set around the function, required for valid syntax, and a
        // second empty set calls the surrounded function.
        source = '(' + source + ')();'
    }

    // Create a script node holding this  source code.
    var script = document.createElement('script');
    script.setAttribute("type", "application/javascript");
    script.textContent = source;

    // Insert the script node into the page, so it will run, and immediately
    // remove it to clean up.
    document.body.appendChild(script);
    document.body.removeChild(script);
};

function addWatchFunctions() {
//  object.watch
    if (!Object.prototype.multiWatch) {
        Object.defineProperty(Object.prototype, "multiWatch", {
            enumerable: false,
            configurable: true,
            writable: false,
            value: function (prop, watcher) {
                var obj = this,
                oldval = this[prop],
                newval = oldval,
                getter = function () {
                    return newval;
                },
                setter = function (val) {

                    oldval = newval;

                    for (var f=0; f < obj.watchers[prop].length; f++) {
                        obj.watchers[prop][f](prop, oldval, val);
                    }
                    newval = val;
                    return newval;
                };

                if (delete obj[prop]) { // can't watch constants
                    Object.defineProperty(this, prop, {
                        get: getter,
                        set: setter,
                        enumerable: true,
                        configurable: true
                    });

                    if (!obj.watchers) obj.watchers = {};

                    if (!obj.watchers[prop]) obj.watchers[prop] = [];

                    // check for duplicates
                    for (var i=0; i < obj.watchers[prop].length; i++){
                        if(obj.watchers[prop][i] === watcher){
                            return;
                        }
                    }

                    //obj.watchers[prop].push( eval(watcher)); //add the new watcher in the watchers array
                    obj.watchers[prop].push(watcher);
                }

            }
        });
    }

//  object.unwatch
    if (!Object.prototype.multiUnwatch) {
        Object.defineProperty(Object.prototype, "multiUnwatch", {
            enumerable: false,
            configurable: true,
            writable: false,
            value: function (prop, watcher) {
                var obj = this;

                // if a watcher is supplied, just remove it
                if(arguments.length == 2) {
                    for(var i=0; i < obj.watchers[prop].length; i++){
                        var w = obj.watchers[prop][i];

                        if(w == watcher) {
                            obj.watchers[prop].splice(i, 1);
                        }
                    }
                } else {
                    obj.watchers[prop] = [];
                }

                if (obj.watchers[prop].length == 0 )
                {
                    delete obj.watchers[prop];
                    var val = this[prop];
                    delete this[prop]; // remove accessors
                    this[prop] = val;
                }
            }
        });
    }
}


function matTypeof (v){
    if (typeof (v) == 'object') {
        if (!v)
            return 'null';
        else if (v.constructor.toString().indexOf("Array")>=0 && typeof(v.splice)=='function')
            return 'array';
        else return 'object';
    }
    return typeof (v);
};

function inspect(obj, maxLevels, level, doFunctions){
    var str = '', type, msg;
    if(level == null) level = 0;
    if(maxLevels == null) maxLevels = 1;
    if(maxLevels < 1) return 'Inspect Error: Levels number must be > 0';
    if(obj == null) return 'ERROR: Object is NULL\n';
    var indent = '';
    for (var i=0; i<level; i++) indent += '  ';
    for(property in obj) {
        try {
            type =  matTypeof(obj[property]);
            if (doFunctions==true && (type == 'function')) {
                str += indent + '(' + type + ') ' + property + "[FUNCTION]\n";
            } else if (type != 'function') {
                str += indent + '(' + type + ') ' + property + ( (obj[property]==null)?(': null'):('')) +' = '+ obj[property] +"\n";
            }
            if((type=='object' || type=='array') && (obj[property] != null) && (level+1 < maxLevels))
                str += inspect(obj[property], maxLevels, level+1, doFunctions);  // recurse
        } catch(err) {
            // Is there some properties in obj we can't access? Print it red.
            if(typeof(err) == 'string') msg = err;
            else if(err.message)        msg = err.message;
            else if(err.description)    msg = err.description;
            else                        msg = 'Unknown';
            str += '(Error) ' + property + ': ' + msg +"\n";
        }
    }
    str += "\n";
    return str;
};

function setUpgradeColor() {
//TODO
    if (STrChOThroneUpgradeData.newUpgradeState == 0)
        $("#STrChOTab>span").css('color', '#FFFF66');
    else if (STrChOThroneUpgradeData.newUpgradeState == 1)
        $("#STrChOTab>span").css('color', 'cyan');
    else if (STrChOThroneUpgradeData.newUpgradeState == 2)
        $("#STrChOTab>span").css('color', 'red');
};

function sendChat (msg){  //Simple method, as if it were typed in thru DOM
    document.getElementById('mod_comm_input').value = msg;
    uW.Chat.sendChat ();
};

function sendComposedMail (sendTo, subject, msg) {
    var params = uW.Object.clone(ajfx);
    params.emailTo = sendTo;
    params.subject = subject;
    params.message = msg;
    params.requestType = "COMPOSED_MAIL";
    new AjaxRequest(uW.g_ajaxpath + "ajax/getEmail.php" + uW.g_ajaxsuffix, {
        method:"post",
        parameters:params,
        onSuccess:function(message){
        },
        onFailure:function(){
        }
    })
};

function unixTime () {
    return parseInt (new Date().getTime() / 1000) + uW.g_timeoff;
};

function parseIntNan (n){
	x = parseInt(n, 10);
	if (isNaN(x))
		return 0;
	return x;
};

function implodeUrlArgs (obj){
    var a = [];
    for (var k in obj) a.push (k +'='+ encodeURI(obj[k]) );
    return a.join ('&');
};

function addUrlArgs (url, args){
    if (!args) return url;
    if (url.indexOf('?') < 0)
        url += '?';
    else if (url.substr(url.length-1) != '&')
        url += '&';
    if (matTypeof(args == 'object')) return url + implodeUrlArgs (args);
    return url + args;
};

var myServerId = null;  //example: https://www150.kingdomsofcamelot.com
function getServerId() {
    if (myServerId == null){
        var m=/^[a-zA-Z]+([0-9]+)\./.exec(document.location.hostname);
        if (m)
            myServerId = m[1];
        else
            myServerId = '??';
    }
    return myServerId;
};

var withAnim = null;
if (CM && CM.ThronePanelView) withAnim = CM.ThronePanelView.statusAnim;

function noAnim(result) {
    if (result == "success") {
        var isChamp = true;
        var champUpgEnhContainer = document.getElementById('champUpgEnhContainer');
        if (!champUpgEnhContainer || champUpgEnhContainer == null) isChamp = false;
        var msg = "Manual";
        if (isChamp) {
            var attempt_type = document.getElementById('upgEnhButton');
            msg += ' ' + attempt_type.innerHTML.replace('--', '').trim() + ' successful.  Item:';
            var upgEnhTitle = document.getElementById('upgEnhTitle');
            msg += ' ' + upgEnhTitle.innerHTML;
        } else {
            var thronePanelItemRequirementsContainer = document.getElementById('thronePanelItemRequirementsContainer');
            attempt_type = thronePanelItemRequirementsContainer.getElementsByClassName('gemButtonv2')[0];
            msg += ' ' + attempt_type.innerHTML + ' successful.  Item:';
            var thronePanelName = document.getElementById('thronePanelName');
            msg += ' ' + thronePanelName.innerHTML;
        }

        SuccessLog(msg);

        //if (!OrganizerDisableSuccessCheck) {
            if (withAnim) withAnim(result);
        //} else {
        //    unsafeWindow.cm.ThroneView.renderInventory(unsafeWindow.kocThroneItems);
        //}
    }
    //$("div.thronePanelItemContainer").append("<div>" + result + "</div>");
}

function autoSelectForged() {
    var ChampID = 0;
    ChampID = Tabs.champOrganizer.panelId;

    var champItem = uW.kocChampionItems[ChampID];
    var nextForgedID = getNextAvailableForged(champItem);
    if (nextForgedID != 0) {
        var selected_index = 0;

        $(document.querySelector("#upgEnhBuffSelect")).children("option").each(function () {
            if ( $(this).text() == uW.ksoItems[nextForgedID].name ) {
                selected_index = $(this).val();
                return false;
            }
        });
        $('#upgEnhBuffSelect').val(selected_index).change();
        CM.ChampionModalView.renderCosts();
        CM.ChampionUpgEnhManager.calcCosts();
        if (selected_index > 0) {
            var upgEnhCostNum = document.getElementsByClassName('upgEnhCostNum')[1];
            $(upgEnhCostNum).text(uW.ksoItems[nextForgedID].count + "/1");
            $(upgEnhCostNum).css('opacity', 1);
            var upgEnhCostIconItem = document.getElementById('upgEnhCostIconItem');
            upgEnhCostIconItem.className = 'upgEnhCostIcon i' + nextForgedID;
        }

    }
// not needed as champ have a built in safety already, unlike throne
//    if (STrChOGeneralOptions.safetyOn) {
//        setTimeout(function() {
//            safetyCheck();
//        }, 2000);
//    }
}


//var champSafetyCheck = function () {
//    var sel = document.getElementById('upgEnhCostSelect');
//    $(sel).remove(1);
//    if (champCheckAstoneLevel()) {
//        $(document.getElementById('upgEnhButton')).click(function() {
//            champCheckAstoneLevel();
//            champSafetyCheck();
//        });
//    }
//}

//var champCheckAstoneLevel = function () {
//    var stones = parseInt(Seed.resources["city" + unsafeWindow.currentcityid]["rec5"][0]);
//    if (stones < STrChOGeneralOptions.safetyLimit || isNaN(stones) ) {
//        champDisableUpgradeButton();
//        return false;
//    } else {
//        return true;
//    }
//}

//var champDisableUpgradeButton = function() {
//    var container = document.querySelector('#upgEnhBody');
//    $(container).chilren('div.gemButtonv2').remove();
//    var an = $('<a/>');
//    an.addClass('gemButtonv2 gray');
//    an.html('Low A-Stone');
//    $(container).append(an);
//}


function autoSelectMasters() {
    var ThroneID = 0;
    ThroneID = Tabs.throneOrganizer.panelId;

    var throneItem = uW.kocThroneItems[ThroneID];
    var nextMastersID = 0;
    nextMastersID = getNextAvailableMasters(throneItem);
    if (nextMastersID == 0) {
        unselectToken();
    } else {
        var selected_index = 0;
        $(document.querySelector("#buffDropDown")).children("option").each(function () {
            if ( $(this).text() == uW.ksoItems[nextMastersID].name ) {
                selected_index = $(this).val();
                return false;
            }
        });
        $('#buffDropDown').val(selected_index).change();
        if (selected_index > 0) {
            var thronePanelBuffPrice = document.getElementById('thronePanelBuffPrice');
            thronePanelBuffPrice.innerHTML = '<span class="items">' + uW.ksoItems[nextMastersID].count + '/1</span>';
            var thronePanelBuffIcon = document.getElementById('thronePanelBuffIcon');
            thronePanelBuffIcon.className = 'icon mastersToken i' + nextMastersID;
            thronePanelBuffIcon.style.backgroundImage = "url('"+gameurl+"img/items/70/masters_token_bg.png')";
            thronePanelBuffIcon.innerHTML = '<div class="mastersTokenLevel">' + STrChOTokenText[nextMastersID] + '</div>';
        }
    }
    if (STrChOGeneralOptions.safetyOn) {
        setTimeout(function() {
            throneSafetyCheck();
        }, 2000);
    }
}

var throneSafetyCheck = function () {
//    var sel = document.getElementById("costDropDown"); // remove the gem option
//    $(sel).remove(1);
    if (throneCheckAstoneLevel()) { // see if we have enough a-stone
        $(document.querySelector("#thronePanelItemRequirementsContainer")).children("a.gemButtonv2").click(function () { // every time the button is pushed, check the levels
            throneCheckAstoneLevel();
            throneSafetyCheck();
        });
    }
}

var throneCheckAstoneLevel = function () {
    // check limit
    var stones = parseInt(Seed.resources["city" + uW.currentcityid]["rec5"][0]);
    if (stones < STrChOGeneralOptions.safetyLimit || isNaN(stones) ) {
        throneDisableUpgradeButton();
        return false;
    } else {
        return true;
    }
}

var throneDisableUpgradeButton = function () {
    // change the appearance
    var container = document.querySelector('#thronePanelItemRequirementsContainer');
    $(container).children("a.gemButtonv2").remove();
	var an = $("<a/>");
    an.addClass("gemButtonv2 gray");
    an.html("Low A-Stone");
    $(container).append(an);
}

function getMastersText(ksoID) {
    switch(ksoID) {
        case 20060:
            return "LII"; //52T
        case 20059:
            return "LI";
        case 20058:
            return "L";
        case 20057:
            return "XLIX";
        case 20056:
            return "XLVIII";
        case 20055:
            return "XLVII";
        case 20054:
            return "XLVI"; //46T
        case 20053:
            return "XLV";
        case 20052:
            return "XLIV";
        case 20051:
            return "XLIII";
        case 20050:
            return "XLII";
        case 20049:
            return "XLI";
        case 20048:
            return "XL";
        case 20047:
            return "XXXIX";
        case 20046:
            return "XXXVIII";
        case 20045:
            return "XXXVII";
        case 20044:
            return "XXXVI";
        case 20043:
            return "XXXV";
        case 20042:
            return "XXXIV";
        case 20041:
            return "XXXIII";
        case 20040:
            return "XXXII"; //32t
		case 20039:
            return "XXXI";
        case 20038:
            return "XXX";
        case 20037:
            return "XXIX";
        case 20036:
            return "XXVIII";
        case 20035:
            return "XXVII";
        case 20034:
            return "XXVI";
        case 20033:
            return "XXV";
        case 20032:
            return "XXIV";
        case 20031:
            return "XXIII";
        case 20030:
            return "XXII";
        case 20029:
            return "XXI";
        case 20028:
            return "XX";
        case 20027:
            return "XIX";
        case 20026:
            return "XVIII";
        case 20025:
            return "XVII";
        case 20024:
            return "XVI";
        case 20023:
            return "XV";
        case 20021:
            return "XIV";
        case 20020:
            return "XIII";
        case 20018:
            return "XII";
        case 20017:
            return "XI";
        case 20016:
            return "X";
        case 20015:
            return "IX";
        case 20014:
            return "VII";
        case 20013:
            return "V";
        case 20012:
            return "III";
        default:
            return "";
    }
}

var buffChanged = false;

function unselectToken() {
//TODO
    // if the user manually selected a buff, leave it alone
    if (!buffChanged) {

        // set the pull down to nothing when first displayed
        $(document.querySelector("#buffDropDown")).val(0);

        // set the pull down to nothing when first displayed
        $(document.querySelector("#costDropDown")).val(0);

        // remove the icon ....
        $(document.querySelector("#thronePanelBuffIcon")).removeClass().addClass('icon').addClass('i0');
        $(document.querySelector("#thronePanelBuffPrice")).children("span.items").html('');

        // install an action to track when a buff is selected
        $(document.querySelector("#buffDropDown")).change(function () {
            buffChanged = true;
        });

        // install an action to track when a buff is selected
        $(document.querySelector("#costDropDown")).change(function () {
            buffChanged = true;
        });

        // reset once the dialog is closed
        $(".throneContainer").children("div.close").click(function () {
            buffChanged = false;
        });
    }
}

function getNextAvailableForged(champItem) {
    var curCode = 0;
    if (uW.ksoItems[21093].count > 0 && champItem.level <= 44) curCode = 21093; //45s
    if (uW.ksoItems[21092].count > 0 && champItem.level <= 43) curCode = 21092; //44s
	if (uW.ksoItems[21091].count > 0 && champItem.level <= 42) curCode = 21091; //43s
    if (uW.ksoItems[21090].count > 0 && champItem.level <= 41) curCode = 21090; //42s
    if (uW.ksoItems[21089].count > 0 && champItem.level <= 40) curCode = 21089; //41s
    if (uW.ksoItems[21088].count > 0 && champItem.level <= 39) curCode = 21088; //40s
    if (uW.ksoItems[21087].count > 0 && champItem.level <= 38) curCode = 21087; //39s
    if (uW.ksoItems[21086].count > 0 && champItem.level <= 37) curCode = 21086; //38s
    if (uW.ksoItems[21085].count > 0 && champItem.level <= 36) curCode = 21085; //37s
    if (uW.ksoItems[21084].count > 0 && champItem.level <= 35) curCode = 21084; //36s
    if (uW.ksoItems[21083].count > 0 && champItem.level <= 34) curCode = 21083; //35s
    if (uW.ksoItems[21082].count > 0 && champItem.level <= 33) curCode = 21082; //34s
    if (uW.ksoItems[21081].count > 0 && champItem.level <= 32) curCode = 21081; //33s
    if (uW.ksoItems[21080].count > 0 && champItem.level <= 31) curCode = 21080; //32s
    if (uW.ksoItems[21079].count > 0 && champItem.level <= 30) curCode = 21079; //31s
    if (uW.ksoItems[21078].count > 0 && champItem.level <= 29) curCode = 21078; //30s
    if (uW.ksoItems[21077].count > 0 && champItem.level <= 28) curCode = 21077; //29s
    if (uW.ksoItems[21076].count > 0 && champItem.level <= 27) curCode = 21076; //28s
    if (uW.ksoItems[21075].count > 0 && champItem.level <= 26) curCode = 21075; //27s
    if (uW.ksoItems[21074].count > 0 && champItem.level <= 25) curCode = 21074; //26s
    if (uW.ksoItems[21073].count > 0 && champItem.level <= 24) curCode = 21073; //25s
    if (uW.ksoItems[21072].count > 0 && champItem.level <= 23) curCode = 21072; //24s/////////////
    if (uW.ksoItems[21071].count > 0 && champItem.level <= 22) curCode = 21071; //23s
    if (uW.ksoItems[21070].count > 0 && champItem.level <= 21) curCode = 21070; //22s
    if (uW.ksoItems[21069].count > 0 && champItem.level <= 20) curCode = 21069; //21s
    if (uW.ksoItems[21068].count > 0 && champItem.level <= 19) curCode = 21068; //20s
    if (uW.ksoItems[21067].count > 0 && champItem.level <= 18) curCode = 21067; //19s
    if (uW.ksoItems[21066].count > 0 && champItem.level <= 17) curCode = 21066; //18s
    if (uW.ksoItems[21065].count > 0 && champItem.level <= 16) curCode = 21065; //17s
    if (uW.ksoItems[21064].count > 0 && champItem.level <= 15) curCode = 21064; //16s
    if (uW.ksoItems[21063].count > 0 && champItem.level <= 14) curCode = 21063; //15s
    if (uW.ksoItems[21062].count > 0 && champItem.level <= 13) curCode = 21062; //14s
    if (uW.ksoItems[21061].count > 0 && champItem.level <= 12) curCode = 21061; //13s
    if (uW.ksoItems[21060].count > 0 && champItem.level <= 11) curCode = 21060; //12s
    if (uW.ksoItems[21059].count > 0 && champItem.level <= 10) curCode = 21059; //11s
    if (uW.ksoItems[21055].count > 0 && champItem.level <= 9) curCode = 21055; //10s
    if (uW.ksoItems[21054].count > 0 && champItem.level <= 8) curCode = 21054; //9s
    if (uW.ksoItems[21057].count > 0 && champItem.level <= 7) curCode = 21057; //8s
    if (uW.ksoItems[21053].count > 0 && champItem.level <= 6) curCode = 21053; //7s
    if (uW.ksoItems[21056].count > 0 && champItem.level <= 5) curCode = 21056; //6s
    return curCode;
}

function getNextAvailableMasters(throneItem) {
    var curCode = 0;
    if (uW.ksoItems[20060].count > 0 && throneItem.level <= 51) curCode = 20060; // +52master
    if (uW.ksoItems[20059].count > 0 && throneItem.level <= 50) curCode = 20059; // +51
    if (uW.ksoItems[20058].count > 0 && throneItem.level <= 49) curCode = 20058; // +50
    if (uW.ksoItems[20059].count > 0 && throneItem.level <= 48) curCode = 20057; // +49
    if (uW.ksoItems[20056].count > 0 && throneItem.level <= 47) curCode = 20056; // +48
    if (uW.ksoItems[20055].count > 0 && throneItem.level <= 46) curCode = 20055; // +47
    if (uW.ksoItems[20054].count > 0 && throneItem.level <= 45) curCode = 20054; // +46
    if (uW.ksoItems[20053].count > 0 && throneItem.level <= 44) curCode = 20053; // +45
    if (uW.ksoItems[20052].count > 0 && throneItem.level <= 43) curCode = 20052; // +44
    if (uW.ksoItems[20051].count > 0 && throneItem.level <= 42) curCode = 20051; // +43
    if (uW.ksoItems[20050].count > 0 && throneItem.level <= 41) curCode = 20050; // +42
    if (uW.ksoItems[20049].count > 0 && throneItem.level <= 40) curCode = 20049; // +41
    if (uW.ksoItems[20048].count > 0 && throneItem.level <= 39) curCode = 20048; // +40
    if (uW.ksoItems[20047].count > 0 && throneItem.level <= 38) curCode = 20047; // +39
    if (uW.ksoItems[20046].count > 0 && throneItem.level <= 37) curCode = 20046; // +38
    if (uW.ksoItems[20045].count > 0 && throneItem.level <= 36) curCode = 20045; // +37
    if (uW.ksoItems[20044].count > 0 && throneItem.level <= 35) curCode = 20044; // +36
    if (uW.ksoItems[20043].count > 0 && throneItem.level <= 34) curCode = 20042; // +35
    if (uW.ksoItems[20042].count > 0 && throneItem.level <= 33) curCode = 20042; // +34
    if (uW.ksoItems[20041].count > 0 && throneItem.level <= 32) curCode = 20041; // +33
    if (uW.ksoItems[20040].count > 0 && throneItem.level <= 31) curCode = 20040; // +32
    if (uW.ksoItems[20039].count > 0 && throneItem.level <= 30) curCode = 20039; // +31
    if (uW.ksoItems[20038].count > 0 && throneItem.level <= 29) curCode = 20038; //30s
    if (uW.ksoItems[20037].count > 0 && throneItem.level <= 28) curCode = 20037; //29s
    if (uW.ksoItems[20036].count > 0 && throneItem.level <= 27) curCode = 20036; //28s
    if (uW.ksoItems[20035].count > 0 && throneItem.level <= 26) curCode = 20035; //27s
    if (uW.ksoItems[20034].count > 0 && throneItem.level <= 25) curCode = 20034; //26s
    if (uW.ksoItems[20033].count > 0 && throneItem.level <= 24) curCode = 20033; //25s
    if (uW.ksoItems[20032].count > 0 && throneItem.level <= 23) curCode = 20032; //24s
    if (uW.ksoItems[20031].count > 0 && throneItem.level <= 22) curCode = 20031; //23s
    if (uW.ksoItems[20030].count > 0 && throneItem.level <= 21) curCode = 20030; //22s
    if (uW.ksoItems[20029].count > 0 && throneItem.level <= 20) curCode = 20029; //21s
    if (uW.ksoItems[20028].count > 0 && throneItem.level <= 19) curCode = 20028; //20s
    if (uW.ksoItems[20027].count > 0 && throneItem.level <= 18) curCode = 20027; //19s
    if (uW.ksoItems[20026].count > 0 && throneItem.level <= 17) curCode = 20026; //18s
    if (uW.ksoItems[20025].count > 0 && throneItem.level <= 16) curCode = 20025; //17s
    if (uW.ksoItems[20024].count > 0 && throneItem.level <= 15) curCode = 20024; //16s
    if (uW.ksoItems[20023].count > 0 && throneItem.level <= 14) curCode = 20023; //15s
    if (uW.ksoItems[20021].count > 0 && throneItem.level <= 13) curCode = 20021; //14s
    if (uW.ksoItems[20020].count > 0 && throneItem.level <= 12) curCode = 20020; //13s
    if (uW.ksoItems[20018].count > 0 && throneItem.level <= 11) curCode = 20018; //12s
    if (uW.ksoItems[20017].count > 0 && throneItem.level <= 10) curCode = 20017; //11s
    if (uW.ksoItems[20016].count > 0 && throneItem.level <= 9) curCode = 20016; //10s
    if (uW.ksoItems[20015].count > 0 && throneItem.level <= 8) curCode = 20015; //9s
    if (uW.ksoItems[20015].count > 0 && throneItem.level <= 7) curCode = 20015; //9s
    if (uW.ksoItems[20014].count > 0 && throneItem.level <= 6) curCode = 20014; //7s
    if (uW.ksoItems[20014].count > 0 && throneItem.level <= 5) curCode = 20014; //7s
    if (uW.ksoItems[20013].count > 0 && throneItem.level <= 4) curCode = 20013; //5s
    if (uW.ksoItems[20013].count > 0 && throneItem.level <= 3) curCode = 20013; //5s
    if (uW.ksoItems[20012].count > 0 && throneItem.level <= 2) curCode = 20012; //3s
    if (uW.ksoItems[20012].count > 0 && throneItem.level <= 1) curCode = 20012; //3s
    return curCode;
}

function disableAnimation(disable) {
    if (disable) {
        // override the success failure animations
        CM.ThronePanelView.statusAnim = noAnim;
    } else {
        if (withAnim) CM.ThronePanelView.statusAnim = withAnim;
    }
};

function getChampName( presetIndex ) { //presetIndex is 1 based but needs to be 0 based for champ name so we will minus 1
    var thisChampion = Seed.champion.champions[presetIndex-1];
    return thisChampion.name;
};

function getChampID( presetIndex ) { //presetIndex is 1 based but needs to be 0 based for champ name so we will minus 1
    var thisChampion = Seed.champion.champions[presetIndex-1];
    return thisChampion.championId;
};

function postChampSlot ( slot ) {
    var champId = getChampID(slot);
    var D = [];
    for (var chId in uW.kocChampionItems) if (uW.kocChampionItems[chId].equippedTo == champId) D.push(chId);
    var champStats = GenerateChampPresetEffectsString(D, false);
    D = [];
    D.push("Champ Hall Slot #" + slot);
    D.push(getChampName(slot));
    if (STrChOChampPresetData.showChampName) D.push("(" + STrChOChampPresetData.presetNames[slot-1] + ")");
    if (STrChOChampPresetData.showChampMight) D.push(getChampMight());
    D.push(champStats);
    sendChat(":::. |" + D.join("||"));
};

function postChampPreset ( presetIndex ) {
    var chP = getChampPresetObject(parseInt(presetIndex));
    var D = [];
    for (var p in chP) D.push(p);
    var champStats = GenerateChampPresetEffectsString(D, false);
    D = [];
    D.push("Champ Hall Tag #" + presetIndex);
    D.push(getChampName(presetIndex));
    if (STrChOChampPresetData.showChampName) D.push("(" + STrChOChampPresetData.presetNames[presetIndex-1] + ")");
    if (STrChOChampPresetData.showChampMight) D.push(getChampMight());
    D.push(champStats);
    sendChat(":::. |" + D.join("||"));
};

function getChampMight() {
    var totMight = 0;
    for (chId in uW.kocChampionItems) {
        var champ_item = uW.kocChampionItems[chId];
        var q = champ_item.rarity;
        if (champ_item.unique != 0) q -= 1;
        var l = champ_item.level;
        totMight += CM.thronestats.mightByQuality[q].Might + CM.thronestats.mightByLevel[l].Might;
    }
    return "Approx Might: " + addCommas(totMight);
};

function GenerateChampPresetEffectsString( presetObject, htmlEffects ) {

    var ChampStats = [];
    var TroopStats = [];

    for (var eff in CM.thronestats.effects) TroopStats[eff] = 0;
    //base stats for champ with no items
    ChampStats[201] = 30;
    ChampStats[202] = 0;
    ChampStats[203] = 7;
    ChampStats[204] = 27;
    ChampStats[205] = 27;
    ChampStats[206] = 60;
    ChampStats[207] = 4;
    ChampStats[208] = 3;
    ChampStats[209] = 3;

    var counter = presetObject.length;
    var items = [];

    for (i = 0; i < counter; i++) items.push(presetObject[i]);

	var SetBonus = {};
	for (var y in items) { // calculate unique set bonuses
        var champ_item = uW.kocChampionItems[items[y]];
        if (champ_item == null || !champ_item) continue;
        for (var O in champ_item["effects"]) {
            var effectLine = champ_item["effects"][O];
            var id = effectLine["id"];
            if (id >= 300) {
				var effect = CM.ChampionManager.getEffect(effectLine, champ_item.level);
				if (!SetBonus[champ_item.set]) { SetBonus[champ_item.set] = 0; }
				SetBonus[champ_item.set] += effect.amount;
			}
        }
	}
    while (items.length > 0) {
        var champ_item = uW.kocChampionItems[items.pop()];
        if (champ_item == null || !champ_item) continue;
        for (var O in champ_item["effects"]) {
            var effectLine = champ_item["effects"][O];
            var id = effectLine["id"];
            var effect = CM.ChampionManager.getEffect(effectLine, champ_item.level);
			var bonus = 0;
			if (id<300) bonus = SetBonus[champ_item.set] || 0;
            if (id >= 200) {
                if (!ChampStats[id]) { ChampStats[id] = 0; }
                ChampStats[id] += effect.amount + (effect.amount*bonus);
            } else {
                TroopStats[id] += effect.amount;
            }
        }
    }

    var J = new Array();

    if (htmlEffects) {
        J.push("<div><b><i>CHAMP STATS</i></b></div>");
    } else {
        J.push("CHAMP STATS");
    }
    for (stat in ChampStats) {
        var effectName = uW.g_js_strings.effects["name_"+ stat];
        if (ChampStats[stat] && ChampStats[stat] != 0) {
			if (stat>= 300) {
				str = 'Inc. Bonus '+effectName.split(" equipment")[0];
				var champvalue = +((ChampStats[stat]*100).toFixed(2))+"%";
				if (htmlEffects) {
					J.push("<div>&nbsp;&nbsp;" + str + " " + champvalue + "</div>");
				} else {
					J.push("&nbsp;&nbsp;" + str + " " + champvalue);
				}
			}
			else {
				if (htmlEffects) {
					J.push("<div>&nbsp;&nbsp;" + effectName + " " + ChampStats[stat].toFixed(2) + "</div>");
				} else {
					J.push("&nbsp;&nbsp;" + effectName + " " + ChampStats[stat].toFixed(2));
				}
			}
        }
    }
    if (htmlEffects) {
        J.push("<div><b><i>TROOP STATS</i></b></div>");
    } else {
        J.push("TROOP STATS");
    }
    for (stat in TroopStats) {
        var effectName = CM.thronestats.effects[stat][1];
        if (TroopStats[stat] && TroopStats[stat] != 0) {
            if (htmlEffects) {
                J.push("<div>&nbsp;&nbsp;" + effectName + " " + (Math.round(TroopStats[stat]*100)/100) + "</div>");
            } else {
                J.push("&nbsp;&nbsp;" + effectName + " " + (Math.round(TroopStats[stat]*100)/100));
            }
        }
    }
    if (htmlEffects) {
        return J.join("");
    } else {
        return J.join("||");
    }

}

function getChampBrokeMight() {
    var totMight = 0;
    for (chId in uW.kocChampionItems) {
        var champ_item = uW.kocChampionItems[chId];
        if (champ_item.status == 1) continue;
        var q = champ_item.rarity;
        if (champ_item.unique != 0) q -= 1;
        var l = champ_item.level;
        totMight += CM.thronestats.mightByQuality[q].Might + CM.thronestats.mightByLevel[l].Might;
    }
    return "<b>You have approx " + addCommas(totMight) + " in broken champ might</b>";
};

function ChampLoadDomainSalvageData(domainId) {
    var t = Tabs.champSalvager;

    s = GM_getValue('STrChOChampSalvageData_'+ domainId + uW.tvuid);

    if (s==null) {
        alert("Unable to find data from domain: " + domainId);
        return;
    }

    if (s != null){
        opts = JSON2.parse (s);
        for (k in opts){
            if (matTypeof(opts[k]) == 'object')
                for (kk in opts[k])
                    STrChOChampSalvageData[k][kk] = opts[k][kk];
            else
                STrChOChampSalvageData[k] = opts[k];
        }
    }

    // recreate the objects w/ functions
    for (k in STrChOChampSalvageData.ruleSet)
    {
        var r = STrChOChampSalvageData.ruleSet[k];
        var rule = new ChampRule(r.type, r.faction, r.conditions, r.advancedrule);
        for (j in rule.conditions) {
            rule.conditions[j].ChampCheckCondition = ChampCheckCondition;
        }
        STrChOChampSalvageData.ruleSet[k] = rule;
    }

    // turn off
    STrChOChampSalvageData.active = false;
    clearInterval(t.sTimer);
    clearInterval(t.delTimer);
    t.deleting = false;
    SAVESTrChOChampSalvageData();
    alert('Salvage settings loaded from domain ' + domainId);
    t.buildChampRuleDisplay();
};

function ThroneLoadDomainSalvageData(domainId) {
    var t = Tabs.throneSalvager;

    s = GM_getValue ('STrChOThroneSalvageData_'+ domainId + uW.tvuid);

    if (s==null) {
        alert("Unable to find data from domain: " + domainId);
        return;
    }

    if (s != null){
        opts = JSON2.parse (s);
        for (k in opts){
            if (matTypeof(opts[k]) == 'object')
                for (kk in opts[k])
                    STrChOThroneSalvageData[k][kk] = opts[k][kk];
            else
                STrChOThroneSalvageData[k] = opts[k];
        }
    }

    // recreate the objects w/ functions
    for (k in STrChOThroneSalvageData.ruleSet)
    {
        var r = STrChOThroneSalvageData.ruleSet[k];
        var rule = new ThroneRule(r.type, r.faction, r.conditions, r.advancedrule);
        for (j in rule.conditions) {
            rule.conditions[j].ThroneCheckCondition = ThroneCheckCondition;
        }
        STrChOThroneSalvageData.ruleSet[k] = rule;
    }

    // turn off
    STrChOThroneSalvageData.active = false;
    clearInterval(t.sTimer);
    clearInterval(t.delTimer);
    t.deleting = false;
    SAVESTrChOThroneSalvageData();
    alert('Salvage settings loaded from domain ' + domainId);
    t.buildThroneRuleDisplay();
};

function secondsToTime(seconds) {
    if (seconds == 0) return "Complete";
    var remainderSeconds = seconds % 60;
    seconds = seconds - remainderSeconds;
    var remainderMinutes = seconds / 60;
    return (remainderMinutes + 'm ' + remainderSeconds + 's');
};

function onUnload (){
    if (uW.STrChOLoaded) {
        if (mainPop) {
            var pos = mainPop.getLocation();
            STrChOGeneralOptions.xPos = pos.x;
            STrChOGeneralOptions.yPos = pos.y;
            //STrChOGeneralOptions.xPos = mainPop.getLocation.x;
            //STrChOGeneralOptions.yPos = mainPop.getLocation.y;
            SAVESTrChOGeneralOptions();
        }
    }
};

function RefreshCamelot() {  //This piece of code was taken from KoC Power BOT.  All credit goes to them for this piece.  Thanks guys/gals!
    var serverId = getServerId();
    var goto = window.location.protocol + '//apps.facebook.com/kingdomsofcamelot/?s=' + serverId;
    if (document.URL.match(/standalone=1/i)) {
        goto = window.location.protocol + '//www.kabam.com/games/kingdoms-of-camelot/play?s=' + serverId;
    };
    setTimeout (function (){window.top.location = goto;}, 0);
};

// emulate protoype's Ajax.Request ...
function AjaxRequest (url, opts) {  //emulate protoype's Ajax.Request ...
    var headers = {
            'X-Requested-With': 'XMLHttpRequest',
            'X-Prototype-Version': '1.6.1',
            'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
    };
    var ajax = null;

    if (window.XMLHttpRequest)
        ajax=new XMLHttpRequest();
    else
        ajax=new ActiveXObject("Microsoft.XMLHTTP");

    if (opts.method==null || opts.method=='')
        method = 'GET';
    else
        method = opts.method.toUpperCase();

    if (method == 'POST'){
        headers['Content-type'] = 'application/x-www-form-urlencoded; charset=UTF-8';
    } else if (method == 'GET'){
        addUrlArgs (url, opts.parameters);
    }

    ajax.onreadystatechange = function(){
//      ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete']; states 0-4
        if (ajax.readyState==4) {
            if (ajax.status >= 200 && ajax.status < 305)
                if (opts.onSuccess) opts.onSuccess(ajax);
                else
                    if (opts.onFailure) opts.onFailure(ajax);
        } else {
            if (opts.onChange) opts.onChange (ajax);
        }
    }

    ajax.open(method, url, true);   // always async!

    for (var k in headers)
        ajax.setRequestHeader (k, headers[k]);
    if (matTypeof(opts.requestHeaders)=='object')
        for (var k in opts.requestHeaders)
            ajax.setRequestHeader (k, opts.requestHeaders[k]);

    if (method == 'POST'){
        var a = [];
        for (k in opts.parameters){
            if(matTypeof(opts.parameters[k]) == 'object')
                for(var h in opts.parameters[k])
                    a.push (k+'['+h+'] ='+ opts.parameters[k][h] );
            else
                a.push (k +'='+ opts.parameters[k] );
        }
        ajax.send (a.join ('&'));
    } else               {
        ajax.send();
    }
};

function MyAjaxRequest (url, o, noRetryX) {
    if (DEBUG_TRACE) logit (" 0 myAjaxRequest: "+ url +"\n" + inspect (o, 2, 1));
    var opts = uW.Object.clone(o);
    var wasSuccess = o.onSuccess;
    var wasFailure = o.onFailure;
    var retry = 0;
    var delay = 10;
    var noRetry = noRetry===true?true:false;
    opts.onSuccess = mySuccess;
    opts.onFailure = myFailure;

    new AjaxRequest(url, opts);
    return;

    function myRetry(){
        ++retry;
        new AjaxRequest(url, opts);
        delay = delay * 2.25;
    }
    function myFailure(){
        var o = {};
        o.ok = false;
        o.errorMsg = "AJAX Communication Failure";
        wasFailure (o);
    }
    function mySuccess (msg){
        var rslt = eval("(" + msg.responseText + ")");
        if (!rslt)
        {
            logit("Message error: " + inspect(msg,3,1));
            return;
        }
        var x;
        if (window.EmulateAjaxError){
            rslt.ok = false;
            rslt.error_code=8;
        }
        if (rslt.ok){
            if (rslt.updateSeed)
                uW.update_seed(rslt.updateSeed);
            wasSuccess (rslt);
            return;
        }
        rslt.errorMsg = uW.printLocalError((rslt.error_code || null), (rslt.msg || null), (rslt.feedback || null));

        if (!noRetry && (rslt.error_code==0 || rslt.error_code==8 || rslt.error_code==1 || rslt.error_code==3)){
            dialogRetry (inspect(rslt.errorMsg), delay, function(){myRetry()}, function(){wasSuccess (rslt)}, rslt.error_code);
        } else {
            wasSuccess (rslt);
        }
    }
};

function ExportThroneToExcel(isPreview) {
    var headers = [ "ID", "NAME", "FACTION", "QUALITY", "TYPE", "LEVEL", "MIGHT", "JEWEL", "ROW 1", "ROW 2", "ROW 3", "ROW 4", "ROW 5", "ROW 6"];
    var ExcelTable = document.createElement('table');
    var ExcelBody = document.createElement('tbody');
    var ExcelRow = document.createElement('tr');
    var ExcelColumn = "";
    for (i = 0; i < headers.length; i++) {
        ExcelColumn = document.createElement('th');
        ExcelColumn.appendChild(document.createTextNode(headers[i]));
        ExcelRow.appendChild(ExcelColumn);
    }
    ExcelBody.appendChild(ExcelRow);

    var columns = [];

    for (trId in uW.kocThroneItems) {
        if (isPreview && !STrChOThronePresetData.previewThrone[trId]) continue;
        var throne_item = uW.kocThroneItems[trId];
        if (!throne_item) continue;
        columns = [];
        columns.push(trId);
        columns.push(throne_item.name);
        columns.push(throne_item.faction);
        columns.push(throne_item.quality);
        columns.push(throne_item.type);
        columns.push(throne_item.level);
        columns.push(CM.ThroneView.getMightBonus(throne_item));
        if (throne_item.jewel != null) {
            if (throne_item.jewel.valid) {
                var jewel_item = throne_item.jewel;
                var qlty = CM.thronestats.jewelGrowthLimit[jewel_item.quality];
                var amt = CM.ThroneController.getEffectAmount(jewel_item, qlty);
                var jewelName = CM.ThroneController.jewelName(jewel_item);
                if (amt == 0) jewelName = "none";
                columns.push(jewelName);
            } else {
                columns.push("none");
            }
        } else {
            columns.push("none");
        }
        for (var O in throne_item["effects"]) {
            var slotNumber = +(O.split("slot")[1]);
            var id = throne_item["effects"]["slot" + slotNumber]["id"];
            var tier = parseInt(throne_item["effects"]["slot" + slotNumber]["tier"]);
            var level = throne_item.level;
            p = CM.thronestats.tiers[id][tier];
            var effectName = CM.thronestats["effects"][id]["1"];
            while (!p && (tier > 0)) { tier--; p = CM.thronestats.tiers[id][tier]; }
            if (!p) continue; // can't find stats for tier

            if (slotNumber == 6) {
                JewelQuality = throne_item["effects"]["slot" + slotNumber].quality;
                GrowthLimit = CM.thronestats.jewelGrowthLimit[JewelQuality];
                if (GrowthLimit <= level) level = GrowthLimit
            }
            var Current = p.base + ((level * level + level) * p.growth * 0.5);
            columns.push(Current + "% " + effectName);
        }

        columns.reverse();
        ExcelRow = document.createElement('tr');
        while (columns.length > 0) {
            ExcelColumn = document.createElement('td');
            ExcelColumn.appendChild(document.createTextNode(columns.pop()));
            ExcelRow.appendChild(ExcelColumn);
        }
        ExcelBody.appendChild(ExcelRow);
    }
    ExcelTable.appendChild(ExcelBody);

    window.open('data:application/vnd.ms-excel,' + encodeURIComponent(ExcelTable.outerHTML));
}
function ConvertUniqueAndBuildChampCard (champId, lvl) {
    var t = Tabs.champUniques;
	var ChampCard = {};
	ChampCard = t.UniqueItems[champId];
	ChampCard.id = ChampCard.Id;
	ChampCard.name = ChampCard.Name;
	if (ChampCard.Faction != 0) {
		ChampCard.faction = ChampCard.Faction;
		ChampCard.type = ChampCard.Type;
	}
	else {
		ChampCard.faction = 'unknown';
		ChampCard.type = 'unknown';
		ChampCard.unknown = true;
	}
	ChampCard.unique = ChampCard.id;
	ChampCard.level = parseInt(lvl);
	ChampCard.rarity = 5;
	ChampCard.createPrefix = function () { return ""; };
	ChampCard.createSuffix = function () { return ""; };
	ChampCard.effects = {};
	var effects = eval(ChampCard.Effects);
	var slot = 0;
	for (k in effects) {
		slot++
		ChampCard.effects["slot"+slot] = {};
		ChampCard.effects["slot"+slot].id = effects[k].type;
		ChampCard.effects["slot"+slot].tier = effects[k].tier;
	}
	return BuildChampCard(ChampCard);
};

function ConvertUniqueAndBuildThroneCard(throneID, lvl) {
    var t = Tabs.throneUniques;
    var ThroneCard = {};
    ThroneCard = t.UniqueItems[throneID];
    ThroneCard.id = ThroneCard.Id;
    ThroneCard.name = ThroneCard.Name;
    ThroneCard.faction = uW.g_js_strings.commonstr[CM.CHAMPION.getFactionClasses(ThroneCard.Faction)].toLowerCase();
    ThroneCard.type = throneCardTypes[parseInt(ThroneCard.Type)-1].toLowerCase();
    ThroneCard.unique = ThroneCard.id;
    ThroneCard.level = parseInt(lvl);
    ThroneCard.quality = STrChOMaxThroneQuality;
    ThroneCard.createPrefix = function () { return ""; };
    ThroneCard.createSuffix = function () { return ""; };
    ThroneCard.effects = {};
    var effects = eval(ThroneCard.Effects);
    var slot = 0;

    for (k in effects) {
        slot++
        ThroneCard.effects["slot"+slot] = {};
        ThroneCard.effects["slot"+slot].id = effects[k].type;
        ThroneCard.effects["slot"+slot].tier = effects[k].tier;

        if (slot==6) {
            ThroneCard.effects["slot"+slot].quality = 5; // assume bright jewel
            ThroneCard.effects["slot"+slot].fromJewel = true;

            ThroneCard.jewel = {};
            ThroneCard.jewel.valid = true;
            ThroneCard.jewel.id = ThroneCard.effects["slot"+slot].id;
            ThroneCard.jewel.quality = 5; // assume bright jewel
            ThroneCard.jewel.tier = ThroneCard.effects["slot"+slot].tier;
            ThroneCard.jewel.fromJewel = true;
            ThroneCard.jewel.gift = false;
            ThroneCard.jewel.quantity = 1;
        }
    }
    return BuildThroneCard(ThroneCard);
};

function BuildChampCard(champItem) {

    var D = [];

    if (champItem == null) {
        D.push('<div>');
        D.push('</div>');
        return D.join('');
    }
    D.push('<div class=STrChOCard style="white-space: normal; padding: 0px;">');
    D.push('<div class=section style="overflow: visible;" id=idsection>');
    D.push('<div div class="champ_item_section">');

    var champName = champItem.name;
    champName = champName.replace(champItem.createPrefix(), '');
    champName = champName.replace('Chest Armor of', 'Chest Of');
    champName = champName.trim();
    D.push('<div class="STrChOTitle ' + champCardQualities[champItem.rarity] + '" title="' + champName + '" style="text-transform: capitalize;">');
    if (champItem.status == CM.CHAMPION.STATUS_BROKEN_UPGRADE || champItem.status == CM.CHAMPION.STATUS_BROKEN_ENHANCE) D.push('<font color=red><b>BROKEN</b></font><br>');
    D.push(champName);
    D.push('</div>');
    D.push('<div class=description>');
    var uniquestyle = "";
	if (champItem.unique != 0) uniquestyle = "background:transparent url('" + IMGURL +"champion_hall/unique_" + champItemUniqueNames[champItem.type] + "_" + STrChOFactions[champItem.faction-1] + "_70x70_" + champItem.unique + ".png'); top left no-repeat; background-size: cover;";
    D.push('<div class="portrait ' + STrChOFactions[champItem.faction-1] + ' ' + champItemNames[champItem.type] + '" style="'+uniquestyle+'"></div>');
    D.push('<ul>');
    D.push('<li>Faction: ' + STrChOFactions[champItem.faction-1] + '</li>');
    D.push('<li>Quality: ' + champCardQualities[champItem.rarity] + '</li>');
    D.push('<li>Might: ' + (champItem.might > 0 ? champItem.might : '') + '</li>');
    D.push('</ul>');
    D.push('</div>');
    D.push('<ul class="effects">');

    for (var ef in champItem["effects"]) {
        var effectLine = champItem["effects"][ef];
        var effect = CM.ChampionManager.getEffect(effectLine, champItem.level);
        D.push('<li class="effect ' + (effect.id >= 200 ? 'statChamp' : 'statTroop') + '">' + effect.amount + ' ' + uW.g_js_strings.effects["name_" + effect.id ] + '</li>');
    }

    D.push('</ul>');
    D.push('</div>');
    D.push('</div>');
    D.push('</div>');
    D.push('</div>');
    return D.join('');
};

function BuildThroneCard(throneItem) {
    var D = [];
    var w = CM.thronestats.mightByQuality;
    var z = CM.thronestats.mightByLevel;

    if (throneItem == null) {
        D.push('<div>');
        D.push('</div>');
        return D.join('');
    }

    D.push('<div class=STrChOCard style="white-space: normal; padding: 0px;">');
    D.push('<div class=section style="overflow: visible;" id=idsection>');
    D.push('<div div class="throne_item_section">');
    var throneName = throneItem.name;
    throneName = throneName.replace(throneItem.createPrefix(), '');
    throneName = throneName.trim();
    D.push('<div class="STrChOTitle ' + throneItem.createPrefix().toLowerCase() + '" title="' + throneName + '" style="text-transform: capitalize;">');
    if (throneItem.isBroken) D.push('<font color=red><b>BROKEN</b></font><br>');
    D.push(throneName + (throneItem.unique ? ' +' + throneItem.level : ''));
    D.push('</div>');
    D.push('<div class=description>');

    var uniquestyle = '';
    if (throneItem.unique > 29000) {
        uniquestyle = "background:transparent url('"+gameurl+"img/throne/icons/70/"+throneItem.faction+"_"+throneItem.type+"_unique_"+throneItem.unique + ".png'); top left no-repeat; background-size: 70px 70px;";
        if (throneItem.unique == 30262 || throneItem.unique == 30264 || throneItem.unique == 30266) { uniquestyle = "background:transparent url('"+gameurl+"img/throne/icons/70/christmas_advisor_normal_1.png'); top left no-repeat; background-size: 70px 70px;";};
        if (throneItem.unique == 30261 || throneItem.unique == 30263 || throneItem.unique == 30265) { uniquestyle = "background:transparent url('"+gameurl+"img/throne/icons/70/christmas_candelabrum_normal_1.png'); top left no-repeat; background-size: 70px 70px;";};
        if (throneItem.unique == 30230 || throneItem.unique == 30240 || throneItem.unique == 30250) { uniquestyle = "background:transparent url('"+gameurl+"img/throne/icons/70/halloween_table_normal_1.png'); top left no-repeat; background-size: 70px 70px;";};
        if (throneItem.unique == 30231 || throneItem.unique == 30241 || throneItem.unique == 30251) { uniquestyle = "background:transparent url('"+gameurl+"img/throne/icons/70/halloween_chair_normal_1.png'); top left no-repeat; background-size: 70px 70px;";};
    }
    D.push('<div class="portrait ' + throneItem.faction + ' ' + throneItem.type + '" style="'+uniquestyle+'"></div>');
    D.push('<ul>');
    D.push('<li>Faction: ' + throneItem.faction + '</li>');
    D.push('<li>Quality: ' + throneItem.createPrefix() + '</li>');
    //D.push('<li>' + uW.g_js_strings.commonstr.type + ': ' + throneItem.type + '</li>');
    //D.push('<li>' + uW.g_js_strings.commonstr.level + ': ' + throneItem.level + '</li>');
    D.push('<li>Might: ' + CM.ThroneView.getMightBonus(throneItem) + '</li>');
    var hasJewel = false;
    if (throneItem.jewel) {
        if (throneItem.jewel.valid) hasJewel = true;
    }
    D.push('<li>Jewel: ' + (!hasJewel ? 'None' : STrChOJewelQualities[throneItem.jewel.quality-1]) + '</li>');
    D.push('</ul>');
    D.push('</div>');
    D.push('<ul>');

    for (slot in throneItem.effects) {
        try {
            var N = throneItem.effects[slot];
            effect = CM.thronestats.effects[N.id];

            tier = CM.thronestats.tiers[N.id][N.tier];
            if (!tier) tier = CM.thronestats.tiers[N.id][N.tier - 1];

            var base = tier.base || 0;
            var level = throneItem.level;
            var growth = tier.growth || 0;

            if (slot == 'slot6') {  //if it has a slot 6, it automatically has a jewel
                JewelQuality = throneItem['effects']['slot6'].quality;
                GrowthLimit = CM.thronestats.jewelGrowthLimit[JewelQuality];
                if (GrowthLimit <= level) level = GrowthLimit
            }

            percent = +(base + ((level * level + level) * growth * 0.5));

            var wholeNumber = false;
            if (Math.round(parseFloat(percent)) == parseFloat(percent)) wholeNumber = true;

            percent = (percent > 0) ? "+" + percent : +percent;

            if (wholeNumber)
                percent = parseFloat(percent).toFixed(0);
            else
                percent = parseFloat(percent).toFixed(2);

            css = (slot % 2 === 0) ? 'even' : 'odd';
            B = +(slot.split("slot")[1]);

            if (B <= throneItem.quality) {
                D.push('<li class="effect ' + css + '"> ' + percent + '% ' + effect[1] + '</li>');
            } else {
                D.push('<li class="effect disabled ' + css + '"> ' + percent + '% ' + effect[1] + '</li>');
            }
        }
        catch (e) { }

    }
    D.push('</ul>');
    D.push('</div>');
    D.push('</div>');
    D.push('</div>');
    D.push('</div>');
    return D.join('');
};

function NewsItemRow(msg) {
    var m = '<tr><td>&#149';
    m += msg;
    m += '</td></tr>';
    return m;
};

function pickAetherSalvageCity() {

    if (parseInt(Seed.resources["city" + Seed.cities[STrChOGeneralOptions.salvageCityNum][0]]["rec5"][0]) <= STrChOGeneralOptions.maxStones) return STrChOGeneralOptions.salvageCityNum;

    var ind = -1;
    var lowest = 16000000;

    if (STrChOGeneralOptions.salvageAnyCity) {
        for (i = 0; i < Seed.cities.length; i++) {
            if (STrChOGeneralOptions.overflow == "lowest") {
                // put in the city w/ the lowest number of a-stone
                if (parseInt(Seed.resources["city" + Seed.cities[i][0]]["rec5"][0]) < lowest) {
                    ind = i;
                    lowest = +Seed.resources["city" + Seed.cities[ind][0]]["rec5"][0];
                }
            } else {
                // put in the first city with low stones
                if (parseInt(Seed.resources["city" + Seed.cities[i][0]]["rec5"][0]) <= STrChOGeneralOptions.maxStones) {
                    return i;
                }
            }
        }
    }
    return ind;
};

function SalvageChampItem(id) {
    var t = Tabs.champSalvager;

    var params = uW.Object.clone(ajfx);
    var num_city = pickAetherSalvageCity();
    if ( num_city < 0)
    {
        num_city = +STrChOGeneralOptions.salvageCityNum;
        t.setStatus("All cities are (nearly) full of aetherstone");
    }

    params.action = "8";
    params.eids = id;
    params.cityId = Seed.cities[num_city][0];

    new AjaxRequest(uW.g_ajaxpath + "ajax/ceEquipmentManagerAjax.php" + uW.g_ajaxsuffix, {
        method: "post",
        parameters: params,
        loading: true,
        onSuccess: function (transport) {
            try {
                var rslt = eval("(" + transport.responseText + ")");
                var champ_item = uW.kocChampionItems[id];

                if(rslt.ok == true) {
                    var eid = rslt.equipmentIds[0];
                    champ_item = uW.kocChampionItems[eid];

                    if (champ_item) SalvageLog('Deleted Champion item '+ champ_item.name);
                    STrChOChampSalvageData.numSalvagedItems++;
                    STrChOChampSalvageData.numSalvagedItems2++;
                    SAVESTrChOChampSalvageData();

                    if (champ_item) {
                        STrChOChampSalvageData.numSalvaged[champ_item.rarity]++;
                        SAVESTrChOChampSalvageData();
                        t.removeItem(eid , Seed.cities[num_city][0], parseInt(rslt.aetherstones));
                    }
                    t.displayNumberSalvaged();
                }
                else
                {
                    //logit("rslt: " + inspect(rslt,3,1));
                    if (champ_item) t.setStatus('Unable to salvage item ' + champ_item.name);
                }

                var idx = t.delItems.indexOf(id);
                if (idx >=0)
                {
                    t.delItems.splice(idx,1);
                    // Remove item from array regardless
                    // of success. Catch on next refresh
                }
                if (t.delItems.length > 0) { // Check if the array is empty
                    t.upgradeAndDelete();
                } else {
                    t.deleting = false;
                    t.setStatus('Salvaging complete.  Waiting for next cycle.');
                    return;
                }
            } catch (e) {
                t.deleting = false;
            }
        },
        onFailure: function () {
            t.delIems = [];
            t.deleting = false;
            //if (uW.kocChampionItems[id] )                logit("salvage failed for item " + unsafeWindow.kocChampionItems[id].name );
            return;
        }
    });
}

function ThroneUpdateTimerDisplay () {

    if (!document.getElementById('STrChOTimerDisplay')) return;

    var t = Tabs.throneUpgrader;
    var timeUntilDone = 0;

    if (t.repairEnd != 0) timeUntilDone = t.repairEnd - unixTime();

    if (timeUntilDone > 0)
        document.getElementById('STrChOTimerDisplay').innerHTML = '<span id=STrChOHammer></span> ' + rectime(timeUntilDone);
    else
        document.getElementById('STrChOTimerDisplay').innerHTML = 'DONE';
}

function rectime(secs) {
    var min = Math.floor((secs)/60);
    var sec = Math.ceil(secs - (min * 60));

    if (sec < 10) {sec = "0" + sec;}
    return  min + ':' + sec;
}

function getThroneImage(item) {
    var img = '';
    if (item.unique == 30262 || item.unique == 30264 || item.unique == 30266) {
        img = "https://rycamelot1-a.akamaihd.net/fb/e2/src/img/throne/icons/70/christmas_advisor_normal_1.png";
    } else if (item.unique == 30261 || item.unique == 30263 || item.unique == 30265) {
        img = "https://rycamelot1-a.akamaihd.net/fb/e2/src/img/throne/icons/70/christmas_candelabrum_normal_1.png";
    } else if (item.unique == 30230 || item.unique == 30240 || item.unique == 30250) {
        img = "https://rycamelot1-a.akamaihd.net/fb/e2/src/img/throne/icons/70/halloween_table_normal_1.png";
    } else if (item.unique == 30231 || item.unique == 30241 || item.unique == 30251) {
        img = "https://rycamelot1-a.akamaihd.net/fb/e2/src/img/throne/icons/70/halloween_chair_normal_1.png";
    } else if (item.unique > 0) {
        img = "https://rycamelot1-a.akamaihd.net/fb/e2/src/img/throne/icons/30/" + item.faction + "/" + item.faction + "_" + item.type + "_unique_normal_" + item.unique + ".png";
    } else {
        img = "https://rycamelot1-a.akamaihd.net/fb/e2/src/img/throne/icons/30/" + item.faction + "/" + item.faction + "_" + item.type + "_normal_1_" + item.quality + ".png";
    }

    if (item.isBroken) img = "https://rycamelot1-a.akamaihd.net/fb/e2/src/img/throne/modal/sm_fail_overlay.png";

    return img;
}

function SalvageThroneItem(id) {

    var t = Tabs.throneSalvager;

    var params = uW.Object.clone(ajfx);
    var num_city = pickAetherSalvageCity();
    if (num_city < 0) {
        num_city = +STrChOGeneralOptions.salvageCityNum;
        t.setStatus("All cities are (nearly) full of aetherstone");
    }

    params.ctrl = 'throneRoom\\ThroneRoomServiceAjax';
    params.action = 'salvage';
    params.itemId = id;
    params.cityId = Seed.cities[num_city][0];

    new AjaxRequest(uW.g_ajaxpath + "ajax/_dispatch53.php" + uW.g_ajaxsuffix, {
        method: "post",
        parameters: params,
        loading: true,
        onSuccess: function (transport) {
            try {
                var rslt = eval("(" + transport.responseText + ")");
                var throne_item = uW.kocThroneItems[id];
                if (rslt.ok) {
                    if (throne_item) SalvageLog('Deleted Throne Room item ' + throne_item.name);
                    STrChOThroneSalvageData.numSalvagedItems++;
                    STrChOThroneSalvageData.numSalvagedItems2++;
                    SAVESTrChOThroneSalvageData();

                    if (throne_item) {
                        STrChOThroneSalvageData.numSalvaged[throne_item.quality]++;
                        SAVESTrChOThroneSalvageData();
                        Tabs.throneSalvager.removeItem(id, Seed.cities[num_city][0], rslt.aetherstones);
                    }

                    Tabs.throneSalvager.displayNumberSalvaged();

                    var sidx = STrChOThroneSalvageData.upgradedToDelete.indexOf(id);
                    if (sidx >= 0) {
                        STrChOThroneSalvageData.upgradedToDelete.splice(sidx, 1); // Remove item from array
                        SAVESTrChOThroneSalvageData();
                    }
                    if (STrChOGeneralOptions.throneSorter) {
                        var cmContainerOpen = (document.getElementsByClassName('cmModalContainer').length == 1 ? true : false);
                        sortThroneSorter(!cmContainerOpen);
                        setThroneSorter(!cmContainerOpen);
                        SAVESTrChOThroneSorter();
                    }
                } else {
                    if (throne_item) Tabs.throneSalvager.setStatus('Unable to salvage item ' + throne_item.name);
                    CM.ThroneView.renderInventory(uW.kocThroneItems);
                }

                var idx = t.delItems.indexOf(id);

                if (idx >= 0) t.delItems.splice(idx, 1); // Remove item from array regardless of success. Catch on next refresh

                if (t.delItems.length > 0) { // Check if the array is empty
                    t.upgradeAndDelete();
                } else {
                    t.deleting = false;
                    t.setStatus('Salvaging complete.  Waiting for next cycle.');
                    return;
                }
            } catch (e) {
                t.deleting = false;
            }
        },
        onFailure: function () {
            t.delIems = [];
            t.deleting = false;
            CM.ThroneView.renderInventory(uW.kocThroneItems);
            return;
        }
    });
};

function ThroneAttachTab() {

    uW.hideShow    = eventHideShow;
    uW.execSalvager = Tabs.throneSalvager.togglePower;
    uW.execUpgrader = Tabs.throneUpgrader.togglePower;
    uW.execRepair  = Tabs.throneRepair.togglePower;
    uW.execSorter = Tabs.throneSorter.togglePower;
    uW.clickNextThroneLevel = Tabs.throneOrganizer.showNextThroneLevel;

    var str = ThroneTemplates.mainThrone.replace(
            '<li id="throneStatTab" class="inactive"> #{stats} </li>',
            '<li id="throneStatTab" class="inactive"> #{stats} </li>' +
            '<li id="STrChOControls" class="inactive" style="font-size: 12px;" onclick="hideShow()">STrChO</li>' +
            '<li id="STrChOExecuteSorter" class="inactive" style="font-size: 10px;" onclick="execSorter()">Sorter ' + (STrChOGeneralOptions.throneSorter ? 'ON' : 'OFF') + '</li>' +
            '<li id="STrChOExecuteRepair" class="inactive" style="font-size: 10px;" onclick="execRepair()">Repair ' + (STrChOThroneRepairData.active ? 'ON' : 'OFF') + '</li>' +
            '<li id="STrChOExecuteUpgrader" class="inactive" style="font-size: 10px;" onclick="execUpgrader()">Upgrader ' + (STrChOThroneUpgradeData.active ? 'ON' : 'OFF') + '</li>' +
            '<li id="STrChOExecuteSalvager" class="inactive" style="font-size: 10px;" onclick="execSalvager()">Salvager ' + (STrChOThroneSalvageData.active ? 'ON' : 'OFF') + '</li>' +
            '<li id="STrChOTimerDisplay" class="inactive" style="font-size: 10px;">Done</li>');
    str = str.replace( '<div id="thronePanelContainer">', '<div id="thronePanelContainer" style="z-index: 101">');
    //str = str.replace( '<li id="throneInventoryTab" class="inactive"> #{inventory} </li>', '<li id="throneInventoryTab" class="inactive" style="font-size: 12px;"> #{inventory} </li>');
    ThroneTemplates.mainThrone = str;

    ThroneTemplates.throneInfo = ThroneTemplates.throneInfo.replace (
            '<div id="throneInfoContainer">',
            '<div id="throneInfoContainer" style="z-index: 100;">');

    ThroneTemplates.mainThrone = ThroneTemplates.mainThrone.replace (
            '<div id="throneInfoContainer">',
            '<div id="throneInfoContainer" style="z-index: 100;">');

    ThroneTemplates.thronePanel = ThroneTemplates.thronePanel.replace(
            '<div class="thronePanelContainer">',
            '<div class="thronePanelContainer" style="z-index: 101;">');

    ThroneTemplates.thronePanel = ThroneTemplates.thronePanel.replace(
            '<div id="nextStatContainer" class="nextStat">',
            '<div id="nextStatContainer" class="nextStat" onclick="clickNextThroneLevel()">');

    ThroneTemplates.mainThrone = ThroneTemplates.mainThrone.replace(
            '<ul id="throneStatDisplay"></ul>',
            '<div style="width: 70%; margin-left: auto; margin-right: auto;"><input class=STrChOButton type="button" value="Post to Chat" onclick="postThroneStats()"></input></div><ul id="throneStatDisplay"></ul>');

    GM_addStyle( "div#throneMainContainer div#throneInfoContainer div.infoContainer div.statContainer div.stats > ul {height: 345px }");

    function postThroneStats() { postThroneSlot(Seed.throne.activeSlot); }

    uW.postThroneStats = postThroneStats;
}

function SAVESTrChOGlobalOptions() {
    setTimeout(function () { GM_setValue('STrChOGlobalOptions_' + uW.tvuid, JSON2.stringify(STrChOGlobalOptions)); }, 0);
}
function SAVESTrChOGeneralOptions() {
    setTimeout(function () { GM_setValue('STrChOGeneralOptions_' + getServerId() + uW.tvuid, JSON2.stringify(STrChOGeneralOptions)); }, 0);
}
function SAVESTrChOLogData() {
    setTimeout(function () { GM_setValue('STrChOLogData_' + getServerId() + uW.tvuid, JSON2.stringify(STrChOLogData)); }, 0);
}
function SAVESTrChOThroneUpgradeStats() {
    setTimeout(function () { GM_setValue('STrChOThroneUpgradeStats_' + getServerId() + uW.tvuid, JSON2.stringify(STrChOThroneUpgradeStats)); }, 0);
}
function SAVESTrChOThroneUpgradeData() {
    setTimeout(function () { GM_setValue('STrChOThroneUpgradeData_' + getServerId() + uW.tvuid, JSON2.stringify(STrChOThroneUpgradeData)); }, 0);
}
function SAVESTrChOThroneQueueData() {
    setTimeout(function () { GM_setValue('STrChOThroneQueueData_' + getServerId() + uW.tvuid, JSON2.stringify(STrChOThroneQueueData)); }, 0);
}
function SAVESTrChOThronePresetData() {
    setTimeout(function () { GM_setValue('STrChOThronePresetData_' + getServerId() + uW.tvuid, JSON2.stringify(STrChOThronePresetData)); }, 0);
    uW.STrChOPresetNames = STrChOThronePresetData.presetNames;
}
function SAVESTrChOThroneRepairData() {
    setTimeout(function () { GM_setValue('STrChOThroneRepairData_' + getServerId() + uW.tvuid, JSON2.stringify(STrChOThroneRepairData)); }, 0);
}
function SAVESTrChOThroneSalvageData() {
    setTimeout(function () { GM_setValue('STrChOThroneSalvageData_' + getServerId() + uW.tvuid, JSON2.stringify(STrChOThroneSalvageData)); }, 0);
}
function SAVESTrChOChampUpgradeStats() {
    setTimeout(function () { GM_setValue('STrChOChampUpgradeStats_' + getServerId() + uW.tvuid, JSON2.stringify(STrChOChampUpgradeStats)); }, 0);
}
function SAVESTrChOChampUpgradeData() {
    setTimeout(function () { GM_setValue('STrChOChampUpgradeData_' + getServerId() + uW.tvuid, JSON2.stringify(STrChOChampUpgradeData)); }, 0);
}
function SAVESTrChOChampQueueData() {
    setTimeout(function () { GM_setValue('STrChOChampQueueData_' + getServerId() + uW.tvuid, JSON2.stringify(STrChOChampQueueData)); }, 0);
}
function SAVESTrChOChampPresetData() {
    setTimeout(function () { GM_setValue('STrChOChampPresetData_' + getServerId() + uW.tvuid, JSON2.stringify(STrChOChampPresetData)); }, 0);
}
function SAVESTrChOChampRepairData() {
    setTimeout(function () { GM_setValue('STrChOChampRepairData_' + getServerId() + uW.tvuid, JSON2.stringify(STrChOChampRepairData)); }, 0);
}
function SAVESTrChOChampSalvageData() {
    setTimeout(function () { GM_setValue('STrChOChampSalvageData_' + getServerId() + uW.tvuid, JSON2.stringify(STrChOChampSalvageData)); }, 0);
}
function SAVESTrChOThroneSorter() {
    setTimeout(function () { GM_setValue('STrChOThroneSorter_' + getServerId() + uW.tvuid, JSON2.stringify(STrChOThroneSorter)); }, 0);
}

function LOADSTrChOGlobalOptions() {
    var s = GM_getValue('STrChOGlobalOptions_' + uW.tvuid);
    if (s != null) STrChOGlobalOptions = JSON2.parse(s);
}

function LOADSTrChOGeneralOptions() {
    var s = GM_getValue('STrChOGeneralOptions_' + getServerId() + uW.tvuid);
    if (s != null) STrChOGeneralOptions = JSON2.parse(s);
}

function LOADSTrChOLogData() {
    var s = GM_getValue('STrChOLogData_' + getServerId() + uW.tvuid);
    if (s != null) {
        opts = JSON2.parse(s);
        for (k in opts) {
            if (matTypeof(opts[k]) == 'object')
                for (kk in opts[k])
                    STrChOLogData[k][kk] = opts[k][kk];
            else
                STrChOLogData[k] = opts[k];
        }
    }
}

function LOADSTrChOThroneUpgradeStats() {
    var s = GM_getValue('STrChOThroneUpgradeStats_' + getServerId() + uW.tvuid);
    if (s != null) {
        opts = JSON2.parse(s);
        for (k in opts) {
            if (matTypeof(opts[k]) == 'object')
                for (kk in opts[k])
                    STrChOThroneUpgradeStats[k][kk] = opts[k][kk];
            else
                STrChOThroneUpgradeStats[k] = opts[k];
        }
    }
}

function LOADSTrChOThronePresetData() {
    var s = GM_getValue('STrChOThronePresetData_'+ getServerId() + uW.tvuid);
    if (s != null){
        opts = JSON2.parse (s);
        for (k in opts){
            if (matTypeof(opts[k]) == 'object')
                for (kk in opts[k])
                    STrChOThronePresetData[k][kk] = opts[k][kk];
            else
                STrChOThronePresetData[k] = opts[k];
        }
    }
//    for (var i in STrChOThronePresetData.previewThrone) {
//        var throne_item = uW.kocThroneItems[i];
//        if (throne_item == null || !throne_item) delete STrChOThronePresetData.previewThrone[i];
//    }
    uW.STrChOPresetNames = STrChOThronePresetData.presetNames;
}

function LOADSTrChOThroneSalvageData() {
    var s = GM_getValue('STrChOThroneSalvageData_' + getServerId() + uW.tvuid);
    if (s != null) {
        opts = JSON2.parse(s);
        for (k in opts) {
            if (matTypeof(opts[k]) == 'object')
                for (kk in opts[k])
                    STrChOThroneSalvageData[k][kk] = opts[k][kk];
            else
                STrChOThroneSalvageData[k] = opts[k];
        }
    }

    for (k in STrChOThroneSalvageData.ruleSet)
    {
        var r = STrChOThroneSalvageData.ruleSet[k];
        var rule = new ThroneRule(r.type, r.faction, r.conditions, r.advancedrule);
        for (j in rule.conditions)
        {
            rule.conditions[j].ThroneCheckCondition = ThroneCheckCondition;
        }
        STrChOThroneSalvageData.ruleSet[k] = rule;
    }
}


function LOADSTrChOThroneUpgradeData() {
    var s = GM_getValue('STrChOThroneUpgradeData_' + getServerId() + uW.tvuid);

    if (s != null) {
        opts = JSON2.parse(s);
        for (k in opts) {
            if (matTypeof(opts[k]) == 'object')
                for (kk in opts[k])
                    STrChOThroneUpgradeData[k][kk] = opts[k][kk];
            else
                STrChOThroneUpgradeData[k] = opts[k];
        }
    }
}

function LOADSTrChOThroneRepairData() {
    var s = GM_getValue('STrChOThroneRepairData_' + getServerId() + uW.tvuid);
    if (s != null) {
        opts = JSON2.parse(s);
        for (k in opts) {
            if (matTypeof(opts[k]) == 'object')
                for (kk in opts[k])
                    STrChOThroneRepairData[k][kk] = opts[k][kk];
            else
                STrChOThroneRepairData[k] = opts[k];
        }
    }
}

function LOADSTrChOThroneQueueData() {
    var s = GM_getValue('STrChOThroneQueueData_' + getServerId() + uW.tvuid);
    if (s != null) {
        opts = JSON2.parse(s);
        for (k in opts) {
            if (matTypeof(opts[k]) == 'object')
                for (kk in opts[k])
                    STrChOThroneQueueData[k][kk] = opts[k][kk];
            else
                STrChOThroneQueueData[k] = opts[k];
        }
    }
}

function LOADSTrChOChampUpgradeStats() {
    var s = GM_getValue('STrChOChampUpgradeStats_' + getServerId() + uW.tvuid);
    if (s != null) {
        opts = JSON2.parse(s);
        for (k in opts) {
            if (matTypeof(opts[k]) == 'object')
                for (kk in opts[k])
                    STrChOChampUpgradeStats[k][kk] = opts[k][kk];
            else
                STrChOChampUpgradeStats[k] = opts[k];
        }
    }
}

function LOADSTrChOChampPresetData() {
    var s = GM_getValue('STrChOChampPresetData_'+ getServerId() + uW.tvuid);
    if (s != null){
        opts = JSON2.parse (s);
        for (k in opts){
            if (matTypeof(opts[k]) == 'object')
                for (kk in opts[k])
                    STrChOChampPresetData[k][kk] = opts[k][kk];
            else
                STrChOChampPresetData[k] = opts[k];
        }
    }
}

function LOADSTrChOChampSalvageData() {
    var s = GM_getValue('STrChOChampSalvageData_' + getServerId() + uW.tvuid);
    if (s != null) {
        opts = JSON2.parse(s);
        for (k in opts) {
            if (matTypeof(opts[k]) == 'object')
                for (kk in opts[k])
                    STrChOChampSalvageData[k][kk] = opts[k][kk];
            else
                STrChOChampSalvageData[k] = opts[k];
        }
    }

    for (k in STrChOChampSalvageData.ruleSet) {
        var r = STrChOChampSalvageData.ruleSet[k];
        var rule = new ChampRule(r.type, r.faction, r.conditions, r.advancedrule);
        for (j in rule.conditions) rule.conditions[j].ChampCheckCondition = ChampCheckCondition;
        STrChOChampSalvageData.ruleSet[k] = rule;
    }
}


function LOADSTrChOChampUpgradeData() {
    var s = GM_getValue('STrChOChampUpgradeData_' + getServerId() + uW.tvuid);
    if (s != null) {
        opts = JSON2.parse(s);
        for (k in opts) {
            if (matTypeof(opts[k]) == 'object')
                for (kk in opts[k])
                    STrChOChampUpgradeData[k][kk] = opts[k][kk];
            else
                STrChOChampUpgradeData[k] = opts[k];
        }
    }
}

function LOADSTrChOChampRepairData() {
    var s = GM_getValue('STrChOChampRepairData_' + getServerId() + uW.tvuid);
    if (s != null) {
        opts = JSON2.parse(s);
        for (k in opts) {
            if (matTypeof(opts[k]) == 'object')
                for (kk in opts[k])
                    STrChOChampRepairData[k][kk] = opts[k][kk];
            else
                STrChOChampRepairData[k] = opts[k];
        }
    }
}

function LOADSTrChOChampQueueData() {
    var s = GM_getValue('STrChOChampQueueData_' + getServerId() + uW.tvuid);
    if (s != null) {
        opts = JSON2.parse(s);
        for (k in opts) {
            if (matTypeof(opts[k]) == 'object')
                for (kk in opts[k])
                    STrChOChampQueueData[k][kk] = opts[k][kk];
            else
                STrChOChampQueueData[k] = opts[k];
        }
    }
}

function LOADSTrChOThroneSorter() {
    var s = GM_getValue('STrChOThroneSorter_' + getServerId() + uW.tvuid);
    if (s != null) {
        opts = JSON2.parse(s);
        for (k in opts) {
            if (matTypeof(opts[k]) == 'object')
                for (kk in opts[k])
                    STrChOThroneSorter[k][kk] = opts[k][kk];
            else
                STrChOThroneSorter[k] = opts[k];
        }
    }
}

function LOADallData() {
    LOADSTrChOChampPresetData();
    LOADSTrChOChampQueueData();
    LOADSTrChOChampRepairData();
    LOADSTrChOChampSalvageData();
    LOADSTrChOChampUpgradeData();
    LOADSTrChOChampUpgradeStats();
    LOADSTrChOGeneralOptions();
    LOADSTrChOGlobalOptions();
    LOADSTrChOLogData();
    LOADSTrChOThronePresetData();
    LOADSTrChOThroneQueueData();
    LOADSTrChOThroneRepairData();
    LOADSTrChOThroneSalvageData();
    LOADSTrChOThroneUpgradeData();
    LOADSTrChOThroneUpgradeStats();
    LOADSTrChOThroneSorter();
}

function SAVEallData() {
    SAVESTrChOChampPresetData();
    SAVESTrChOChampQueueData();
    SAVESTrChOChampRepairData();
    SAVESTrChOChampSalvageData();
    SAVESTrChOChampUpgradeData();
    SAVESTrChOChampUpgradeStats();
    SAVESTrChOGeneralOptions();
    SAVESTrChOGlobalOptions();
    SAVESTrChOLogData();
    SAVESTrChOThronePresetData();
    SAVESTrChOThroneQueueData();
    SAVESTrChOThroneRepairData();
    SAVESTrChOThroneSalvageData();
    SAVESTrChOThroneUpgradeData();
    SAVESTrChOThroneUpgradeStats();
    SAVESTrChOThroneSorter();
}

function SaveSettingsToFile(objSettings) {
    var uriContent = 'data:application/octet-stream,' + encodeURIComponent(JSON2.stringify(objSettings));
    var newWindow = window.open(uriContent, 'file.txt');
}

function LoadSettingsFromFile(objSettings, objTab) {
    var fileInput = document.getElementById("STrChOSettingsFile");
    var files = fileInput.files;
    if (files.length == 0) {
        alert('Failed To Select A File');
        return;
    }
    var file = files[0];

    var reader = new FileReader();

    reader.onload = function (e) {
        var output = e.target.result;
        if (output != null) {
            opts = JSON2.parse(output);
            for (k in opts) {
                if (matTypeof(opts[k]) == 'object') {
                    for (kk in opts[k]) objSettings[k][kk] = opts[k][kk];
                } else {
                    objSettings[k] = opts[k];
                }
            }
            SAVEallData();
            objTab.show();
        }
    };

    reader.readAsText(file);
}

function SuccessLog(msg) {
    var t = Tabs.STrChOLog;
    msg = msg.replace(',', '\,');
    t.addLogEntry(logValues.SUCCESS, msg);
    t.show();
}

function ActionLog(msg) {
    var t = Tabs.STrChOLog;
    msg = msg.replace(',', '\,');
    t.addLogEntry(logValues.ACTION, msg);
    t.show();
}

function SalvageLog(msg) {
    var t = Tabs.STrChOLog;
    msg = msg.replace(',', '\,');
    t.addLogEntry(logValues.SALVAGE, msg);
    t.show();
}

if (document.location.toString().match('src/main_src.php')) ScriptStartup();