TR

Throne Room Tab

目前為 2020-04-02 提交的版本,檢視 最新版本

此腳本不應該直接安裝,它是一個供其他腳本使用的函式庫。欲使用本函式庫,請在腳本 metadata 寫上: // @require https://update.cn-greasyfork.org/scripts/399271/787106/TR.js

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

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

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

/**************************** Throne Tab ****************************************/
// @tabversion 20200106

Tabs.Throne = {
	MinVersion: '3.38',
	tabOrder: 1900,
	tabLabel: 'Throne',
	tabColor : 'orange',
	activepanel: '',
	myDiv: null,
	ThroneTemplates: null,
	JewelCaps: null,
	MaxRows: 0,
	MaxPresets: 30,
	THRONE_DELAY: 5,
	LoopCounter: 0,
	upgradeProfit : true,
	UpgradeTimer: null,
	RepairTimer: null,
	SalvageTimer: null,
	JewelTimer: null,
	autoupgradedelay : 0,
	autorepairdelay : 0,
	autosalvagedelay : 0,
	autojeweldelay : 0,
	intervalRepairSecs : 3,
	intervalSalvageSecs : 6,
	intervalSalvageLoopSecs : 20,
	intervalJewelSecs : 6,
	intervalJewelLoopSecs : 20,
	loopupgradeaction : false,
	looprepairaction : false,
	loopsalvageaction : false,
	loopjewelaction : false,
	JewelInventoryList: {},
	JewelEffects: [],
	JewelQuality: [],
	TotalJewels: 0,
	logarealist : {GENERAL:'GENERAL',SUCCESS:'SUCCESS',REPAIR:'REPAIR',SALVAGE:'SALVAGE'},
	logfilter: 'GENERAL',
	logEntries: 100,
	SuccessLog : [],
	RepairLog : [],
	SalvageLog : [],
	EventLog : [],
	JewelImages : {
		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"
	},
	Tick	: "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",
	Button	: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAK8AAACvABQqw0mAAAAB90RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgOLVo0ngAAAQxSURBVFiF7ZZdbFNlGMd/pz09Pf1ut+4rdGVM1mZswJwEJAESQ0zkXsiqESXxyo8bFuKF8QqJ0Zh4IV6oFzJvRuJmJhDChYnTBAJEsyVmmE1gcFhbWkrH6NqefuwcL/oSZvzYChpu9iT/PO95nyfv/5ec85xzJNM0eZJheaLuawBrAGsAgLzaxomJiV6fz/ei0+HcpyhKFxJypVzRinrxh3w+/01PT89PjwIgrfQiGv9xPBTp6nrH6/LFisVioxbXSKXTADQ0BOgIdeByucoFvXAmnoh/2N/ff/k/A5icnNgbWtd+olqqhkbOjnLu8jnuLc1TVZeQLCBXZAKWALt6dzGwbwCP31NJppKHN23adPyxASYnJ/e2trad1a7fVI4cP8LPhV9wR9yozXZM1cTAQK7IFDM6+g2dqBTh2KvH6NvSRzqTPtzT0/PJIwOcP3++bX14/YR2Q2uJHY2h+TUsmy0YjQY4AZXa41sCCiDNS5jTJs3pZobeHmJr71biqfhz257ZNr4SwN9OQTAYfLeY01sGPx1Ec2vQB8YGAzqBCLAReAroqmVzgwm9kG5KM/j1IJk7d/F5fR+cPHlSqRvg0qVL3YpVefnbc6NczFyELUAYWAe0Aa1CLSK3iVoY6IYrhSsMfz+M1bQ+G+mKvFI3gM1mi92/d98/emEUOoRREGgEAoAP8IrsA/yiFhS9YTj96ynuZrMg8VbdAJi8oM1pzCzMQJMw8wIuHt5/FbCL7BQ1t+hrgqv5q8RTcxhLRl/dAOVyeWM8EacgF2qH2wFlWbYBViFZXD+o2wEHlGwlEpkEekFfyf+vALquy7qugyQ2JP68Xh7SMlkeri0WC6VyicX8Yv0AlWrllkN14MJVG7MyUFmmJcAATKAqVBF9ZaAEclXGq3qpVCv1AxiGMe5xeWi3t0MWWBQqALpQaZl0UVsEckAWwo4wLpsLE/NW3QAOh2PYrtorO8I7IAncAe4C88CCMHkAlRN78zVjMkAcdod2I0kSNpvty7oB9uzZc8G0mmf6N/bTLXfDTO1QksBtIC2g7oj1bVFLAL9Dh9zB9vbtLLF0LRqNflE3AGA0NTcddbqd1QObD9CSbYEp4DowC9wANKGbYm8WmILGTCOHNh9ClmTcHvf7nZ2dqZUA/vFjNPbd2BvJueRn8WScU9dOMSVPYQvZkAISurU2XoqhYMlZ0Od0okaU/V37aXW30tDcMBSLxV5byfxfAQBGRkYGU8nUxwv3FpjOTDNbmiVrzaJ47LVRWyzhNTxEXBGigSgOxUEgGBg6ePDg69Tm4/EAAE6fOf18Yi7xXiFX2J0v5EGGYrUIEjhsTqyGBUVWUF3qbw3Bho9iA7ETqzFeNYAIx9jY2Evz2fk3c7nc08V8EcM0UFUVt9et+f3+z3fu3PlVKBRK1mNeD8D/Fk/8r3gN4A/o86RnMMwtFQAAAABJRU5ErkJggg==",
	Hammer	: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAbvAAAG7wBureguwAAAB90RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgOLVo0ngAAAAPdEVYdFdyaXRlcgBTdXBlclBOR8XEr90AAAAYdEVYdEZpbGUgTmFtZQBUUjJfaGFtbWVyLnBuZ9ktavUAAAVaSURBVFiF7Zd/UFRVFMe/9y27y/4AIlxYwNjQRh1g0pJKjWkUcNUBETRDRRrNIkvDxB+j2JjVOOjkrxpRtMgfkIkpmI5jLgsaUSoCi4ogyU9RBPnVKvt22bdvb3+4YwgrrsqM/3hm3syb+8655zP3fc899xJKKZ6lMc80+3MAAE6OOBFCiM1X7u7u5h4ZMdFn6BCVOwABazR2Hfglp/7GjVstAAyUUuvjAJBHiZAQIgAg8/PzVS5MiH8taenH8dU1DYNvt3ZIARCxWNz9atCw6rj4RZuOHddUANBTSvkBASCEMABc4+e+O3LH9pTlZ8/rgvJOn1MWl5Y7m80cCCGwWq1Qh47tWp70oW5x4pp1P+05WALgDnWwvB4KYFt2afDokQEFZ7I3bvl+75uncgtlPX0YhgHb1YXOjg5ETQ1n1yR/phkXMnVZVVVNg6Or0J8IhQqFh++GlOT3Mg4cC+6dHAAopeAsHAhDUHap0onneYlYJHJIV/0CEEJEALz27dkW1dqmn/PzweMu9vysVis4CwdQiphpkzrPnPn75KXLlXoADguxDwAhxAOA/285e2YQRvhR+r4jCnu/iRACnudh4Tg4S5wxdszrHSd/zy/HvUpweHvtA6DVZEVSy83tL7i7J32XmuHf3W0W9vaxWq1wchKC5y0wm8xQeimor6+X/uLFilYA3Y4mB+zsA2GhIdGhk+eNk7u6SZylcmIwsA9853keEokEchcXVNfWoq2tE/M/mHNnkMeLNVerqjsAOFyCdgEASECIiBBC2ltvP5jcYoFUJodU7oLKinKMU8kQEPMOklcktE+JnJvJssa7j7sR2ROhycJxFpORhYfC8/6gxWKB3MUVErkcutJiTFEJ4CXi0V5eBLajWRQZET4YgIwQ8nRVkJdfeKpAm9loZFnOZDTCQ+EJnufhpVTCw9MTVy5dxPTh/1dkWPBQ6HIyFAviohalrF8dAmDQ40D0AQhXx57Iyy/cVaDNbGANXZyJNSAgMBCubm4oLSmBxPlBTVopRWfTdXFp9r4RiQmzV2/dvG4CAAUhpI94HQIA0Byujv01L78w7Y/cjAaDwcA11teh+to1MOC5rZvW6tcfPKIHwPUM6mysdb5waPeIBbMjV+3auVENwNMRiD4AlFJzT4gCbWY9a+o2CRjGVFGmqWcI0s4V6dK+/jG9AQB3uqT2XiAh0Dc1Ohcf+mH4DPWYlYcP7Y4RiYR+hBC5raHZtf56gQiAUqvJiggLDZkE3NNHuDpWAwBaTVZ0gFK6cOPKZBUA4YTRQ+7HiqRyc6A6pvmlUW+VzIxduOVI9omHdslHdUMRABcAEtuQEcBd27tSq8maoxIbE7enbPYGgJ4QhBCqGv1214iwqLJlq1LWp+7YWwzg394QjzwP9AMn9vHx8m+sK/r2iiZnfHpqurwnAAAIBAwGvRLEjop+vyzh09VfZGQeLqWU6nv6PM2RzNzU1HJzckR8SuDEaF1c/Az2vh5syRlqxbm8PGl22o6Rqdu+WhYQMMy79yRPDGBrOIZcbcHVxZ+v3RConl4NmyidBAxAeVy7fhsNLXdRcjpf1lBZ4RcTPdl3wABsEFYA+p1p+3VndZX7k775sg0AcouqUVlzC3UtXWAIAx9//24vP7+28+d17QMKYIPgAbTPjE047hsUfGHW/Ll33GVierPNBAHDwFul6p61ZGlV1tHc3dq8P2/Ym+CpHwAEgHySevwbVnNj1uW/sv/JSElkMzcuMTTXnb2wM3VDHABvAMI+sQMBYINgAMhEIuHLK5Z/Ms3QefWoobMye/682HAAnvaSU0qfvAwHyp75zeg5wH/MzdvLITf70gAAAABJRU5ErkJggg==",
	Fail	: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAcIAAAHCABzQ+bngAAAB90RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgOLVo0ngAAASySURBVFiF7ZZZbJRVGIaf88+UmU7L0NLFloKyFNBCsYGmlJaALF4IRgmRJaEiuBBiDIhRMDExXACJgXChRgPiAokElURIDCl7wZSySICEtFilDAJ2o4udmc60M/+8XlCNkeK0XMgNX3LyX5yT8z15v/N9/2sk8SDDeqDZHwI8BHgIADj7etCA6/iuV5/y+hpWeWPBaY5YjA65TnRkpX/01otbK855s7ruB8D0ZRD9/MHM5SOvNC1NuNpaqNuh5FBnRBhwexKMlZEYYEzqT7dGZ+zKeafiy34TSLrnqlj8XHbbgvHlmpSmC25La0FTQU+AngTNBr0HuuyxpJJ0NT87uvzb4knZ/3Xnv9c9N3ZMKhzakZlW057o1OsgFygJo3zL0kzQ06BC0DDQUNB6UMSToJbBg6o/zM3N6StAryUwtRetaxOnHnEGgzOWACeB6cCsIUNw+f0E/X5iQCegnm8NMAHYbOCqy31s/LbNs7X0jfj17Y2q3JO4vM4YvQAyoPdLSuTbs0cte/fqwJQp2gLaBjpcUKBr69erYcsWHSuerNmgdaA6Y7TdNWDZfZUgz+t1HTKmcjtoEGiOM0Ff5+cr7PNJkvxnzuhkaqqqc3NlX74sSQrW1GhTdpaeB40AfQ86bFmVZGa64gHcNQeeCYdnhKSCfUAGUDLIS1J9PWfmzSPS1kpyURFT165l7IrXsMaNo7uxkW/mzuVSfQMG8AKnAa9U8LLfPyNeBe4CkG2v8YHnKpBjDKldXXiCQQbXVBPavfvOG1m5EuulZSgWo3LNaprq6vBYFjaQBlwHIpLn0Wh0Tb8B2qUZvwIdPe8jGgiQHA4zZtYskuvrif5SSywlBTszk6adO7H37Sc5M4MuoIs7k60FCAHpsVj/FWgEEwC6gfYeEMvhgGgUq7mJSCRKVzgMkQgpo0aSkpJKUyBIwBhSvV6iDgd+IAB0S6bfAM1SRSfgBsKAH2izbc4dPoK/YCLOvDx+//QTWioqcE2bjvvN1Vzt7GRU5iOMHTyYVglnjxp1UsX9KLA1CTpHAFHgNlAucWFyMQllS7BOV1G1YSNHN26A366TV1bGvEWLKPUOpDEY5EYsRhbQDJ3HjdkaD+DuvnTgXghV63omXBFoQXqa6k9VSlWntH/xIpWBFoLOv7tOam6WQiF9UVSkkT2tuwm0CqqwLHe8Nrzrb6iowrnG7BgLxcXAAWB+aSn+S5fwXbxAZflBhrkGMHaAixuHDmGlpKKcHOqHD6fu7FnmAzHgJOyQbYfjCdD7KDbGmmY4ttrpnP6DxLGozQggF3jc7WaYy4WV4KQ2anOmvZ3L3Gm9mQ4H84xhj22f+FGaKSkWD6BXPyApZowpy7DtoytyM8ZkOGy+q2khAjSFw3SFwwSAVuAmIIfh7dLhjLsZ4ONrt2vPSmV9SX5PBf6hRE6hy/pq+WMDZ6eMSKLaePFdaaehvQNbUTwDLEaO8jIhK5Fgm8VnZ28dqQ51L5N0qy/J4wL8FUnGvDIt1bk0v3D0pNEZQ5MSW+uJ2m2EIjZNbd3B077A+fI/undJ+ryvif+OPhsHSATmDISDoyCSDZE0OAjMARL7Y0Li+oH/Mx64K34I8CeySkjFt1kdMAAAAABJRU5ErkJggg==",
	SelectedItem : 0,
	NextLevel : 0,
	ProspectorTokens : {},
	FortuneTokens : {},
	OpportunityTokens : {},
	PreviewCardScale : 0.85,
	PreviewPreset : 0,
	PreviewCards : {},
	InitialCards : {},
	PopCards : {},
	popThrone:null,
	popuppos:{x: -999, y: -999},
	NextPresetNumber : 100,
	UnequipQueue : [],
	EquipQueue : [],
	ErrorQueue : [],
	PresetNameChanged : false,
	PresetTargetChanged : false,
	PresetTimer : null,
	PresetBusy : false,
	ThroneEffects : [],
	SearchResults : [],
	TotalRules: 0,
	EditRuleNumber : -1,
	SalvageItems : [],
	SalvageStatus : '',
	JewelSalvageStatus : '',
	UpgradeStatus : '',
	UpgradeReturnStatus : '',
	RepairStatus : '',
	serverwait : false,
	SpeedupItemList : [1, 2, 3, 4, 5, 6, 7, 8],
	SpeedupItemTrans : ["SH","KH","GH","MH","AH","RH","DH","EH"],
	Squire:0,
	Knight:0,
	Guinevere:0,
	Morgana:0,
	Arthur:0,
	Merlin:0,
	Divine:0,
	Epic:0,
	LessProtection:0,
	Protection:0,
	LessMystic:0,
	Mystic:0,
	LessLucky:0,
	Lucky:0,
	SuperLucky:0,
	Apprentice:0,
	EnhanceItemList : [20001,20002,20003,20004],
	EnhanceItemTrans : ["ELPS","EPS","ELMO","EMO"],
	UpgradeItemList : [20001,20002,20005,20006,20019,20022],
	UpgradeItemTrans : ["ULPS","UPS","ULLT","ULT","USLT","UAT"],
	Orbs : {"20007":1,"20008":2,"20009":3,"20010":4,"20011":5,"21003":6},
	GemUseTripSwitch:false,
	UpgradeQueueIndex:0,
	BreakInProgress:false,
	BreakQueue:[],
	BreakMight:0,
	BreakTotal:0,
	BreakCounter:0,
	AdvancedStatsGrid : {
	"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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146: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,145:0,146:0}},
	},

	Options: {
		DraggableThroneItems : true,
		ShowJewelIcons : true,
		JewelSortColNum : 1,
		JewelSortDir : 1,
		Stats : {
			EnhanceSuccess : {0:{}, 1:{}, 2:{}, 3:{}, 4:{}, 5:{}, 6:{}},
			EnhanceFail : {0:{}, 1:{}, 2:{}, 3:{}, 4:{}, 5:{}, 6:{}},
			UpgradeSuccess : {0:{}, 1:{}, 2:{}, 3:{}, 4:{}, 5:{}, 6:{}},
			UpgradeFail : {0:{}, 1:{}, 2:{}, 3:{}, 4:{}, 5:{}, 6:{}},
		},
		JewelTarget : {},
		JewelSalvageRunning : false,
		JewelSalvageItem : 0,
		NumJewelSalvaged : 0,
		AetherJewelSalvaged : 0,
		JewelSalvageStartDate : 0,
		DefaultNextToken : false,
		safetyOn: true,
		safetyLimit: 50000,
		buffsOff: true,
		removeMastersTokens: false,
		removeOtherTokens: false,
		NoEquippedSalvage: true,
		NoMassSalvage: true,
		SalvageSafety: false,
		SalvageSafetyNum: 100,
		SalvageRunning : false,
		UpgradeRunning : false,
		RepairRunning : false,
		LocalPresets : {},
		ToggleButton : true,
		SalvageRuleSet : [{"type":"any","faction":"any","conditions":[{"mustHave":"true","number":"2","effect":"5","buffType":"e","slots":[true,true,true,true,true]}]},{"type":"any","faction":"any","conditions":[{"mustHave":"true","number":"2","effect":"77","buffType":"e","slots":[true,true,true,true,true]}]},{"type":"banner","faction":"any","conditions":[{"mustHave":"true","number":"2","effect":"58","buffType":"e","slots":[true,true,true,true,true]}]}],
		SalvageKeepFirst : 40,
		SalvageMaxQuality : 3,
		SalvageUpgradeFirst : false,
		SalvageUpgradeFirstMaxQuality : 2,
		SalvageCityNum : 0,
		SalvageMaxAether : 2000000,
		SalvageAnyCity : true,
		SalvageOverflow : "order",
		SalvageQueue : [],
		NumSalvaged : 0,
		AetherSalvaged : 0,
		SalvageStartDate : 0,
		SalvageSortColNum : 0,
		SalvageSortDir : 1,
		UpgradeCityNum : 0,
		UpgradeMinAether : 50000,
		UpgradeAnyCity : true,
		UpgradeOverflow : "order",
		UseEH: false,
		UseDH: false,
		UseRH: false,
		UseAH: false,
		UseMH: false,
		UseGH: false,
		UseKH: false,
		UseSH: false,
		UseOverride: false,
		OverrideSpeedup: 0,
		OverrideHours: 0,
		OverrideMinutes: 1,
		UpgradeOneItem: false,
		UpgradeOneMax: false,
		UpgradeOneMaxAttempts: 100,
		UpgradeInterval: 10,
		WhisperToMe: false,
		SendToInbox: true,
		RepairSpeedupMinQuality : 0,
		RepairSpeedupMinLevel : 1,
		UseELPS: false,
		UseEPS: false,
		UseELMO: false,
		UseEMO: false,
		UseULPS: false,
		UseUPS: false,
		UseULLT: false,
		UseULT: false,
		UseUSLT: false,
		UseUAT: false,
		EnhanceBoostMinQuality : 0,
		EnhanceUseMasters : false,
		EnhanceUseMastersMin : 0,
		EnhanceUseMastersMax : 6,
		EnhanceBoostLevelOnly : true,
		EnhanceNoBoosts : false,
		UpgradeBoostMinLevel : 3,
		UpgradeUseMasters : false,
		UpgradeUseMastersMin : 3,
		UpgradeUseMastersMax : 35,
		UpgradeUseProspector : false,
		UpgradeUseProspectorMin : 19,
		UpgradeUseProspectorMax : 35,
		UpgradeUseOpportunity : false,
		UpgradeUseOpportunityMin : 19,
		UpgradeUseOpportunityMax : 35,
		UpgradeUseFortune : false,
		UpgradeUseFortuneMin : 19,
		UpgradeUseFortuneMax : 35,
		UpgradeBoostLevelOnly : true,
		UpgradeNoBoosts : false,
		UpgradeDefaultQuality : 6,
		UpgradeDefaultLevel : 35,
		DoubleCheckSalvage : [],
		ChatPostShowMight : true,
		UpgradeQueue : [],
		RepairQueue : [],
		SalvageUpgradeAuto : false,
		BreakIgnorePreset : true,
		BreakMaxMight : 0,
		BreakMinLevel : 0,
		BreakMaxLevel : 35,
		BreakRepairAuto : true,
		SearchMenu : false,
	},

	init: function(div){
		var t = Tabs.Throne;
		t.myDiv = div;

		if (uW.isNewServer()) {
			if (GlobalOptions.btPowerBar) {
				var elem = ById("bttcThrone");
				elem.setAttribute("style","display:none");
			}
			return;
		}
		
		if (parseFloat(Version) < parseFloat(t.MinVersion)) {
			div.innerHTML = '<center>'+tx('Minimum script version for Throne tab is '+t.MinVersion)+'</center>';
			actionLog('Minimum script version for Throne tab is '+t.MinVersion,'THRONE');
			return;
		}

		if (!Options.ThroneOptions) {
			Options.ThroneOptions = t.Options;
		}
		else {
			for (var y in t.Options) {
				if (!Options.ThroneOptions.hasOwnProperty(y)) {
					Options.ThroneOptions[y] = t.Options[y];
				}
			}
		}

		// check cities still exist

		if (Options.ThroneOptions.SalvageCityNum > Seed.cities.length-1 ) { Options.ThroneOptions.SalvageCityNum = 0; }
		if (Options.ThroneOptions.UpgradeCityNum > Seed.cities.length-1 ) { Options.ThroneOptions.UpgradeCityNum = 0; }

		// modify loaded rules to include functions

		var RuleLength = Options.ThroneOptions.SalvageRuleSet.length;
		for (var k=0;k<RuleLength;k++) {
			var r = Options.ThroneOptions.SalvageRuleSet[k];
			var rule = new t.ThroneRule(r.type, r.faction, r.conditions, r.advancedrule);
			for (var j in rule.conditions) {
				rule.conditions[j].ThroneCheckCondition = t.ThroneCheckCondition;
			}
			Options.ThroneOptions.SalvageRuleSet[k] = rule;
		}

		// check if any throne items were meant to be salvaged, but upgraded first!

		for (var k=0;k<Options.ThroneOptions.DoubleCheckSalvage.length;k++) {
			var trId = Options.ThroneOptions.DoubleCheckSalvage[k];
			if (uW.kocThroneItems[trId]) {
				t.SalvageItems.push(trId);
			}
		}
		Options.ThroneOptions.DoubleCheckSalvage = [];

		if (Options.ThroneOptions.ToggleButton) {
			AddMainTabLink(tx('THRONE'), 'PBPThroneButton', function () { ById('bttcThrone').click(); });
		}

		t.ThroneTemplates = CM.FETemplates.Throne;

		for (var J=0;J<=4;J++) {
			t.JewelQuality.push(uW.g_js_strings.jewel["quality_"+J]);
		}

		if (CM.WorldSettings.hasSetting("JEWEL_MAX_CAPACITY")) {
			t.JewelCaps = CM.WorldSettings.getSettingAsObject("JEWEL_MAX_CAPACITY");
		}

		t.OtherTokens = CM.WorldSettings.getSettingAsObject("TR_MINI_MASTER_TOKEN_SUCCESS_RATE");
		for (var tid in t.OtherTokens) {
			var lvl = parseIntNan(uW.itemlist['i'+tid].name.match(/(\d+)/)[0]||"0");
			if (t.OtherTokens[tid].Percentage=="25") {
				t.ProspectorTokens[tid] = lvl;
			}
			if (t.OtherTokens[tid].Percentage=="10") {
				t.OpportunityTokens[tid] = lvl;
			}
			if (t.OtherTokens[tid].Percentage=="5") {
				t.FortuneTokens[tid] = lvl;
			}
		}

		t.MaxRows = CM.WorldSettings.getSetting("TR_MAX_INVENTORY_ROWS");
		var p = t.MaxPresets;
		var pallow = true;
		while (pallow) {
			p++;
			pallow = false;
			if (CM.WorldSettings.getSetting('TR_PRESET_COST_'+p)) {
				t.MaxPresets = p;
				pallow = true;
			}
		}
		
		t.ThroneEffects = [];
		for (var efx in CM.thronestats.tiers) {
			if (t.ThroneEffects.indexOf(efx) < 0) t.ThroneEffects.push(efx);
		}
		t.ThroneEffects.sort(function(a,b){ var aa = CM.ThroneController.getEffectName(uWCloneInto(a)); var bb = CM.ThroneController.getEffectName(uWCloneInto(b)); if (aa<bb) return -1; if (aa>bb) return 1; return 0; });

		// 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"]);

		// load logs

		var a = JSON2.parse(GM_getValue ('ThroneSuccessLog_'+getServerId()+'_'+uW.tvuid, '[]'));
		if (matTypeof(a) == 'array'){
			t.SuccessLog = a;
		}
		var a = JSON2.parse(GM_getValue ('ThroneRepairLog_'+getServerId()+'_'+uW.tvuid, '[]'));
		if (matTypeof(a) == 'array'){
			t.RepairLog = a;
		}
		var a = JSON2.parse(GM_getValue ('ThroneSalvageLog_'+getServerId()+'_'+uW.tvuid, '[]'));
		if (matTypeof(a) == 'array'){
			t.SalvageLog = a;
		}
		var a = JSON2.parse(GM_getValue ('ThroneEventLog_'+getServerId()+'_'+uW.tvuid, '[]'));
		if (matTypeof(a) == 'array'){
			t.EventLog = a;
		}

		uWExportFunction('btPostCurrentPreset', function () {
			if (Tabs.Monitor.ThroneUID==0) {
				Tabs.Throne.PostThroneSlot(Seed.throne.activeSlot);
			}
			else {
				Tabs.Throne.FetchThroneRoom(Tabs.Monitor.ThroneUID,Tabs.Monitor.ThroneName,Tabs.Throne.PostPopSlot);
			}
		});

		uWExportFunction('btFetchThroneRoom', function() {
			if (Tabs.Monitor.ThroneUID==0) { Tabs.Throne.FetchThroneRoom(uW.tvuid,'',Tabs.Throne.ViewThroneCards); }
			else { Tabs.Throne.FetchThroneRoom(Tabs.Monitor.ThroneUID,Tabs.Monitor.ThroneName,Tabs.Throne.ViewThroneCards); }
		});

		uWExportFunction('btJewelClickSort', Tabs.Throne.JewelClickSort);
		uWExportFunction('btthroneSelectAllJewelEffect', Tabs.Throne.SelectAllJewelEffect);
		uWExportFunction('btthroneSelectNoneJewelEffect', Tabs.Throne.SelectNoneJewelEffect);
		uWExportFunction('btthroneSelectAllJewelQuality', Tabs.Throne.SelectAllJewelQuality);
		uWExportFunction('btthroneSelectNoneJewelQuality', Tabs.Throne.SelectNoneJewelQuality);

		uWExportFunction('btthroneSelectAllSearchEffect', Tabs.Throne.SelectAllSearchEffect);
		uWExportFunction('btthroneSelectNoneSearchEffect', Tabs.Throne.SelectNoneSearchEffect);
		uWExportFunction('btthroneSelectAllSearchType', Tabs.Throne.SelectAllSearchType);
		uWExportFunction('btthroneSelectNoneSearchType', Tabs.Throne.SelectNoneSearchType);
		uWExportFunction('btthroneSelectAllSearchQuality', Tabs.Throne.SelectAllSearchQuality);
		uWExportFunction('btthroneSelectNoneSearchQuality', Tabs.Throne.SelectNoneSearchQuality);
		uWExportFunction('btthroneSelectAllSearchLevel', Tabs.Throne.SelectAllSearchLevel);
		uWExportFunction('btthroneSelectNoneSearchLevel', Tabs.Throne.SelectNoneSearchLevel);
		uWExportFunction('btthroneSelectAllSearchJewel', Tabs.Throne.SelectAllSearchJewel);
		uWExportFunction('btthroneSelectNoneSearchJewel', Tabs.Throne.SelectNoneSearchJewel);
		uWExportFunction('btthroneSelectAllSearchFaction', Tabs.Throne.SelectAllSearchFaction);
		uWExportFunction('btthroneSelectNoneSearchFaction', Tabs.Throne.SelectNoneSearchFaction);

		uWExportFunction('btSalvageClickSort', Tabs.Throne.SalvageClickSort);
		uWExportFunction ('btthroneSalvageEditRule', Tabs.Throne.SalvageEditRule);
		uWExportFunction ('btthroneSalvageDeleteRule', Tabs.Throne.SalvageDeleteRule);

		uWExportFunction('btthronepaintTags', Tabs.Throne.paintTags);
		uWExportFunction('btthroneModifyEvents', Tabs.Throne.ModifyEvents);
		uWExportFunction('btthronerepairSpeedup',Tabs.Throne.SpeedupRepair);
		uWExportFunction('cancelRepair', Tabs.Throne.CancelRepair);
		uWExportFunction('clickNextThroneLevel', Tabs.Throne.showNextThroneLevel);

		uWExportFunction('btThroneQueueUp', Tabs.Throne.ThroneQueueUp);
		uWExportFunction('btThroneQueueDn', Tabs.Throne.ThroneQueueDn);
		uWExportFunction('btThroneQueueMaxChange', Tabs.Throne.ThroneQueueMaxChange);
		uWExportFunction('btThroneQueueDeleteAll', Tabs.Throne.deleteThroneQueueAll);
		uWExportFunction('btThroneQueueDelete', Tabs.Throne.deleteThroneQueue);

		uWExportFunction('btThroneRepairQueueUp', Tabs.Throne.ThroneRepairQueueUp);
		uWExportFunction('btThroneRepairQueueDn', Tabs.Throne.ThroneRepairQueueDn);
		uWExportFunction('btThroneRepairQueueDeleteAll', Tabs.Throne.deleteThroneRepairQueueAll);
		uWExportFunction('btThroneRepairQueueDelete', Tabs.Throne.deleteThroneRepairQueue);

		var trfix = new CalterUwFunc("cm.ThroneController.setPreset",[['clickActivePreset(ai)','clickActivePreset(ai);btthronepaintTags();btthroneModifyEvents();']]);
		trfix.setEnable(true);

		// throne room display hooks

		t.ThroneTemplates.mainThrone = t.ThroneTemplates.mainThrone.replace(
			'<ul id="throneStatDisplay"></ul>',
			'<div id=btthroneposttochat><table class=xtab width=100%><tr><td align=center>'+strButton8(tx('Post to Chat'),'onclick="btPostCurrentPreset()"')+'</td><td align=center>'+strButton8(tx('Show Cards'),'onclick="btFetchThroneRoom()"')+'</td></tr></table></div><ul id="throneStatDisplay"></ul>'
		);

		t.ThroneTemplates.thronePanel = t.ThroneTemplates.thronePanel.replace(
			'<div id="nextStatContainer" class="nextStat">',
			'<div id="nextStatContainer" class="nextStat" onclick="clickNextThroneLevel()">'
		);

		var oldSearchKeyPress = CM.ThroneView.searchKeyPress;
		var newSearchKeyPress = function(event) {
			oldSearchKeyPress(event);
			t.paintTags();
		}

		if (typeof exportFunction == 'function') { exportFunction(newSearchKeyPress,uW.cm.ThroneView, {defineAs:"searchKeyPress"}); }
		else { uW.cm.ThroneView.searchKeyPress = newSearchKeyPress; };
		
		var oldRenderInventory = CM.ThroneView.renderInventory;
		var newRenderInventory = function(l) {
			oldRenderInventory(l);
			t.paintTags();
		}
		if (typeof exportFunction == 'function') { exportFunction(newRenderInventory,uW.cm.ThroneView, {defineAs:"renderInventory"}); }
		else { uW.cm.ThroneView.renderInventory = newRenderInventory; };

		var oldOpenThrone = CM.ThroneView.openThrone;
		var newOpenThrone = function (F) {
			oldOpenThrone(F);

			t.paintTags();
			t.ModifyEvents();

			// expand the throne inventory and stats lists
			var h = ById('throneMainContainer').clientHeight;
			var el1 = ById('throneStatList');
			if (el1) { h=h-el1.clientHeight; }
			var el2 = ById('throneSearchTerm');
			if (el2) { h=h-el2.clientHeight; }
			jQuery("ul#throneInventoryList").css('height', h+'px');
			jQuery("div#throneInventoryContainer").css('height', h+'px');
			jQuery("ul#throneStatDisplay").css('height', (h-18)+'px');
			jQuery("div#throneStatContainer").css('height', h+'px');
			jQuery("div#throneStatContainer").css('background', '#DCD4B2');
			jQuery("div#throneStatContainer").css('padding-top', '0px');
		}
		if (typeof exportFunction == 'function') { exportFunction(newOpenThrone,uW.cm.ThroneView, {defineAs:"openThrone"}); }
		else { uW.cm.ThroneView.openThrone = newOpenThrone; };

		var oldBoostsTooltip = CM.ThroneView.boostsTooltip;
		var newBoostsTooltip = 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>" + uW.g_js_strings.commonstr.throneroom + "</b><br/>");
			J.push("<b><i>(" + (Options.DashboardOptions.TRPresets[slot]?Options.DashboardOptions.TRPresets[slot].name:'Preset '+slot) + ")</i></b>");
			J.push("<br/><br/>");

			if (Seed.throne.slotEquip[slot].length > 0) {
				J.push(t.GeneratePresetStats(slot, true));
			} else {
				J.push("<div>" + uW.g_js_strings.throneRoom.empty_preset + "</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)
			}
		}
		if (typeof exportFunction == 'function') { exportFunction(newBoostsTooltip,uW.cm.ThroneView, {defineAs:"boostsTooltip"}); }
		else { uW.cm.ThroneView.boostsTooltip = newBoostsTooltip; };

		//fixes the issue with adding/removing jewels and having it get stuck with the spinny
		var oldAddJewel = CM.ThroneController.addJewel;
		var newAddJewel = function (aj, ai) {
			oldAddJewel(aj, ai);
			CM.ThronePanelView.removeSpinny();
		}
		if (typeof exportFunction == 'function') { exportFunction(newAddJewel,uW.cm.ThroneController, {defineAs:"addJewel"}); }
		else { uW.cm.ThroneController.addJewel = newAddJewel; };

		var oldRemoveJewel = CM.ThroneController.removeJewel;
		var newRemoveJewel = function (ak, ai) {
			oldRemoveJewel(ak, ai);
			CM.ThronePanelView.removeSpinny();
		}
		if (typeof exportFunction == 'function') { exportFunction(newRemoveJewel,uW.cm.ThroneController, {defineAs:"removeJewel"}); }
		else { uW.cm.ThroneController.removeJewel = newRemoveJewel; };

		var oldRenderPanel = CM.ThronePanelView.renderPanel;
		var newRenderPanel = function (v1, v2) {
			oldRenderPanel(v1, v2);

			Tabs.Throne.SelectedItem = v2.id;
			Tabs.Throne.NextLevel = 2;

			var throneDisableUpgradeButton = function () {
				// change the appearance
				var container = document.querySelector('#thronePanelItemRequirementsContainer');
				jQuery(container).children("a.gemButtonv2").remove();
				var an = jQuery("<a/>");
				an.addClass("gemButtonv2 gray");
				an.html(tx("Low Aether"));
				jQuery(container).append(an);
			}

			var throneCheckAstoneLevel = function () {
				// check limit
				var stones = parseInt(Seed.resources["city" + uW.currentcityid]["rec5"][0]);
				if (stones < Options.ThroneOptions.safetyLimit || isNaN(stones) ) {
					throneDisableUpgradeButton();
					return false;
				} else {
					return true;
				}
			}

			var throneSafetyCheck = function () {
				if (throneCheckAstoneLevel()) { // see if we have enough a-stone
					jQuery(document.querySelector("#thronePanelItemRequirementsContainer")).children("a.gemButtonv2").click(function () { // every time the button is pushed, check the levels
						throneCheckAstoneLevel();
					});
				}
			}

			var autoSelectOrbs = function() {
				var ThroneID = Tabs.Throne.SelectedItem;

				var throneItem = uW.kocThroneItems[ThroneID];
				var nextMastersID = Tabs.Throne.getNextAvailableOrb(throneItem);
				if (nextMastersID == 0) {
					Tabs.Throne.unselectToken();
				} else {
					var selected_index = 0;
					jQuery(document.querySelector("#buffDropDown")).children("option").each(function () {
						if ( jQuery(this).text() == uW.ksoItems[nextMastersID].name ) {
							selected_index = jQuery(this).val();
							return;
						}
					});
					jQuery('#buffDropDown').val(selected_index).change();
					CM.ThronePanelView.changeBuff();
				}
			}

			var autoSelectMasters = function() {
				var ThroneID = Tabs.Throne.SelectedItem;

				var throneItem = uW.kocThroneItems[ThroneID];
				var nextMastersID = Tabs.Throne.getNextAvailableMasters(throneItem);
				if (nextMastersID == 0) {
					Tabs.Throne.unselectToken();
				} else {
					var selected_index = 0;
					jQuery(document.querySelector("#buffDropDown")).children("option").each(function () {
						if ( jQuery(this).text() == uW.ksoItems[nextMastersID].name ) {
							selected_index = jQuery(this).val();
							return;
						}
					});
					jQuery('#buffDropDown').val(selected_index).change();
					CM.ThronePanelView.changeBuff();
				}
			}

			var clearMasterTokens = function () {
				// remove options for master tokens
				var removeItems = [];
				for (var tk in CM.MASTERS_TOKEN_LEVELS) { removeItems.push(uW.ksoItems[tk].name); }

				jQuery(document.querySelector("#buffDropDown")).children("option").each(function () {
					if (jQuery.inArray(jQuery(this).text(), removeItems) > -1) {
						if (jQuery(this).val()==jQuery('#buffDropDown').val()) {
							jQuery('#buffDropDown').val(0).change();
							CM.ThronePanelView.changeBuff();
						}
						jQuery(this).remove();
					}
				});
			}

			var clearOtherTokens = function () {
				// remove options for other tokens
				var CheckItems = [];
				for (var tk=0;tk<CM.ThronePanelView.upgradeOptions.length;tk++) { CheckItems.push(CM.ThronePanelView.upgradeOptions[tk]); }
				for (var tk=0;tk<CM.ThronePanelView.enhanceOptions.length;tk++) { CheckItems.push(CM.ThronePanelView.enhanceOptions[tk]); }

				var KeepItems = [20001,20002,20003,20004,20005,20006,20019,20022];
				var removeItems = [];
				for (var chk=0;chk<CheckItems.length;chk++) {
					var Check = CheckItems[chk];
					if (Check.id && Check.id!=0) {
						if (!CM.MASTERS_TOKEN_LEVELS.hasOwnProperty(Check.id) && KeepItems.indexOf(Check.id)==-1) {
							removeItems.push(uW.ksoItems[Check.id].name);
						}
					}
				}

				jQuery(document.querySelector("#buffDropDown")).children("option").each(function () {
					if (jQuery.inArray(jQuery(this).text(), removeItems) > -1) {
						if (jQuery(this).val()==jQuery('#buffDropDown').val()) {
							jQuery('#buffDropDown').val(0).change();
							CM.ThronePanelView.changeBuff();
						}
						jQuery(this).remove();
					}
				});
			}

			var doUpgradeChecks = function () {
				if (Options.ThroneOptions.buffsOff) { Tabs.Throne.unselectToken(); }
				if (Options.ThroneOptions.removeOtherTokens) { clearOtherTokens(); }
				if (Options.ThroneOptions.DefaultNextToken) { autoSelectMasters(); }
				else { if (Options.ThroneOptions.removeMastersTokens) { clearMasterTokens(); } }
				if (Options.ThroneOptions.safetyOn) { throneSafetyCheck(); }
			}

			var doEnhanceChecks = function () {
				if (Options.ThroneOptions.buffsOff) { Tabs.Throne.unselectToken(); }
//				if (Options.ThroneOptions.DefaultNextToken) { autoSelectOrbs(); }
				if (Options.ThroneOptions.safetyOn) { throneSafetyCheck(); }
			}

			var addTabButtonChecks = function () { // register some callbacks when the buttons are pushed

				var pc = document.querySelector('#thronePanelContainer');
				jQuery(pc).find("div.navigation ul").children("li.upgrade").click(function() {
					Tabs.Throne.buffChanged = false;
					doUpgradeChecks();
					addTabButtonChecks();
				});

				jQuery(pc).find("div.navigation ul").children("li.enhance").click(function() {
					Tabs.Throne.buffChanged = false;
					doEnhanceChecks();
					addTabButtonChecks();
				});

				jQuery(pc).find("div.navigation ul").children("li.jewel").click(function() {
					Tabs.Throne.buffChanged = false;
					addTabButtonChecks();
				});

				jQuery(document.querySelector("#buffDropDown")).change(function () {
					Tabs.Throne.buffChanged = true;
					if (Options.ThroneOptions.safetyOn) { throneSafetyCheck(); }
				});

				jQuery(document.querySelector("#costDropDown")).change(function () {
					Tabs.Throne.buffChanged = true;
					if (Options.ThroneOptions.safetyOn) { throneSafetyCheck(); }
				});

				jQuery(".throneContainer").children("div.close").click(function () {
					Tabs.Throne.buffChanged = false;
				});

			};

			if (v1 == "upgrade") doUpgradeChecks();
			if (v1 == "enhance") doEnhanceChecks();

			addTabButtonChecks();
		}
		if (typeof exportFunction == 'function') { exportFunction(newRenderPanel,uW.cm.ThronePanelView, {defineAs:"renderPanel"}); }
		else { uW.cm.ThronePanelView.renderPanel = newRenderPanel; };

		var oldRenderMenu = CM.ContextualMenuThrone.renderMenu;
		var newRenderMenu = function (l, j, FromBot, FromSearch) {
			if (j==null) {
				oldRenderMenu(l, j);
				return;
			}

			if (typeof createObjectIn == 'function') { var k = createObjectIn(uW); }
			else { var k={}; }
			k.title = "<div class='title'>"+j.type+"</div>";
			k.body = "";
			k.menu = t.BuildThroneMenu(l, j);
			k.type = "throne";
			CM.ContextualMenuView.renderMenu(l, k);

			// add selection button and submenus

			btn = document.createElement('a');
			jQuery(btn).addClass("buttonv2 h20 blue")
				.html('<table width=100% cellpadding=0 cellspacing=0 class=xtab style="padding-right:0px;"><tr><td style="width:13px;">&nbsp;</td><td align=center>'+tx('Statistics')+'</td><td style="width:13px;" align=right><img src="'+WhiteRightArrow+'"></td></tr></table>')
				.css('color', 'white')
				.bind("mouseover", function () {
					t.SubThroneContextMenu(this,'STATS',j);
				})
				.bind("mouseout", function (m) {
					if(!m && window.event)m=event;
					var goingto=m.relatedTarget|| event.toElement;
					if (goingto.id != "contextMenuPBP" && goingto.parentNode.id != "contextMenuPBP") {
						jQuery("#contextMenuPBP").remove();
					}
				});
			jQuery("#contextMenu div.title").after(btn);

			btn = document.createElement('a');
			jQuery(btn).addClass("buttonv2 h20 blue")
				.html('<table width=100% cellpadding=0 cellspacing=0 class=xtab style="padding-right:0px;"><tr><td style="width:13px;">&nbsp;</td><td align=center>'+tx('Auto')+'</td><td style="width:13px;" align=right><img src="'+WhiteRightArrow+'"></td></tr></table>')
				.css('color', 'white')
				.bind("mouseover", function () {
					t.SubThroneContextMenu(this,'AUTO',j);
				})
				.bind("mouseout", function (m) {
					if(!m && window.event)m=event;
					var goingto=m.relatedTarget|| event.toElement;
					if (goingto.id != "contextMenuPBP" && goingto.parentNode.id != "contextMenuPBP") {
						jQuery("#contextMenuPBP").remove();
					}
				});
			jQuery("#contextMenu div.title").after(btn);

			if (FromSearch) {
				btn = document.createElement('a');
				var throneType = j.type;
				var Sel = (t.PreviewCards[throneType] && t.PreviewCards[throneType]==j.id);
				if (Sel) {
					jQuery(btn).addClass("buttonv2 h20 red").html(tx('UnSelect')).css('color', 'white').bind("click", function () { jQuery("#contextMenu").remove(); t.ClickedSearchCard(j.id); })
				}
				else {
					jQuery(btn).addClass("buttonv2 h20 green").html(tx('Select')).css('color', 'white').bind("click", function () { jQuery("#contextMenu").remove(); t.ClickedSearchCard(j.id); })
				}
				jQuery("#contextMenu div.title").after(btn);
			}

			var CardInfo = document.createElement('div');
			CardInfo.style.padding='3px';
			jQuery("#contextMenu a").last().after(CardInfo);
			t.PresetsEquipped(j.id,CardInfo);
		};
		if (typeof exportFunction == 'function') { exportFunction(newRenderMenu,uW.cm.ContextualMenuThrone, {defineAs:"renderMenu"}); }
		else { uW.cm.ContextualMenuThrone.renderMenu = newRenderMenu; };

		if (GlobalOptions.btWinSize.x == 750) { t.PreviewCardScale = 0.75;}
		if (GlobalOptions.btWinSize.x == 1250) { t.PreviewCardScale = 0.75;}

		// adjust styles...

		var styles = '\
					div#contextMenuPBP { position:absolute; z-index:1000000; padding:2px 2px 0; background-color:#c69f78; border:2px solid transparent; border-top-color:#ffffde; border-right-color:#87603c; border-bottom-color:#623f20; border-left-color:#ffecc9; overflow: hidden; } \
					div#contextMenuPBP div.title { font:bold 12px Georgia; color:#3f2300; text-transform: capitalize; text-align:center; } \
					div#contextMenuPBP div.title span.type, div #contextMenuPBP div.title span.level { display:block; text-transform:capitalize; text-align:center; } \
					div#contextMenuPBP div.body { text-align:center; } \
					div#contextMenuPBP a { display:block; margin-bottom:2px; } \
					div#contextMenuPBP ul { padding:0; margin:0; list-style:none; }';

		styles += 'div.btthroneHammer { background-image: url('+ t.Hammer +'); background-repeat: no-repeat; background-color: transparent; display: inline-block; width: 32px; height: 32px; margin: 2px; vertical-align: middle;}';
		styles += 'div.btthroneBroken { background-image: url('+ t.Fail + '); background-repeat: no-repeat; background-color: transparent; display: inline-block; width: 32px; height: 32px; margin: 2px; vertical-align: middle;}';
		styles += 'div.btthroneSuccess { background-image: url('+ t.Tick +'); background-repeat: no-repeat; background-color: transparent; display: inline-block; width: 32px; height: 32px; margin: 2px; vertical-align: middle;}';
		styles += 'div.btthroneGoButton { background-image: url('+ t.Button +'); background-repeat: no-repeat; background-color: transparent; display=inline-block; width: 32px; height: 32px; margin: 2px; vertical-align: middle;}';

		var m = '<STYLE>'+ styles +'</style><DIV class=divHeader align=center>'+tx('THRONE ROOM MANAGEMENT')+'</div>';
		m += '<div id=btThroneMenu style="width:'+GlobalOptions.btWinSize.x+'px;"><ul>';
		m += '<li><a href="#btThrone_container_Overview" id=btThrone_Overview style="background-color:'+Options.Colors.Panel+';color:'+Options.Colors.PanelText+';">'+tx('Overview')+'</a></li>';
		m += '<li><a href="#btThrone_container_Upgrader" id=btThrone_Upgrader style="background-color:'+Options.Colors.Panel+';color:'+Options.Colors.PanelText+';">'+tx('Enhance/Upgrade')+'</a></li>';
		m += '<li><a href="#btThrone_container_Repairer" id=btThrone_Repairer style="background-color:'+Options.Colors.Panel+';color:'+Options.Colors.PanelText+';">'+tx('Break/Repair')+'</a></li>';
		m += '<li><a href="#btThrone_container_Salvager" id=btThrone_Salvager style="background-color:'+Options.Colors.Panel+';color:'+Options.Colors.PanelText+';">'+tx('Salvage')+'</a></li>';
		m += '<li><a href="#btThrone_container_Presets" id=btThrone_Presets style="background-color:'+Options.Colors.Panel+';color:'+Options.Colors.PanelText+';">'+tx('Presets')+'</a></li>';
		m += '<li><a href="#btThrone_container_Compare" id=btThrone_Compare style="background-color:'+Options.Colors.Panel+';color:'+Options.Colors.PanelText+';">'+tx('Compare')+'</a></li>';
		m += '<li><a href="#btThrone_container_Jewels" id=btThrone_Jewels style="background-color:'+Options.Colors.Panel+';color:'+Options.Colors.PanelText+';">'+tx('Jewels')+'</a></li>';
		m += '<li><a href="#btThrone_container_Options" id=btThrone_Options style="background-color:'+Options.Colors.Panel+';color:'+Options.Colors.PanelText+';">'+tx('Options')+'</a></li>';
		m += '<li><a href="#btThrone_container_Log" id=btThrone_Log style="background-color:'+Options.Colors.Panel+';color:'+Options.Colors.PanelText+';">'+tx('Log')+'</a></li>';
		m += '</ul>';

		// overview

		m += '<DIV id=btThrone_container_Overview style="color:'+Options.Colors.PanelText+';padding-left:4px;padding-bottom:0px;width:'+(parseInt(GlobalOptions.btWinSize.x)-4)+'px;">';
		m += '<DIV align=center id=btThroneDiv_Overview style="width:100%;overflow-x:auto;min-height:500px;max-height:600px;overflow-y:auto;">';
		m += '</DIV></DIV>';

		// upgrade

		m += '<DIV id=btThrone_container_Upgrader style="color:'+Options.Colors.PanelText+';padding-left:4px;padding-bottom:0px;width:'+(parseInt(GlobalOptions.btWinSize.x)-4)+'px;">';
		m += '<DIV align=center id=btThroneDiv_Upgrader style="width:100%;overflow-x:auto;min-height:600px;overflow-y:auto;">';
		m += '</DIV></DIV>';

		// repair

		m += '<DIV id=btThrone_container_Repairer style="color:'+Options.Colors.PanelText+';padding-left:4px;padding-bottom:0px;width:'+(parseInt(GlobalOptions.btWinSize.x)-4)+'px;">';
		m += '<DIV align=center id=btThroneDiv_Repairer style="width:100%;overflow-x:auto;min-height:600px;overflow-y:auto;">';
		m += '</DIV></DIV>';

		// salvage

		m += '<DIV id=btThrone_container_Salvager style="color:'+Options.Colors.PanelText+';padding-left:4px;padding-bottom:0px;width:'+(parseInt(GlobalOptions.btWinSize.x)-4)+'px;">';
		m += '<DIV align=center id=btThroneDiv_Salvager>';
		m += '</DIV></DIV>';

		// jewels

		m += '<DIV id=btThrone_container_Jewels style="color:'+Options.Colors.PanelText+';padding-left:4px;padding-bottom:0px;width:'+(parseInt(GlobalOptions.btWinSize.x)-4)+'px;">';
		m += '<DIV align=center id=btThroneDiv_Jewels>';
		m += '</div></div>';

		// compare

		m += '<DIV id=btThrone_container_Compare style="color:'+Options.Colors.PanelText+';padding-left:4px;padding-bottom:0px;width:'+(parseInt(GlobalOptions.btWinSize.x)-4)+'px;">';
		m += '<DIV align=center id=btThroneDiv_Compare style="width:100%;overflow-x:auto;min-height:500px;max-height:600px;overflow-y:auto;">';
		m += '</DIV></DIV>';

		// presets

		m += '<DIV id=btThrone_container_Presets style="color:'+Options.Colors.PanelText+';padding-left:4px;padding-bottom:0px;width:'+(parseInt(GlobalOptions.btWinSize.x)-4)+'px;">';
		m += '<DIV align=center id=btThroneDiv_Presets style="width:100%;overflow-x:auto;min-height:600px;overflow-y:auto;">';
		m += '</DIV></DIV>';

		// options

		m += '<DIV id=btThrone_container_Options style="color:'+Options.Colors.PanelText+';padding-left:4px;padding-bottom:0px;width:'+(parseInt(GlobalOptions.btWinSize.x)-4)+'px;">';
		m += '<DIV align=center id=btThroneDiv_Options style="width:100%;overflow-x:auto;min-height:500px;max-height:600px;overflow-y:auto;">&nbsp;</DIV></DIV>';

		// log

		m += '<DIV id=btThrone_container_Log style="color:'+Options.Colors.PanelText+';padding-left:4px;padding-bottom:0px;width:'+(parseInt(GlobalOptions.btWinSize.x)-4)+'px;">';
		m += '<DIV align=center id=btThroneDiv_Log style="width:100%;overflow-x:auto;min-height:500px;max-height:600px;overflow-y:auto;">&nbsp;</DIV></DIV>';

		m += '</DIV><br>';

		t.myDiv.innerHTML = m;
		jQuery("#btThroneMenu").tabs({ activate: function (event, ui) { ResetFrameSize('btMain',100,GlobalOptions.btWinSize.x); } });

		$("btThrone_Overview").addEventListener('click', t.display_overview, false);
		$("btThrone_Upgrader").addEventListener('click', t.display_upgrader, false);
		$("btThrone_Repairer").addEventListener('click', t.display_repairer, false);
		$("btThrone_Salvager").addEventListener('click', t.display_salvager, false);
		$("btThrone_Jewels").addEventListener('click', t.display_jewels, false);
		$("btThrone_Compare").addEventListener('click', t.display_compare, false);
		$("btThrone_Presets").addEventListener('click', t.display_presets, false);
		$("btThrone_Options").addEventListener('click', t.display_options, false);
		$("btThrone_Log").addEventListener('click', t.display_log, false);
		$("btThrone_Overview").click();

		// paint any static tabs

		t.paint_upgrader();
		t.paint_repairer();
		t.paint_salvager();
		t.paint_jewels();
		t.paint_compare();
		t.paint_presets();

		window.addEventListener('unload', t.onUnload, false);

		t.UpgradeStatus = tx('Powered Off');
		t.RepairStatus = tx('Powered Off');
		t.SalvageStatus = tx('Powered Off');
		t.JewelSalvageStatus = tx('Powered Off');

		// start auto loop timers to start in 15 seconds...
		if (Options.ThroneOptions.UpgradeRunning) {
			t.UpgradeStatus = tx('Waiting to start')+'...';
			t.UpgradeTimer = setTimeout(function () { t.doAutoUpgradeLoop();}, (14 * 1000));
		}
		if (Options.ThroneOptions.RepairRunning) {
			t.RepairStatus = tx('Waiting to start')+'...';
			t.RepairTimer = setTimeout(function () { t.doAutoRepairLoop();}, (15 * 1000));
		}
		if (Options.ThroneOptions.SalvageRunning) {
			t.SalvageStatus = tx('Waiting to start')+'...';
			t.SalvageTimer = setTimeout(function () { t.doAutoSalvageLoop();}, (16 * 1000));
		}
		if (Options.ThroneOptions.JewelSalvageRunning) {
			t.JewelSalvageStatus = tx('Waiting to start')+'...';
			t.JewelTimer = setTimeout(function () { t.doAutoJewelLoop();}, (17 * 1000));
		}
	},

	onUnload : function (){
		var t = Tabs.Throne;
		if (uW.btLoaded) {
			if (!ResetAll) t.saveLogs();
		}
	},

	BuildThroneMenu : function (m, l) {
		var t = Tabs.Throne;
		var o = [],
		i =  + (Seed.throne.activeSlot),
		n = Seed.throne.slotEquip[i],
		j = [];
		var k = uWCloneInto([]);

		if (l) {
			if (l.isBroken) {
				o.push("repair")
			} else {
				if (l.isEquipped === true) {
					o.push("unequip")
				} else {
					o.push("equip")
				}
				o.push("enhance");
				o.push("upgrade");
				o.push("jewel");
				var SalvageAllowed = true;
				// no salvage if equipped
				if (Options.ThroneOptions.NoEquippedSalvage && t.NumberOfPresetsEquipped(l.id)>0) {
					SalvageAllowed = false;
				}
				// no salvage on first x items
				if (Options.ThroneOptions.SalvageSafety) {
					var keys = uW.Object.keys(uW.kocThroneItems);
					var v = "" + l.id;
					if (keys.indexOf(v) < Options.ThroneOptions.SalvageSafetyNum && keys.indexOf(v) > -1) {
						SalvageAllowed = false;
					}
				}
				if (SalvageAllowed) {
					o.push("salvage");
				}
				if (!Options.ThroneOptions.NoMassSalvage) {
					o.push("mass")
				}
			}
		}
		jQuery.each(o, function (q, s) {
			if (typeof createObjectIn == 'function') { var r = createObjectIn(uW); }
			else { var r = {}; }
			switch (s) {
			case "unequip":
				r.text = "Unequip";
				r.color = "blue";
				var raction = function () {
					jQuery("#contextMenu").remove();
					CM.ThroneController.unequipItem(l)
				};
				if (typeof exportFunction == 'function') { exportFunction(raction, r, {defineAs:"action"}); }
				else { r.action = raction; }
				k.push(r);
				break;
			case "equip":
				r.text = "Equip";
				r.color = "blue";
				var raction = function () {
					jQuery("#contextMenu").remove();
					CM.ThroneController.equipItem(l)
				};
				if (typeof exportFunction == 'function') { exportFunction(raction, r, {defineAs:"action"}); }
				else { r.action = raction; }
				k.push(r);
				break;
			case "salvage":
				r.text = uW.g_js_strings.commonstr.salvage;
				r.color = "red";
				var raction = function () {
					jQuery("#contextMenu").remove();
					t.CheckThroneActive();
					
					uW.btTempArray = uWCloneInto([]);
					uW.btTempArray.push(uW.kocThroneItems[l.id]);
					CM.ThroneView.renderMassSalvageConfirm(uW.btTempArray)
				};
				if (typeof exportFunction == 'function') { exportFunction(raction, r, {defineAs:"action"}); }
				else { r.action = raction; }
				k.push(r);
				break;
			case "mass":
				r.text = "Mass Salvage";
				r.color = "red";
				var raction = function () {
					jQuery("#contextMenu").remove();
					t.CheckThroneActive();
					CM.ThroneView.renderMassSalvage()
				};
				if (typeof exportFunction == 'function') { exportFunction(raction, r, {defineAs:"action"}); }
				else { r.action = raction; }
				k.push(r);
				break;
			case "enhance":
				r.text = uW.g_js_strings.throneRoom.button_enhance;
				r.color = "brown";
				var raction = function () {
					t.CheckThroneActive();
					CM.ThronePanelView.renderPanel("enhance", l)
				};
				if (typeof exportFunction == 'function') { exportFunction(raction, r, {defineAs:"action"}); }
				else { r.action = raction; }
				k.push(r);
				break;
			case "upgrade":
				r.text = uW.g_js_strings.throneRoom.button_upgrade;
				r.color = "brown";
				var raction = function () {
					t.CheckThroneActive();
					CM.ThronePanelView.renderPanel("upgrade", l)
				};
				if (typeof exportFunction == 'function') { exportFunction(raction, r, {defineAs:"action"}); }
				else { r.action = raction; }
				k.push(r);
				break;
			case "jewel":
				r.text = uW.g_js_strings.jewel.jewel;
				r.color = "brown";
				var raction = function () {
					t.CheckThroneActive();
					CM.ThronePanelView.renderPanel("jewel", l)
				};
				if (typeof exportFunction == 'function') { exportFunction(raction, r, {defineAs:"action"}); }
				else { r.action = raction; }
				k.push(r);
				break;
			case "repair":
				r.text = uW.g_js_strings.throneRoom.button_repair;
				r.color = "blue";
				var raction = function () {
					t.CheckThroneActive();
					CM.ThronePanelView.renderBroken(l)
				};
				if (typeof exportFunction == 'function') { exportFunction(raction, r, {defineAs:"action"}); }
				else { r.action = raction; }
				k.push(r);
				break;
			default:
				break
			}
		});
		return k
	},

	CheckThroneActive : function () {
		if(!document.getElementsByClassName('throneContainer')[0]) {
			CM.ThroneView.openThrone();
		}
	},

	CheckRenderInventory : function () {
		if(document.getElementsByClassName('throneContainer')[0]) {
			CM.ThroneView.renderInventory(uW.kocThroneItems);
			CM.ThroneView.searchKeyPress();
		}
	},
	
	SubThroneContextMenu : function (el,menutype,throneItem) {
		var t = Tabs.Throne;
		var trId = throneItem.id;
		if (ById('contextMenuPBP')) return;
		var e = document.createElement ('div');
		e.id = 'contextMenuPBP';
		if (menutype == 'STATS') {
			// create a button to copy the stats
			var btn = document.createElement('a');
			jQuery(btn).addClass("buttonv2 h20 blue")
			.html(tx("Copy Stats"))
			.css('color', 'white')
			.bind("click", function () {
				var displayText = Tabs.Throne.getThroneItemStats(trId, "	");
				if (displayText != "") window.prompt("Copy to clipboard: Ctrl+C", displayText);
				jQuery("#contextMenuPBP").remove();
			});
			e.appendChild(btn);

			// create a button to post the stats
			var btn = document.createElement('a');
			jQuery(btn).addClass("buttonv2 h20 blue")
			.html(tx("Post to Chat"))
			.css('color', 'white')
			.bind("click", function () {
				var displayText = Tabs.Throne.getThroneItemStats(trId, "||");
				if (displayText != "") sendChat(displayText);
				jQuery("#contextMenuPBP").remove();
			});
			e.appendChild(btn);
		}
		if (menutype == 'AUTO') {
			// enhance
			var btn = document.createElement('a');
			jQuery(btn).addClass("buttonv2 h20 brown")
			.html(tx("Enhance"))
			.css('color', 'white')
			.bind("click", function () {
				t.addThroneQueue(trId,'enhance',Options.ThroneOptions.UpgradeDefaultQuality);
				jQuery("#contextMenuPBP").remove();
			});
			e.appendChild(btn);
			// upgrade
			var btn = document.createElement('a');
			jQuery(btn).addClass("buttonv2 h20 brown")
			.html(tx("Upgrade"))
			.css('color', 'white')
			.bind("click", function () {
				t.addThroneQueue(trId,'upgrade',Options.ThroneOptions.UpgradeDefaultLevel);
				jQuery("#contextMenuPBP").remove();
			});
			e.appendChild(btn);
			// repair
			if (throneItem.isBroken) {
				var btn = document.createElement('a');
				jQuery(btn).addClass("buttonv2 h20 blue")
				.html(tx("Repair"))
				.css('color', 'white')
				.bind("click", function () {
					t.addThroneRepairQueue(trId);
					jQuery("#contextMenuPBP").remove();
				});
				e.appendChild(btn);
			}
			else {
				if (throneItem.level<CM.MAX_MASTERS_TOKEN_LEVEL) {
					var btn = document.createElement('a');
					jQuery(btn).addClass("buttonv2 h20 red")
					.html(tx("Break"))
					.css('color', 'white')
					.bind("click", function () {
						t.UpgradeItem(trId,null,0);
						jQuery("#contextMenuPBP").remove();
					});
					e.appendChild(btn);
				}
			}
		}
		var off = getAbsoluteOffsets(el);
		e.style.top = off.top+'px';
		e.style.left = (off.left+jQuery('#contextMenu').width()-4)+'px';
		jQuery(e).mouseover(function (m) {
			m.stopPropagation();
		});
		jQuery(e).mouseleave(function (m) {
			m.stopPropagation();
			jQuery("#contextMenuPBP").remove();
		});
		jQuery('#contextMenu').mouseleave(function (m) {
			if(!m && window.event)m=event;
			var goingto=m.relatedTarget|| event.toElement;
			if (goingto.id != "contextMenuPBP" && goingto.parentNode.id != "contextMenuPBP") {
				jQuery("#contextMenuPBP").remove();
			}
		});

		ById('mainbody').appendChild (e);
	},

	getNextAvailableMasters : function (throneItem,LevelOnly) {
		var curCode = 0;
		for (var tk in CM.MASTERS_TOKEN_LEVELS) {
			if (LevelOnly) {
				if (throneItem.level==CM.MASTERS_TOKEN_LEVELS[tk]-1 && uW.ksoItems[tk].count > 0) {
					curCode = tk;
					break;
				}
			}
			else {
				if (throneItem.level<CM.MASTERS_TOKEN_LEVELS[tk] && uW.ksoItems[tk].count > 0) {
					curCode = tk;
					break;
				}
			}
		}
		return curCode;
	},

	getNextAvailableOrb : function (throneItem,LevelOnly) {
		var curCode = 0;
		for (var tk in t.Orbs) {
			if (LevelOnly) {
				if (throneItem.quality==t.Orbs[tk]-1 && uW.ksoItems[tk].count > 0) {
					curCode = tk;
					break;
				}
			}
			else {
				if (throneItem.quality<t.Orbs[tk] && uW.ksoItems[tk].count > 0) {
					curCode = tk;
					break;
				}
			}
		}
		return curCode;
	},

	getNextAvailableToken : function (throneItem,TokenType,LevelOnly) {
		var t = Tabs.Throne;
		var curCode = 0;
		if (TokenType=="O") {
			for (var tk in t.OpportunityTokens) {
				if (LevelOnly) {
					if (throneItem.level==t.OpportunityTokens[tk]-1 && uW.ksoItems[tk].count > 0) {
						curCode = tk;
						break;
					}
				}
				else {
					if (throneItem.level<t.OpportunityTokens[tk] && uW.ksoItems[tk].count > 0) {
						curCode = tk;
						break;
					}
				}
			}
		}
		if (TokenType=="F") {
			for (var tk in t.FortuneTokens) {
				if (LevelOnly) {
					if (throneItem.level==t.FortuneTokens[tk]-1 && uW.ksoItems[tk].count > 0) {
						curCode = tk;
						break;
					}
				}
				else {
					if (throneItem.level<t.FortuneTokens[tk] && uW.ksoItems[tk].count > 0) {
						curCode = tk;
						break;
					}
				}
			}
		}
		if (TokenType=="P") {
			for (var tk in t.ProspectorTokens) {
				if (LevelOnly) {
					if (throneItem.level==t.ProspectorTokens[tk]-1 && uW.ksoItems[tk].count > 0) {
						curCode = tk;
						break;
					}
				}
				else {
					if (throneItem.level<t.ProspectorTokens[tk] && uW.ksoItems[tk].count > 0) {
						curCode = tk;
						break;
					}
				}
			}
		}
		return curCode;
	},

	unselectToken : function () {
		var t = Tabs.Throne;
		if (!t.buffChanged) {
			jQuery(document.querySelector("#buffDropDown")).val(0);
			jQuery(document.querySelector("#costDropDown")).val(0);

			CM.ThronePanelView.changeBuff();
		}
	},

	ModifyEvents: function () {
		var t = Tabs.Throne;

		if (Options.ThroneOptions.draggableThroneItems) {
			jQuery("#advisorContainer").draggable();
			jQuery("#heroContainer").draggable();
			jQuery("#chairContainer").draggable();
			jQuery("#candelabrumContainer").draggable();
			jQuery("#tableContainer").draggable();
			jQuery("#windowContainer").draggable();
			jQuery("#bannerContainer").draggable();
			jQuery("#trophyContainer").draggable();
			jQuery("#statueContainer").draggable();
			jQuery("#petContainer").draggable();
			jQuery("#tapestryContainer").draggable();
			jQuery("#pillarContainer").draggable();
		}

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

		function ThroneMenuPopup(displayContainer) {
			var throneType = displayContainer.split('Container')[0];
			var equipped_items = Seed.throne.slotEquip[Seed.throne.activeSlot];
			for (ei = 0; ei < equipped_items.length; ei++) {
				var trId = equipped_items[ei]
				if (uW.kocThroneItems[trId].type == throneType) break;
				trId = ''
			}
			if (trId == '') return;

			var throne_item = uW.kocThroneItems[trId];
			if (!throne_item) return;
			var thisDiv = ById(displayContainer);
			var trDiv = ById('throneInventoryItem' + trId);
			var oldDiv = trDiv.parentNode;
			thisDiv.appendChild(trDiv);
			CM.ContextualMenuThrone.renderMenu(trDiv, throne_item);
			oldDiv.appendChild(trDiv);
		};

	},

	paintTags: function () {
		var t = Tabs.Throne;

		for (var trId in uW.kocThroneItems) {
			var throne_item = uW.kocThroneItems[trId];
			if (!throne_item.jewel) continue;
			if (ById('throneInventoryItem'+throne_item.id)) {
				jQuery("#throneInventoryItem" + throne_item.id).children(".jewelIcon").remove();
				if (Options.ThroneOptions.ShowJewelIcons && throne_item.jewel.valid && !throne_item.isBroken) {
					jQuery("div#throneInventoryItem" + throne_item.id).append("<div class='jewelIcon'><img style='float:right;' src='" + t.JewelImages[throne_item.jewel.quality] + "'></div>");
				}
			}
		}
	},

	show: function (){
		var t = Tabs.Throne;
		if (t.activepanel=='overview') { t.display_overview(); }
		if (t.activepanel=='upgrader') { t.display_upgrader(); }
		if (t.activepanel=='repairer') { t.display_repairer(); }
		if (t.activepanel=='salvager') { t.display_salvager(); }
		if (t.activepanel=='jewels') { t.BuildJewelList(); t.display_jewels(); }
		if (t.activepanel=='compare') { t.display_compare(); }
		if (t.activepanel=='presets') { t.display_presets(); }
		if (t.activepanel=='options') { t.display_options(); }
		if (t.activepanel=='log') { t.display_log(); }
	},

	EverySecond : function () {
		var t = Tabs.Throne;

		if (uW.isNewServer()) { return; }
		
		t.LoopCounter = t.LoopCounter + 1;

		if (t.LoopCounter%2==0) { // refresh displays if any every 2 seconds
			if (tabManager.currentTab.name == 'Throne' && Options.btWinIsOpen){
				if (t.activepanel=="overview") {
					t.update_overview();
				}
				if (t.activepanel=="upgrader") {
					t.update_upgrader();
				}
				if (t.activepanel=="repairer") {
					t.update_repairer();
				}
			}
			var FreeSpace = (Seed.throne.rowNum*5) - Object.keys(uW.kocThroneItems).length;
			if (FreeSpace<=0) { if (jQuery("#mod_views2")) { jQuery("#mod_views2 a:first").css("color","red"); }}
			else { if (jQuery("#mod_views2")) { jQuery("#mod_views2 a:first").css("color",""); }}
		}
	},

	AddOverviewButton : function (tabId, text, eventListener, id, colourclass) {
		var t = Tabs.Throne;
		var a = createButton (text,id);
		if (colourclass == null) colourclass = 'blue20';
		a.className='inlineButton btButton '+colourclass;
		a.style.paddingLeft = '2px';
		var tabs=ById(tabId);
		if (tabs) {
			var e = document.createElement ('div');
			tabs.appendChild(e);
			e.appendChild(a);
			a.addEventListener('click',eventListener, false);
			if (id != null) { a.id = id; }
			return a;
		}
		return null;
	},

	// DISPLAY AND PAINT SUBTABS

	display_overview : function (){
		var t = Tabs.Throne;
		var div = ById("btThroneDiv_Overview");
		t.activepanel = "overview";

		var m = '<div class="divHeader" align="center">'+tx('THRONE ROOM OVERVIEW')+'</div>';
		m += '<div align=right><INPUT id=btThroneToggle type=checkbox />&nbsp;'+tx("Add toggle button")+'</div>';
		m += '<div id=btthroneoverviewinfo></div>';
		m += '<div class="divHeader" align="center">'+tx('AUTOMATIC FUNCTIONS')+'</div>';
		m += '<div id=btthroneoverviewauto align=left><br><table class=xtab width=100%>';
		m += '<tr><td id=btthroneoverviewupgradebuttondiv align=right width=100></td><td><div class="oddRow wrap xtabBorder" style="vertical-align:top;height:30px;" id=btthroneoverviewupgradestatusdiv>&nbsp;</div></td></tr>';
		m += '<tr><td id=btthroneoverviewrepairbuttondiv align=right width=100></td><td><div class="oddRow wrap xtabBorder" style="vertical-align:top;height:30px;" id=btthroneoverviewrepairstatusdiv>&nbsp;</div></td></tr>';
		m += '<tr><td id=btthroneoverviewsalvagebuttondiv align=right width=100></td><td><div class="oddRow wrap xtabBorder" style="vertical-align:top;height:30px;" id=btthroneoverviewsalvagestatusdiv>&nbsp;</div></td></tr>';
		m += '<tr><td id=btthroneoverviewjewelsalvagebuttondiv align=right width=100></td><td><div class="oddRow wrap xtabBorder" style="vertical-align:top;height:30px;" id=btthroneoverviewjewelsalvagestatusdiv>&nbsp;</div></td></tr>';
		m += '</table></div><br>';
		m += '<div align=center><div style="position:absolute;bottom:0px;width:'+GlobalOptions.btWinSize.x+'px;"><br><hr>';
		m += '<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_blank">\
				<input type="hidden" name="cmd" value="_s-xclick">\
				<input type="hidden" name="hosted_button_id" value="8VEDPV3X9X82L">\
				<input type="image" src="https://www.paypalobjects.com/en_US/GB/i/btn/btn_donateCC_LG.gif" border="0" name="submit" alt="PayPal – The safer, easier way to pay online!">\
				<img alt="" border="0" src="https://www.paypalobjects.com/en_GB/i/scr/pixel.gif" width="1" height="1">\
				</form>';
		m += '<br>'+tx('This additional tab has been provided free of charge for the benefit of players. Please donate to help with future support and development of this and other features')+'.<br>'+tx('Thanks')+',&nbsp;Barbarossa.</div></div>';

		div.innerHTML = m;

		t.update_overview();
		ToggleOption('ThroneOptions','btThroneToggle','ToggleButton');

		t.AddOverviewButton('btthroneoverviewupgradebuttondiv','Upgrade',t.toggleAutoUpgradeState, 'UpgradeToggleTab');
		SetToggleButtonState('Upgrade',Options.ThroneOptions.UpgradeRunning,'Upgrade');
		t.AddOverviewButton('btthroneoverviewrepairbuttondiv','Repair',t.toggleAutoRepairState, 'RepairToggleTab');
		SetToggleButtonState('Repair',Options.ThroneOptions.RepairRunning,'Repair');
		t.AddOverviewButton('btthroneoverviewsalvagebuttondiv','Salvage',t.toggleAutoSalvageState, 'SalvageToggleTab');
		SetToggleButtonState('Salvage',Options.ThroneOptions.SalvageRunning,'Salvage');
		t.AddOverviewButton('btthroneoverviewjewelsalvagebuttondiv','Jewel Salvage',t.toggleAutoJewelState, 'JewelSalvageToggleTab');
		SetToggleButtonState('JewelSalvage',Options.ThroneOptions.JewelSalvageRunning,'Jewel Salvage');

		t.PaintUpgradeStatus();
		t.PaintRepairStatus();
		t.PaintSalvageStatus();
		t.PaintJewelSalvageStatus();

		ResetFrameSize('btMain',100,GlobalOptions.btWinSize.x);
	},

	update_overview : function () {
		var t = Tabs.Throne;

		var NumCards = Object.keys(uW.kocThroneItems).length; // Seed.throne.totalItems is not updated!

		var totMight = 0;
		var brokeMight = 0;
		var brokeCount = 0;
		for (var trId in uW.kocThroneItems) {
			var throne_item = uW.kocThroneItems[trId];
			if (throne_item == null || !throne_item) continue;
			var might = CM.ThroneView.getMightBonus(throne_item);
			totMight += might;
			if (throne_item.isBroken) {
				brokeCount++;
				brokeMight += might;
			}
		}

		var m = '<table align=center cellpadding=2 cellspacing=0 class=xtab>';
		m += '<tr><td align=right>'+tx('Total Number of Cards')+':&nbsp;</td><td><b>'+NumCards+'</b></td><td align=right>'+tx('Total Throne Might')+':&nbsp;</td><td><b>'+addCommas(totMight)+'</b></td></tr>';
		m += '<tr><td align=right>'+tx('Number of Unlocked Rows')+':&nbsp;</td><td><b>'+Seed.throne.rowNum+'/'+t.MaxRows+'</b></td><td align=right>'+tx('Broken Throne Might')+':&nbsp;</td><td><b>'+addCommas(brokeMight)+'</b></td></tr>';
		var FreeSpace = (Seed.throne.rowNum*5) - NumCards;
		var FreeSpaceTotal = (t.MaxRows*5) - NumCards;
		var span = '<span>';
		if (FreeSpace>=20) span = '<span class=boldGreen>'; // more than 4 rows good!
		if (FreeSpace<10) span = '<span class=boldRed>'; // less than 2 rows bad!
		if (FreeSpace>0) { m += '<tr><td align=right>'+tx('Free Space (Unlocked)')+':&nbsp;</td><td><b>'+span+FreeSpace+' '+tx('Cards')+'</span></b></td>'; }
		else { m += '<tr><td align=right>'+tx('Free Space (Unlocked)')+':&nbsp;</td><td>'+span+tx('None')+'!</span></b></td>'; }
		m += '<td align=right>'+tx('Number of Broken Cards')+':&nbsp;</td><td><b>'+brokeCount+'</b></td></tr>';
		if (Seed.throne.rowNum<t.MaxRows) {
			var span = '<span>';
			if (FreeSpaceTotal<10) span = '<span class=boldRed>'; // less than 2 rows bad!
			if (FreeSpaceTotal>0) { m += '<tr><td align=right>'+tx('Free Space (Total)')+':&nbsp;</td><td><b>'+span+FreeSpaceTotal+' '+tx('Cards')+'</span></b></td>'; }
			else { m += '<tr><td align=right>'+tx('Free Space (Total)')+':&nbsp;</td><td>'+span+tx('None')+'!</span></b></td>'; }
		}
		else {
			m += '<tr><td align=right>&nbsp;</td><td>&nbsp;</td>';
		}
		m += '<td align=right>'+tx('Number of Active Presets')+':&nbsp;</td><td><b>'+Seed.throne.slotNum+'/'+t.MaxPresets+'</b></td></tr>';
		m += '</table>';

		m += '<br><DIV id=btThroneOverviewDiv style="width:'+(GlobalOptions.btWinSize.x-10)+'px;overflow-x:auto;">';
		m += '<TABLE width=98% class=xtab cellpadding=1 cellspacing=0 align=center style="font-size:'+Options.OverviewOptions.OverviewFontSize+'px;"><TR valign=bottom><td width=20>&nbsp;</td><td width=100>&nbsp;</td>';
		for (var i = 1; i <= Cities.numCities; i++) {
			m += '<TD style="font-size:11px;" align=center width=100><span id="btthroneCity_'+i+'"><B>'+Cities.cities[i-1].name.substring(0, 12)+'</b></span></td>';
		}
		m += "<td>&nbsp;</td>"; // spacer

		var totaether = 0;
		m += '</tr><TR align=right class="oddRow"><TD style="padding-left: 0px;"><img height=18 src="'+AetherImage+'" title="'+uW.g_js_strings.commonstr.aetherstone+'"></td><td><div id=btthroneTotAether class="totalCell xtabBorder">&nbsp;</div></td>';
		for (var i = 0; i < Cities.numCities; i++) {
			citynum = i+1;
			cityId = Cities.cities[i].id;
			var cityaether = parseIntNan(Seed.resources["city"+cityId]['rec5'][0]);
			totaether+=cityaether;
			var span = '<span>';
			if (cityaether >= Options.ThroneOptions.SalvageMaxAether) { span = '<span class=boldGreen>'; }
			if (cityaether < Options.ThroneOptions.safetyLimit) { span = '<span class=boldRed>'; }
			m += '<TD><div align=center class=xtabBorder><span id="btthroneAetherCity_'+citynum+'">'+span+addCommas(cityaether)+'</span></span></div></td>';
		}

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

		ById('btthroneoverviewinfo').innerHTML = m;
		ById('btthroneTotAether').innerHTML = addCommas(totaether);

		t.PaintRepairStatus();
		var now = unixTime();
		if (Seed.queue_throne && Seed.queue_throne.end) {
			if (Seed.queue_throne.end>now) {
				if (ById('btthroneoverviewrepairtimer')) ById('btthroneoverviewrepairtimer').innerHTML = timestr(Seed.queue_throne.end - now);
			}
			else {
				if (ById('btthroneoverviewrepairtimer')) ById('btthroneoverviewrepairtimer').innerHTML = tx('Complete')+'!';
			}
		}
	},

	paint_upgrader : function () {
		var t = Tabs.Throne;
		var div = ById("btThroneDiv_Upgrader");

		var m = '<DIV class=divHeader align=center>'+tx('AUTOMATED THRONE ROOM ENHANCE/UPGRADE')+'</div>';
		m += '<table width=100% class=xtab><tr><td width=30%>&nbsp;</td><td colspan=2 align=center><INPUT id=btAutoUpgradeState type=submit value="'+tx("Upgrade")+' = '+ (Options.ThroneOptions.UpgradeRunning?'ON':'OFF')+'"></td><td width=30% align=right>&nbsp;</td></tr></table>';
		m += '<a id=btthroneUpgradeOptionLink class=divLink><div class="divHeader" align="left"><img id=btthroneUpgradeOptionArrow height="10" src="'+RightArrow+'">&nbsp;'+tx('OPTIONS')+'</div></a>';
		m += '<div id=btthroneUpgradeOption align=center class="divHide">';

		m += '<TABLE class=xtab width="100%">';
		m += '<tr><td width=30>&nbsp;</td><td>'+tx('Use Aetherstone from')+'&nbsp;<div style="display:inline;" id=btthroneUpgradeCity></div></td>';
		m += '<td align=right>&nbsp;</td></tr>';
		m += '<tr><td width=30>&nbsp;</td><td>'+tx('Minimum Aetherstone')+':&nbsp;<input class=btInput id=btthroneUpgradeMinAether type=text size=7 maxlength=8 value="' + Options.ThroneOptions.UpgradeMinAether + '"></td>';
		m += '<td align=right>&nbsp;</td></tr>';
		m += '<tr><td><input id=btthroneUpgradeAnyCity type=checkbox '+(Options.ThroneOptions.UpgradeAnyCity ? ' CHECKED' : '') + '></td><td colspan=2>'+tx('When empty, use Aetherstone from any city')+':-&nbsp;&nbsp;&nbsp;'+tx('Overflow Method')+':&nbsp;'+htmlSelector({order:"City Order",lowest:"Highest Aetherstone"},Options.ThroneOptions.UpgradeOverflow, 'class=btInput id=btthroneUpgradeOverflow')+'</td></tr>';
		m += '<tr><td><input id=btthroneUpgradeOneItem type=checkbox '+(Options.ThroneOptions.UpgradeOneItem ? ' CHECKED' : '') + '></td><td colspan=2>'+tx('Upgrade one card at a time')+'</td></tr>';
		m += '<tr><td>&nbsp;</td><td colspan=2><input id=btthroneUpgradeOneMax type=checkbox '+(Options.ThroneOptions.UpgradeOneMax ? ' CHECKED' : '') + '>&nbsp;'+tx('Maximum attempts for each card')+'&nbsp;<INPUT id=btthroneUpgradeOneMaxAttempts type=text size=3 maxlength=4 value="'+Options.ThroneOptions.UpgradeOneMaxAttempts+'"\></td></tr>';
		m += '<tr><td>&nbsp;</td><td>'+tx("Upgrade interval")+' <INPUT id=btthroneUpgradeInterval type=text size=2 maxlength=2 value="'+Options.ThroneOptions.UpgradeInterval+'"\> '+tx("seconds")+'</td></tr>';
		m += '<tr><td><input id=btthroneWhisperToMe type=checkbox '+(Options.ThroneOptions.WhisperToMe ? ' CHECKED' : '') + '></td><td colspan=2>'+tx('Whisper yourself successful attempts')+'</td></tr>';
		m += '<tr><td><input id=btthroneSendToInbox type=checkbox '+(Options.ThroneOptions.SendToInbox ? ' CHECKED' : '') + '></td><td colspan=2>'+tx('Mail yourself successful attempts')+'</td></tr>';

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

		TempQuals = {};
		for (k=0;k<cardQuality.length;k++) {
			var quality = cardQuality[k].toLowerCase();
			TempQuals[k] = uW.g_js_strings.throneRoom[quality];
		}
		MasterQuals = {};
		for (k=1;k<cardQuality.length;k++) {
			var quality = cardQuality[k].toLowerCase();
			MasterQuals[k] = uW.g_js_strings.throneRoom[quality];
		}
		TempLevels = {};
		for (var type_index = 0; type_index < CM.MAX_MASTERS_TOKEN_LEVEL + 1; ++type_index) {
			TempLevels[type_index] = type_index;
		}
		MasterLevels = {};
		for (var type_index = 3; type_index < CM.MAX_MASTERS_TOKEN_LEVEL + 1; ++type_index) {
			MasterLevels[type_index] = type_index;
		}
		TokenLevels = {};
		for (var type_index = 19; type_index < CM.MAX_MASTERS_TOKEN_LEVEL + 1; ++type_index) {
			TokenLevels[type_index] = type_index;
		}

		m += '<a id=btthroneUpgradeBoostsLink class=divLink><div class="divHeader" align="left"><img id=btthroneUpgradeBoostsArrow height="10" src="'+RightArrow+'">&nbsp;'+tx('BOOST ITEMS')+'</div></a>';
		m += '<div id=btthroneUpgradeBoosts align=center class="divHide">';

		var Boosts = '<table class="xtab" width="95%" cellspacing="0" cellpadding="0" align="center"><tr><td><b>'+tx('Enhance')+'</b></td><td align=right>'+tx('Minimum Quality')+':&nbsp;'+htmlSelector(TempQuals,Options.ThroneOptions.EnhanceBoostMinQuality, 'class=btInput id=btthroneUpgradeBoostMinQuality')+'</td></tr></table><br>';
		Boosts += '<table width=95% class=xtab align=center cellpadding=0 cellspacing=0><tr style="vertical-align:top;">';
		for (var i = 0; i < t.EnhanceItemList.length; i++) {
			Boosts += '<td width=30 rowspan=2><img height=28 src="'+IMGURL+'items/70/'+t.EnhanceItemList[i]+'.jpg" title="'+itemTitle(t.EnhanceItemList[i],true)+'" /></td><td>(<span id=btthroneUse'+t.EnhanceItemTrans[i]+'Label>' + parseIntNan(uW.ksoItems[t.EnhanceItemList[i]].count) + '</span>)</td>';
		}
		Boosts += '</tr><tr style="vertical-align:top;">';
		for (var i = 0; i < t.EnhanceItemList.length; i++) {
			Boosts += '<td><input type=checkbox id="btthrone'+t.EnhanceItemTrans[i]+'" '+(Options.ThroneOptions["Use"+t.EnhanceItemTrans[i]]?"CHECKED" : "")+'></td>';
		}
		Boosts += '</tr></table>';
		Boosts += '<table width=95% class=xtab align=center cellpadding=0 cellspacing=0><tr><td><input type=checkbox id=btthroneEOV >'+tx('Automatically use Masters Orbs for qualities between')+' '+htmlSelector(MasterQuals,Options.ThroneOptions.EnhanceUseMastersMin, 'id=btthroneEOVItemMin') + ' '+tx('and')+' '+htmlSelector(MasterQuals,Options.ThroneOptions.EnhanceUseMastersMax, 'id=btthroneEOVItemMax')+'</td></tr></table>';
		Boosts += '<table width=95% class=xtab align=center cellpadding=0 cellspacing=0><tr><td><input type=checkbox id=btthroneELevelOnly ><b>'+tx('Only use Orbs for the current quality')+'</b></td></tr></table>';
		Boosts += '<table width=95% class=xtab align=center cellpadding=0 cellspacing=0><tr><td><input type=checkbox id=btthroneENoBoost ><b>'+tx('Do not attempt Enhance if no boost items available')+'</b></td></tr></table>';
		Boosts += '<hr>';

		Boosts += '<table class="xtab" width="95%" cellspacing="0" cellpadding="0" align="center"><tr><td><b>'+tx('Upgrade')+'</b></td><td align=right>'+tx('Minimum Level')+':&nbsp;'+htmlSelector(TempLevels,Options.ThroneOptions.UpgradeBoostMinLevel, 'class=btInput id=btthroneUpgradeBoostMinLevel')+'</td></tr></table><br>';
		Boosts += '<table width=95% class=xtab align=center cellpadding=0 cellspacing=0><tr style="vertical-align:top;">';
		for (var i = 0; i < t.UpgradeItemList.length; i++) {
			Boosts += '<td width=30 rowspan=2><img height=28 src="'+IMGURL+'items/70/'+t.UpgradeItemList[i]+'.jpg" title="'+itemTitle(t.UpgradeItemList[i],true)+'" /></td><td>(<span id=btthroneUse'+t.UpgradeItemTrans[i]+'Label>' + parseIntNan(uW.ksoItems[t.UpgradeItemList[i]].count) + '</span>)</td>';
		}
		Boosts += '</tr><tr style="vertical-align:top;">';
		for (var i = 0; i < t.UpgradeItemList.length; i++) {
			Boosts += '<td><input type=checkbox id="btthrone'+t.UpgradeItemTrans[i]+'" '+(Options.ThroneOptions["Use"+t.UpgradeItemTrans[i]]?"CHECKED" : "")+'></td>';
		}
		Boosts += '</tr></table>';
		Boosts += '<table width=95% class=xtab align=center cellpadding=0 cellspacing=0><tr><td><input type=checkbox id=btthroneUOVM >'+tx("Automatically use Masters Tokens for levels between")+' '+htmlSelector(MasterLevels,Options.ThroneOptions.UpgradeUseMastersMin, 'class=btInput id=btthroneUOVMItemMin')+' '+tx('and')+' '+htmlSelector(MasterLevels,Options.ThroneOptions.UpgradeUseMastersMax, 'class=btInput id=btthroneUOVMItemMax')+'</td></tr></table>';
		Boosts += '<table width=95% class=xtab align=center cellpadding=0 cellspacing=0><tr><td><input type=checkbox id=btthroneUOVP >'+tx("Automatically use Prospector's Tokens (25% more chance) for levels between")+' '+htmlSelector(TokenLevels,Options.ThroneOptions.UpgradeUseProspectorMin, 'class=btInput id=btthroneUOVPItemMin')+' '+tx('and')+' '+htmlSelector(TokenLevels,Options.ThroneOptions.UpgradeUseProspectorMax, 'class=btInput id=btthroneUOVPItemMax')+'</td></tr></table>';
		Boosts += '<table width=95% class=xtab align=center cellpadding=0 cellspacing=0><tr><td><input type=checkbox id=btthroneUOVO >'+tx("Automatically use Opportunity's Tokens (10% more chance) for levels between")+' '+htmlSelector(TokenLevels,Options.ThroneOptions.UpgradeUseOpportunityMin, 'class=btInput id=btthroneUOVOItemMin')+' '+tx('and')+' '+htmlSelector(TokenLevels,Options.ThroneOptions.UpgradeUseOpportunityMax, 'class=btInput id=btthroneUOVOItemMax')+'</td></tr></table>';
		Boosts += '<table width=95% class=xtab align=center cellpadding=0 cellspacing=0><tr><td><input type=checkbox id=btthroneUOVF >'+tx("Automatically use Fortune's Tokens (5% more chance) for levels between")+' '+htmlSelector(TokenLevels,Options.ThroneOptions.UpgradeUseFortuneMin, 'class=btInput id=btthroneUOVFItemMin')+' '+tx('and')+' '+htmlSelector(TokenLevels,Options.ThroneOptions.UpgradeUseFortuneMax, 'class=btInput id=btthroneUOVFItemMax')+'</td></tr></table>';
		Boosts += '<table width=95% class=xtab align=center cellpadding=0 cellspacing=0><tr><td><input type=checkbox id=btthroneULevelOnly ><b>'+tx('Only use Tokens for the current level')+'</b></td></tr></table>';
		Boosts += '<table width=95% class=xtab align=center cellpadding=0 cellspacing=0><tr><td><input type=checkbox id=btthroneUNoBoost ><b>'+tx('Do not attempt Upgrade if no boost items available')+'</b></td></tr></table>';

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

		m += '<div class="divHeader">'+tx('ADD CARDS')+'</div>';
		m += '<table class="xtab" width=100%><tr>';
		m += '<td><b>'+uW.g_js_strings.commonstr.item+':&nbsp;</b><select id="btthroneUpgradeItem">';
		m += '</select>&nbsp;'+strButton8(uW.g_js_strings.commonstr.upgrade,'id=btthroneUpgradeUpgrade')+'&nbsp;'+strButton8(uW.g_js_strings.commonstr.enhance,'id=btthroneUpgradeEnhance')+'</td>';
		m += '<td align=right>'+tx('Default Enhance Quality')+':&nbsp;'+htmlSelector(MasterQuals,Options.ThroneOptions.UpgradeDefaultQuality, 'class=btInput id=btthroneUpgradeDefaultQuality')+'</td></tr>';
		m += '<tr><td>&nbsp;</td><td align=right>'+tx('Default Upgrade Level')+':&nbsp;'+htmlSelector(MasterLevels,Options.ThroneOptions.UpgradeDefaultLevel, 'class=btInput id=btthroneUpgradeDefaultLevel')+'</td></tr>';
		m += '</table><hr><TABLE class=xtab cellpadding=0 cellspacing=0>';
		m += '<tr><td>'+tx('Enhance ALL Qualities')+'&nbsp;</td><td>'+htmlSelector(TempQuals,0, 'class=btInput id=btthroneEnhanceAllFrom')+'&nbsp;</td><td>'+tx('and below')+'&nbsp;<input type=checkbox style="vertical-align:bottom;" id=btthroneEnhanceAllBelow>&nbsp;</td><td>'+tx('to Quality')+'&nbsp;</td><td>'+htmlSelector(MasterQuals,6, 'class=btInput id=btthroneEnhanceAllTo')+'&nbsp;</td><td>'+strButton8(tx('Add to Queue'),'id=btthroneEnhanceAllAdd')+'</td></tr>';
		m += '<tr><td>'+tx('Upgrade ALL Levels')+'&nbsp;</td><td>'+htmlSelector(TempLevels,0, 'class=btInput id=btthroneUpgradeAllFrom')+'&nbsp;</td><td>'+tx('and below')+'&nbsp;<input type=checkbox style="vertical-align:bottom;" id=btthroneUpgradeAllBelow>&nbsp;</td><td>'+tx('to Level')+'&nbsp;</td><td>'+htmlSelector(MasterLevels,CM.MAX_MASTERS_TOKEN_LEVEL, 'class=btInput id=btthroneUpgradeAllTo')+'&nbsp;</td><td>'+strButton8(tx('Add to Queue'),'id=btthroneUpgradeAllAdd')+'</td></tr>';
		m += '</table>';
		m += '<div id=btUpgradeMessages align=center>&nbsp;</div>';
		m += '<div class="divHeader"><TABLE width=100% cellspacing=0><TR><TD class=xtab width=100>&nbsp;</td><TD class=xtab align=center>'+tx('UPGRADE QUEUE')+'</td><TD class=xtab width=100 align=right><span id=btthroneUpgradeQueueCount></span>&nbsp;'+tx('Cards')+'</TD></tr></table></div>';
		m += '<div id=btthroneUpgradeQueue style="min-height:300px;max-height:500px;overflow-y:scroll;">&nbsp;</div>';

		div.innerHTML = m;

		t.fillUpgradeItemDropdown();

		new CdispCityPicker('btupgrade_city', ById('btthroneUpgradeCity'), true, t.UpgradeCityButton, Options.ThroneOptions.UpgradeCityNum);

		ById('btthroneUpgradeOptionLink').addEventListener ('click', function () {ToggleMainDivDisplay("Throne",100,GlobalOptions.btWinSize.x,"btthroneUpgradeOption",false);}, false);
		ById('btthroneUpgradeBoostsLink').addEventListener ('click', function () {ToggleMainDivDisplay("Throne",100,GlobalOptions.btWinSize.x,"btthroneUpgradeBoosts",false);}, false);

		ChangeIntegerOption('ThroneOptions', 'btthroneUpgradeMinAether', 'UpgradeMinAether', 50000)
		ChangeIntegerOption('ThroneOptions', 'btthroneUpgradeInterval','UpgradeInterval',10);
		ToggleOption('ThroneOptions','btthroneUpgradeAnyCity','UpgradeAnyCity');
		ToggleOption('ThroneOptions','btthroneUpgradeOneItem','UpgradeOneItem');
		ToggleOption('ThroneOptions','btthroneUpgradeOneMax','UpgradeOneMax');
		ChangeIntegerOption('ThroneOptions', 'btthroneUpgradeOneMaxAttempts','UpgradeOneMaxAttempts',100);
		ToggleOption('ThroneOptions','btthroneWhisperToMe','WhisperToMe');
		ToggleOption('ThroneOptions','btthroneSendToInbox','SendToInbox');
		ChangeOption('ThroneOptions','btthroneUpgradeOverflow','UpgradeOverflow');

		ById('btAutoUpgradeState').addEventListener('click', function(){
			t.toggleAutoUpgradeState(this);
		}, false);

		ToggleOption('ThroneOptions','btthroneELPS','UseELPS');
		ToggleOption('ThroneOptions','btthroneEPS','UseEPS');
		ToggleOption('ThroneOptions','btthroneELMO','UseELMO');
		ToggleOption('ThroneOptions','btthroneEMO','UseEMO');
		ToggleOption('ThroneOptions','btthroneULPS','UseULPS');
		ToggleOption('ThroneOptions','btthroneUPS','UseUPS');
		ToggleOption('ThroneOptions','btthroneULLT','UseULLT');
		ToggleOption('ThroneOptions','btthroneULT','UseULT');
		ToggleOption('ThroneOptions','btthroneUSLT','UseUSLT');
		ToggleOption('ThroneOptions','btthroneUAT','UseUAT');

		ChangeIntegerOption('ThroneOptions', 'btthroneUpgradeBoostMinQuality', 'EnhanceBoostMinQuality', 0);
		ToggleOption('ThroneOptions','btthroneEOV','EnhanceUseMasters');
		ChangeIntegerOption('ThroneOptions', 'btthroneEOVItemMin', 'EnhanceUseMastersMin', 0);
		ChangeIntegerOption('ThroneOptions', 'btthroneEOVItemMax', 'EnhanceUseMastersMax', 6);
		ToggleOption('ThroneOptions','btthroneENoBoost','EnhanceNoBoosts');
		ToggleOption('ThroneOptions','btthroneELevelOnly','EnhanceBoostLevelOnly');

		ChangeIntegerOption('ThroneOptions', 'btthroneUpgradeBoostMinLevel', 'UpgradeBoostMinLevel', 3);
		ToggleOption('ThroneOptions','btthroneUOVM','UpgradeUseMasters');
		ChangeIntegerOption('ThroneOptions', 'btthroneUOVMItemMin', 'UpgradeUseMastersMin', 3);
		ChangeIntegerOption('ThroneOptions', 'btthroneUOVMItemMax', 'UpgradeUseMastersMax', 35);
		ToggleOption('ThroneOptions','btthroneUOVP','UpgradeUseProspector');
		ChangeIntegerOption('ThroneOptions', 'btthroneUOVPItemMin', 'UpgradeUseProspectorMin', 19);
		ChangeIntegerOption('ThroneOptions', 'btthroneUOVPItemMax', 'UpgradeUseProspectorMax', 35);
		ToggleOption('ThroneOptions','btthroneUOVO','UpgradeUseOpportunity');
		ChangeIntegerOption('ThroneOptions', 'btthroneUOVOItemMin', 'UpgradeUseOpportunityMin', 19);
		ChangeIntegerOption('ThroneOptions', 'btthroneUOVOItemMax', 'UpgradeUseOpportunityMax', 35);
		ToggleOption('ThroneOptions','btthroneUOVF','UpgradeUseFortune');
		ChangeIntegerOption('ThroneOptions', 'btthroneUOVFItemMin', 'UpgradeUseFortuneMin', 19);
		ChangeIntegerOption('ThroneOptions', 'btthroneUOVFItemMax', 'UpgradeUseFortuneMax', 35);
		ToggleOption('ThroneOptions','btthroneUNoBoost','UpgradeNoBoosts');
		ToggleOption('ThroneOptions','btthroneULevelOnly','UpgradeBoostLevelOnly');

		ChangeIntegerOption('ThroneOptions', 'btthroneUpgradeDefaultQuality', 'UpgradeDefaultQuality', 6);
		ChangeIntegerOption('ThroneOptions', 'btthroneUpgradeDefaultLevel', 'UpgradeDefaultLevel', 35);

		ById('btthroneUpgradeUpgrade').addEventListener('click', function () {
			t.addThroneQueue(ById('btthroneUpgradeItem').value,'upgrade',Options.ThroneOptions.UpgradeDefaultLevel);
		}, false);
		ById('btthroneUpgradeEnhance').addEventListener('click', function () {
			t.addThroneQueue(ById('btthroneUpgradeItem').value,'enhance',Options.ThroneOptions.UpgradeDefaultQuality);
		}, false);
		ById('btthroneUpgradeAllAdd').addEventListener('click', function () {
			for (var k in uW.kocThroneItems) {
				var throne_item = uW.kocThroneItems[k];
				if (throne_item && ((throne_item.level == parseIntNan(ById('btthroneUpgradeAllFrom').value)) || (throne_item.level < parseIntNan(ById('btthroneUpgradeAllFrom').value) && ById('btthroneUpgradeAllBelow').checked))) {
					t.addThroneQueue(throne_item.id,'upgrade',parseIntNan(ById('btthroneUpgradeAllTo').value),true);
				}
			}
			t.paintUpgradeQueue();
		}, false);
		ById('btthroneEnhanceAllAdd').addEventListener('click', function () {
			for (var k in uW.kocThroneItems) {
				var throne_item = uW.kocThroneItems[k];
				if (throne_item && ((throne_item.quality == parseIntNan(ById('btthroneEnhanceAllFrom').value)) || (throne_item.quality < parseIntNan(ById('btthroneEnhanceAllFrom').value) && ById('btthroneEnhanceAllBelow').checked))) {
					t.addThroneQueue(throne_item.id,'enhance',parseIntNan(ById('btthroneEnhanceAllTo').value),true);
				}
			}
			t.paintUpgradeQueue();
		}, false);

		t.paintUpgradeQueue();
		ResetFrameSize('btMain',100,GlobalOptions.btWinSize.x);
	},

	display_upgrader : function (){
		var t = Tabs.Throne;
		t.activepanel = "upgrader";
		t.fillUpgradeItemDropdown();
		t.paintUpgradeQueue();
		ResetFrameSize('btMain',100,GlobalOptions.btWinSize.x);
	},

	paint_repairer : function (){
		var t = Tabs.Throne;
		var div = ById("btThroneDiv_Repairer");

		TempQuals = {};
		for (k=0;k<cardQuality.length;k++) {
			var quality = cardQuality[k].toLowerCase();
			TempQuals[k] = uW.g_js_strings.throneRoom[quality];
		}
		TempLevels = {};
		for (var type_index = 0; type_index < CM.MAX_MASTERS_TOKEN_LEVEL + 1; ++type_index) {
			TempLevels[type_index] = type_index;
		}

		var m = '<DIV class=divHeader align=center>'+tx('AUTOMATED THRONE ROOM BREAK/REPAIR')+'</div>';
		m += '<table width=100% class=xtab><tr><td width=30%>&nbsp;</td><td colspan=2 align=center><INPUT id=btAutoRepairState type=submit value="'+tx("Repair")+' = '+ (Options.ThroneOptions.RepairRunning?'ON':'OFF')+'"></td><td width=30% align=right>&nbsp;</td></tr></table>';

		m += '<div class="divHeader">'+tx('BREAK THRONE CARDS')+'</div>';
		m += '<table class="xtab" width=100%>';
		m += '<tr><td align=left><input id=btthroneBreakIgnorePreset type=checkbox '+(Options.ThroneOptions.BreakIgnorePreset ? ' CHECKED' : '') + '>&nbsp;'+tx('Ignore any cards in a preset')+'</td><td align=right>'+tx('Maximum throne might to break (Zero for no maximum)')+'&nbsp;<input class=btInput id=btthroneBreakMaxMight type=text size=14 maxlength=14 value="'+Options.ThroneOptions.BreakMaxMight+'"></td></tr>';
		m += '<tr><td align=left colspan=2><input id=btthroneBreakRepairAuto type=checkbox '+(Options.ThroneOptions.BreakRepairAuto ? ' CHECKED' : '') + '>&nbsp;'+tx('Automatically add cards broken to the Repair queue')+'</td></tr>';
		m += '<tr><td align=center colspan=2>'+tx('Break cards between levels')+'&nbsp;'+htmlSelector(TempLevels,Options.ThroneOptions.BreakMinLevel, 'class=btInput id=btthroneBreakMinLevel')+'&nbsp;'+tx('and')+'&nbsp;'+htmlSelector(TempLevels,Options.ThroneOptions.BreakMaxLevel, 'class=btInput id=btthroneBreakMaxLevel')+'</td></tr>';
		m += '<tr><td align=center colspan=2>'+strButton14(tx('Break Throne Room'),'id=btthroneBreakThrone','red14')+'</td></tr>';
		m += '<tr><td align=center colspan=2><div id=btthroneBreakMessages><span class=boldRed>'+tx('WARNING - This action may consume a lot of Aetherstone')+'!</span></div></td></tr>';
		m += '</table>';

		m += '<div class="divHeader" align="center">'+tx('REPAIR SPEEDUPS')+'</div>';
		m += '<div id=btthroneRepairSpeedup align=center><table width=100% class=xtab><tr><td><div align=center>';

		var Speedups = '<table class="xtab" width="95%" cellspacing="0" cellpadding="0" align="center"><tr><td>'+tx('Minimum Quality')+':&nbsp;'+htmlSelector(TempQuals,Options.ThroneOptions.RepairSpeedupMinQuality, 'class=btInput id=btthroneRepairSpeedupMinQuality')+'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'+tx('Minimum Level')+':&nbsp;'+htmlSelector(TempLevels,Options.ThroneOptions.RepairSpeedupMinLevel, 'class=btInput id=btthroneRepairSpeedupMinLevel')+'</td></tr></table><br>';
		Speedups += '<table width=95% class=xtab align=center cellpadding=0 cellspacing=0><tr style="vertical-align:top;">';
		for (var i = 0; i < t.SpeedupItemList.length; i++) {
			Speedups += '<td width=30 rowspan=2><img height=28 src="'+IMGURL+'items/70/'+t.SpeedupItemList[i]+'.jpg" title="'+itemTitle(t.SpeedupItemList[i],true)+'\n'+tx(HourGlassHint[i])+'" /></td><td>(<span id=btthroneUse'+t.SpeedupItemTrans[i]+'Label>' + parseIntNan(uW.ksoItems[t.SpeedupItemList[i]].count) + '</span>)</td>';
		}
		Speedups += '</tr><tr style="vertical-align:top;">';
		for (var i = 0; i < t.SpeedupItemList.length; i++) {
			Speedups += '<td><input type=checkbox id="btthrone'+t.SpeedupItemTrans[i]+'" '+(Options.ThroneOptions["Use"+t.SpeedupItemTrans[i]]?"CHECKED" : "")+'></td>';
		}
		Speedups += '<td width=70 rowspan=2 align=right><INPUT id=btthroneHelp type=submit value="'+tx('HELP')+'!"></td>';
		Speedups += '</tr></table></td></tr>';
		Speedups += '<tr><td><div align=center><table width=95% class=xtab align=center cellpadding=0 cellspacing=0><tr><td><input type=checkbox id=btthroneOV >'+tx('Override above by always using')+' '+htmlSelector(HourGlassName,Options.ThroneOptions.OverrideSpeedup, 'id=btthroneOVItem') + ' '+tx('when more than')+' ';
		Speedups += '<INPUT style="width: 30px;text-align:right;" id="btthroneOVHours" type=text maxlength=4 >&nbsp;'+uW.g_js_strings.timestr.timehr+'&nbsp;<INPUT style="width: 30px;text-align:right;" id="btthroneOVMinutes" type=text maxlength=4 >&nbsp;'+uW.g_js_strings.timestr.timemin+' '+tx('remaining')+'.</td></tr></table></div></td></tr>';

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

		m += '<div class="divHeader">'+tx('REPAIR THRONE CARDS')+'</div>';
		m += '<table class="xtab" width=100%><tr>';
		m += '<td><b>'+uW.g_js_strings.commonstr.item+':&nbsp;</b><select id="btthroneRepairItem">';
		m += '</select>&nbsp;'+strButton8(uW.g_js_strings.throneRoom.button_repair,'id=btthroneRepairButton')+'</td></tr>';
		m += '</table><hr><TABLE class=xtab cellpadding=0 cellspacing=0>';

		m += '<tr><td>'+tx('Repair ALL broken cards between levels')+'&nbsp;</td><td>'+htmlSelector(TempLevels,0, 'class=btInput id=btthroneRepairAllFrom')+'&nbsp;</td><td>'+tx('and')+'&nbsp;'+htmlSelector(TempLevels,CM.MAX_MASTERS_TOKEN_LEVEL, 'class=btInput id=btthroneRepairAllTo')+'&nbsp;</td><td>'+strButton8(tx('Add to Queue'),'id=btthroneRepairAllAdd')+'</td></tr>';
		m += '</table>';
		m += '<div id=btRepairMessages align=center>&nbsp;</div>';
		m += '<div class="divHeader"><TABLE width=100% cellspacing=0><TR><TD class=xtab width=100>&nbsp;</td><TD class=xtab align=center>'+tx('REPAIR QUEUE')+'</td><TD class=xtab width=100 align=right><span id=btthroneRepairQueueCount></span>&nbsp;'+tx('Cards')+'</TD></tr></table></div>';
		m += '<div id=btthroneRepairQueue style="min-height:300px;max-height:500px;overflow-y:scroll;">&nbsp;</div>';

		div.innerHTML = m;

		t.fillRepairItemDropdown();

		ById('btAutoRepairState').addEventListener('click', function(){
			t.toggleAutoRepairState(this);
		}, false);

		ById('btthroneHelp').addEventListener ('click', t.helpPop, false);

		ToggleOption('ThroneOptions','btthroneSH','UseSH');
		ToggleOption('ThroneOptions','btthroneKH','UseKH');
		ToggleOption('ThroneOptions','btthroneGH','UseGH');
		ToggleOption('ThroneOptions','btthroneMH','UseMH');
		ToggleOption('ThroneOptions','btthroneAH','UseAH');
		ToggleOption('ThroneOptions','btthroneRH','UseRH');
		ToggleOption('ThroneOptions','btthroneDH','UseDH');
		ToggleOption('ThroneOptions','btthroneEH','UseEH');
		ToggleOption('ThroneOptions','btthroneOV','UseOverride');

		ChangeIntegerOption('ThroneOptions','btthroneOVItem','OverrideSpeedup');
		ChangeIntegerOption('ThroneOptions','btthroneOVHours','OverrideHours');
		ChangeIntegerOption('ThroneOptions','btthroneOVMinutes','OverrideMinutes');

		ChangeIntegerOption('ThroneOptions', 'btthroneRepairSpeedupMinQuality', 'RepairSpeedupMinQuality', 1);
		ChangeIntegerOption('ThroneOptions', 'btthroneRepairSpeedupMinLevel', 'RepairSpeedupMinLevel', 1);

		ChangeIntegerOption('ThroneOptions', 'btthroneBreakMinLevel', 'BreakMinLevel', 0);
		ChangeIntegerOption('ThroneOptions', 'btthroneBreakMaxLevel', 'BreakMaxLevel', 0);
		ChangeIntegerOption('ThroneOptions','btthroneBreakMaxMight','BreakMaxMight',0);
		ToggleOption('ThroneOptions','btthroneBreakIgnorePreset','BreakIgnorePreset');
		ToggleOption('ThroneOptions','btthroneBreakRepairAuto','BreakRepairAuto');

		ById('btthroneRepairButton').addEventListener('click', function () {
			t.addThroneRepairQueue(ById('btthroneRepairItem').value);
		}, false);

		ById('btthroneRepairAllAdd').addEventListener('click', function () {
			for (var k in uW.kocThroneItems) {
				var throne_item = uW.kocThroneItems[k];
				if (throne_item && throne_item.isBroken && (throne_item.level >= parseIntNan(ById('btthroneRepairAllFrom').value)) && (throne_item.level <= parseIntNan(ById('btthroneRepairAllTo').value))) {
					t.addThroneRepairQueue(throne_item.id,true);
				}
			}
			t.paintRepairQueue();
		}, false);

		ById('btthroneBreakThrone').addEventListener('click', t.BreakThroneButtonClicked, false);

		ResetFrameSize('btMain',100,GlobalOptions.btWinSize.x);
	},

	display_repairer : function (){
		var t = Tabs.Throne;
		t.activepanel = "repairer";
		t.fillRepairItemDropdown();
		t.paintRepairQueue();
		ResetFrameSize('btMain',100,GlobalOptions.btWinSize.x);
	},

	paint_salvager : function (){
		var t = Tabs.Throne;
		var div = ById("btThroneDiv_Salvager");

		TempQuals = {};
		for (k=0;k<cardQuality.length;k++) {
			var quality = cardQuality[k].toLowerCase();
			TempQuals[k] = uW.g_js_strings.throneRoom[quality];
		}

		var m = '<DIV class=divHeader align=center>'+tx('AUTOMATED THRONE ROOM SALVAGE')+'</div>';
		m += '<table width=100% class=xtab><tr><td width=30%>&nbsp;</td><td colspan=2 align=center><INPUT id=btAutoSalvageState type=submit value="'+tx("Salvage")+' = '+ (Options.ThroneOptions.SalvageRunning?'ON':'OFF')+'"></td><td width=30% align=right>&nbsp;</td></tr></table>';
		m += '<a id=btthroneSalvageOptionLink class=divLink><div class="divHeader" align="left"><img id=btthroneSalvageOptionArrow height="10" src="'+RightArrow+'">&nbsp;'+tx('OPTIONS')+'</div></a>';
		m += '<div id=btthroneSalvageOption align=center class="divHide">';
		m += '<TABLE class=xtab width="100%">';
		m += '<tr><td width=30>&nbsp;</td><td>'+tx('Deposit Aetherstone in')+'&nbsp;<div style="display:inline;" id=btthroneSalvageCity></div></td>';
		m += '<td align=right>'+tx('Keep all')+'&nbsp;'+htmlSelector(TempQuals,Options.ThroneOptions.SalvageMaxQuality, 'id=btthroneSalvageQuality class=btInput')+'&nbsp;'+tx('cards and above')+'</td></tr>';
		m += '<tr><td width=30>&nbsp;</td><td>'+tx('Maximum Aetherstone')+':&nbsp;<input class=btInput id=btthroneSalvageMaxAether type=text size=7 maxlength=8 value="' + Options.ThroneOptions.SalvageMaxAether + '"></td>';
		m += '<td align=right>'+tx('Keep first')+'&nbsp;<input class=btInput id=btthroneSalvageKeepFirst type=text size=2 maxlength=3 value="' + Options.ThroneOptions.SalvageKeepFirst + '"/>&nbsp;'+tx('cards')+'</td></tr>';
		m += '<tr><td><input id=btthroneSalvageAnyCity type=checkbox '+(Options.ThroneOptions.SalvageAnyCity ? ' CHECKED' : '') + '></td><td colspan=2>'+tx('When full, deposit Aetherstone in any city')+':-&nbsp;&nbsp;&nbsp;'+tx('Overflow Method')+':&nbsp;'+htmlSelector({order:"City Order",lowest:"Lowest Aetherstone"},Options.ThroneOptions.SalvageOverflow, 'class=btInput id=btthroneSalvageOverflow')+'</td></tr>';
		m += '<tr><td><input id=btthroneSalvageUpgradeFirst type=checkbox '+(Options.ThroneOptions.SalvageUpgradeFirst ? ' CHECKED' : '') + '></td><td colspan=2>'+tx('Upgrade')+'&nbsp;'+htmlSelector(TempQuals,Options.ThroneOptions.SalvageUpgradeFirstMaxQuality, 'class=btInput id=btthroneSalvageUpgradeFirstMaxQuality')+'&nbsp;'+tx('cards and below to +1 before salvaging')+'</td></tr>';
		m += '<tr><td><input id=btthroneSalvageUpgradeAuto type=checkbox '+(Options.ThroneOptions.SalvageUpgradeAuto ? ' CHECKED' : '') + '></td><td colspan=2>'+tx('Automatically add any cards that match a salvage rule to the Enhance/Upgrade queues')+'</td></tr>';

		m += '</table>';
		m += '</div><div id=btthroneSalvagePanel></div>';
		m += '<div id=btthroneSalvageMessages align=center>&nbsp;</div>';

		div.innerHTML = m;

		new CdispCityPicker('btsalvage_city', ById('btthroneSalvageCity'), true, t.SalvageCityButton, Options.ThroneOptions.SalvageCityNum);

		ById('btthroneSalvageOptionLink').addEventListener ('click', function () {ToggleMainDivDisplay("Throne",100,GlobalOptions.btWinSize.x,"btthroneSalvageOption",false);}, false);

		ChangeIntegerOption('ThroneOptions', 'btthroneSalvageMaxAether', 'SalvageMaxAether', 2000000)
		ChangeIntegerOption('ThroneOptions', 'btthroneSalvageQuality', 'SalvageMaxQuality', 3)
		ChangeIntegerOption('ThroneOptions', 'btthroneSalvageKeepFirst', 'SalvageKeepFirst', 40)
		ToggleOption('ThroneOptions','btthroneSalvageAnyCity','SalvageAnyCity');
		ChangeOption('ThroneOptions','btthroneSalvageOverflow','SalvageOverflow');
		ToggleOption('ThroneOptions','btthroneSalvageUpgradeFirst','SalvageUpgradeFirst');
		ToggleOption('ThroneOptions','btthroneSalvageUpgradeAuto','SalvageUpgradeAuto');
		ChangeIntegerOption('ThroneOptions','btthroneSalvageUpgradeFirstMaxQuality','SalvageUpgradeFirstMaxQuality',2);

		ById('btAutoSalvageState').addEventListener('click', function(){
			t.toggleAutoSalvageState(this);
		}, false);

		t.paint_salvage_rules();

		ResetFrameSize('btMain',100,GlobalOptions.btWinSize.x);
	},

	paint_salvage_rules : function () {
		var t = Tabs.Throne;

		var m = '<div class="divHeader"><TABLE width=100% cellspacing=0><TR><TD class=xtab width=100>&nbsp;</td><TD class=xtab align=center>'+tx('SALVAGE RULES')+'</td><TD class=xtab width=100 align=right><span id=btthroneSalvageRulesCount></span>&nbsp;'+tx('Rules')+'</TD></tr></table></div>';
		m += '<div align="center"><br><TABLE cellSpacing=0 width=98% height=0% class=xtab><tr><td>'+strButton20(tx('New Simple Rule'), 'id=btthroneNewSimpleRule')+'&nbsp;';
		if (GlobalOptions.btWinSize.x == 750) m += '<br>';
		m += strButton20(tx('New Advanced Rule'), 'id=btthroneNewAdvancedRule')+'</td><td align=right width=90px>';
		m += tx('Effect')+':&nbsp;<select id=btthroneAutoLoadEffect class=btInput>';
		m += '<option value="0">-- '+tx('Select')+' --</option>';
		for (var efx in CM.thronestats.tiers) {
			m += '<option value="' + efx + '">' + uW.g_js_strings.effects["name_" + efx].replace("%1$s", "nn% ") + '</option>';
		}
		m += '</select>&nbsp;';
		m += strButton20(tx('Auto-Create Rules'), 'id=btthroneAutoLoadRule')+'&nbsp;';
		if (GlobalOptions.btWinSize.x == 750) m += '<br>';
		m += strButton20(tx('Delete ALL Rules'), 'id=btthroneClearRules')+'</td></tr></table></div>';
		m += '<br><div align=center><b>'+tx('Automatic Salvager will keep all cards matching any of these rules')+'</b></div>';

		function sortFunc(a, b) {
			if (typeof (a[Options.ThroneOptions.SalvageSortColNum]) == 'number') {
				if (Options.ThroneOptions.SalvageSortDir > 0)
					return a[Options.ThroneOptions.SalvageSortColNum] - b[Options.ThroneOptions.SalvageSortColNum];
				else
					return b[Options.ThroneOptions.SalvageSortColNum] - a[Options.ThroneOptions.SalvageSortColNum];
			} else if (typeof (a[Options.ThroneOptions.SalvageSortColNum]) == 'boolean') {
				return 0;
			} else {
				if (Options.ThroneOptions.SalvageSortDir > 0)
					return a[Options.ThroneOptions.SalvageSortColNum].localeCompare(b[Options.ThroneOptions.SalvageSortColNum]);
				else
					return b[Options.ThroneOptions.SalvageSortColNum].localeCompare(a[Options.ThroneOptions.SalvageSortColNum]);
			}
		}

		var dat = [];
		var EmptyDatabase = true;
		t.TotalRules = Options.ThroneOptions.SalvageRuleSet.length;

		for (var k=0;k<Options.ThroneOptions.SalvageRuleSet.length;k++) {
			var salvage_rule = Options.ThroneOptions.SalvageRuleSet[k];
			EmptyDatabase = false;
			dat.push([(k+1),(salvage_rule.type=="any"?tx("Any"):uW.g_js_strings.throneRoom[salvage_rule.type]),(salvage_rule.faction=="any"?tx("Any"):uW.g_js_strings.commonstr[salvage_rule.faction]),t.FormatSalvageCondition(salvage_rule.conditions,(salvage_rule.advancedrule||false))]);
		}

		if (!EmptyDatabase) {
			dat.sort(sortFunc);

			m += '<div style="width:100%;overflow-x:auto;min-height:300px;max-height:400px;overflow-y:auto;" align="center"><table width=98% cellspacing=0 cellpadding=0 class=xtab>';
			m += '<TR><TD width=40 align=left nowrap><A id=SalvageCol0 onclick="btSalvageClickSort(this)" class="buttonv2 std blue" style="padding-left:0px;padding-right:0px;"><span style="display:inline-block;width:100%;">&nbsp;'+tx('Seq')+'&nbsp;</span></a></td>\
				<TD width=80 align=left nowrap><A id=SalvageCol1 onclick="btSalvageClickSort(this)" class="buttonv2 std blue" style="padding-left:0px;padding-right:0px;"><span style="display:inline-block;width:100%;">&nbsp;'+uW.g_js_strings.commonstr.type+'&nbsp;</span></a></td>\
				<TD width=80 nowrap><A id=SalvageCol2 onclick="btSalvageClickSort(this)" class="buttonv2 std blue" style="padding-left:0px;padding-right:0px;"><span style="display:inline-block;width:100%;">&nbsp;'+uW.g_js_strings.commonstr.faction+'&nbsp;</span></a></td>\
				<TD align=right nowrap><A id=SalvageCol3 onclick="btSalvageClickSort(this)" class="buttonv2 std blue" style="padding-left:0px;padding-right:0px;"><span style="display:inline-block;width:100%;">&nbsp;'+tx('Conditions')+'&nbsp;</span></a></td>\
				<TD width=80 align=left nowrap><A class="buttonv2 std blue" style="padding-left:0px;padding-right:0px;"><span style="display:inline-block;width:100%;">&nbsp;'+tx('Action')+'&nbsp;</span></a></td>\
				</tr>';

			var r = 0;

			for (var G=0;G<dat.length;G++) {
				r=r+1;
				rowClass = 'evenRow';
				var rem = (r % 2);
				if (rem == 1) rowClass = 'oddRow';
				var n = dat[G][0]-1;

				m += '<tr class='+rowClass+'><td class=xtab align=center valign=top>' + dat[G][0] + '</td>';
				m += '<td valign=top>' + dat[G][1] + '</td>';
				m += '<td valign=top>' + dat[G][2] + '</td>';
				m += '<td valign=top>' + dat[G][3] + '</td>';
				m += '<td align=right valign=top><a id="btthroneSalvageRuleEdit'+n+'" class="inlineButton btButton brown8" onclick="btthroneSalvageEditRule('+n+')"><span>Edit</span></a>&nbsp;<a id="btthroneSalvageRuleDelete'+n+'" class="inlineButton btButton brown8" onclick="btthroneSalvageDeleteRule('+n+')"><span>Del</span></a></td></tr>';
			}
			m += '</table></div>';
		}
		else {
			m += '<div align=center><br><br><span style="opacity:0.3;">'+tx('No salvage rules defined')+'</div><br><br></div>';
		}
		m += '<div align=right><input class=btInput id=btthronesalvageSave type=button value="'+tx("Save Rules")+'">&nbsp;<input class=btInput id=btthronesalvageLoad type=button value="'+tx("Load Rules")+'">&nbsp;<input class=btInput id=btthronesalvageLoadFile type=file></div>';

		ById('btthroneSalvagePanel').innerHTML = m;

		ById('btthroneSalvageRulesCount').innerHTML = t.TotalRules;
		if (!EmptyDatabase) {
			ById('SalvageCol' + Options.ThroneOptions.SalvageSortColNum).className = 'buttonv2 std green';
		}

		ById('btthroneNewSimpleRule').addEventListener ('click', function() {t.SalvageNewRule(false);}, false);
		ById('btthroneNewAdvancedRule').addEventListener ('click', function() {t.SalvageNewRule(true);}, false);
		ById('btthroneClearRules').addEventListener ('click', function() {t.SalvageClearRules();}, false);

		ById('btthroneAutoLoadRule').addEventListener('click', function () {
			var effectId = ById('btthroneAutoLoadEffect').value;
			if (effectId == 0) {
				ById('btthroneSalvageMessages').innerHTML = tx('Please select an effect');
				return;
			}
			var GotRules = false;
			for (var category in t.AdvancedStatsGrid) {
				var faction = 'any';
				var type = category;
				var conditions = [];
				for (var i=1;i<6;i++) {
					if (t.AdvancedStatsGrid[category][i][effectId] == 1) {
						GotRules = true;
						var slots = [];
						for (var slotChecker = 1; slotChecker < 6; slotChecker++) slots.push(slotChecker==i);
						var buffDebuff = "b";
						var ruleEffect = effectId;
						if (DebuffEffects.indexOf(parseInt(effectId))!=-1) {
							buffDebuff = "d";
							for (var efx in EffectDebuffs) {
								if (EffectDebuffs[efx]==effectId) {
									ruleEffect = efx;
									break;
								}
							}
						}
						var c = new t.ThroneCondition(true, 1, ruleEffect, buffDebuff, slots);
						conditions.push(c);
					}
				}
				if (conditions.length > 0) {
					var rule = new t.ThroneRule(type, faction, conditions, true);
					t.SalvageAddRule(rule);
				}
			}
			saveOptions();
			if (GotRules) { ById('btthroneSalvageMessages').innerHTML = tx("Salvage rules automatically generated")+"!"; }
			else { ById('btthroneSalvageMessages').innerHTML = tx("No rules found")+" :("; }
			t.paint_salvage_rules();
		}, false);

		ById('btthronesalvageSave').addEventListener ('click',function() {
			var Export = {};
			Export.SalvageRuleSet = Options.ThroneOptions.SalvageRuleSet;
			uriContent = 'data:application/octet-stream;content-disposition:attachment;filename=file.txt,' + encodeURIComponent(JSON2.stringify(Export));
			Tabs.Options.saveConfig(uriContent,'throne_salvage_'+getServerId()+'_'+uW.tvuid+'.txt');
		},false);

		ById('btthronesalvageLoad').addEventListener ('click',function() {
			ById('btthroneSalvageMessages').innerHTML = '&nbsp;'
			var fileInput = ById("btthronesalvageLoadFile");
			var files = fileInput.files;
			if (files.length == 0) {
				ById('btthroneSalvageMessages').innerHTML = '<span style="color:#800;">'+tx('Please select a salvage rules file')+'</span>';
				return;
			}
			var file = files[0];

			var reader = new FileReader();

			reader.onload = function (e) {
				var Import = JSON2.parse(e.target.result);
				if (Import.SalvageRuleSet) {
					for (var k=0;k<Import.SalvageRuleSet.length;k++) {
						var faction = Import.SalvageRuleSet[k].faction;
						var type = Import.SalvageRuleSet[k].type;
						var advanced = Import.SalvageRuleSet[k].advancedrule||false;
						var conditions = [];
						for (var i=0;i<Import.SalvageRuleSet[k].conditions.length;i++) {
							var cond = Import.SalvageRuleSet[k].conditions[i];
							var c = new t.ThroneCondition(cond.mustHave, cond.number, cond.effect, cond.buffType, cond.slots);
							conditions.push(c);
						}
						var rule = new t.ThroneRule(type, faction, conditions, advanced);
						t.SalvageAddRule(rule);
					}
					saveOptions();
					ById('btthroneSalvageMessages').innerHTML = tx('New salvage rules loaded');
					t.SalvageItems = []; // force reset of items to salvage
					t.paint_salvage_rules();
				}
				else {
					if (matTypeof(Import)=="array") { // TCO RULE SET
						for (var k=0;k<Import.length;k++) {
							var faction = Import[k].faction||"any";
							var type = Import[k].type||"any";
							var advanced = Import.advancedrule||false;
							var conditions = [];
							if (Import[k].conditions) {
								for (var i=0;i<Import[k].conditions.length;i++) {
									var cond = Import[k].conditions[i];
									var NewEffect = t.getEffect(cond.effect);
									if (NewEffect!="") {
										var c = new t.ThroneCondition(cond.mustHave, cond.number, NewEffect, cond.buffType, cond.slots);
										conditions.push(c);
									}
								}
							}
							var rule = new t.ThroneRule(type, faction, conditions, advanced);
							t.SalvageAddRule(rule);
						}
						saveOptions();
						ById('btthroneSalvageMessages').innerHTML = tx('TCO salvage rules imported - PLEASE CHECK!');
						t.SalvageItems = []; // force reset of items to salvage
						t.paint_salvage_rules();
					}
					else {
						ById('btthroneSalvageMessages').innerHTML = tx('Invalid File')+'!';
					}
				}
			};
			reader.readAsText(file);
		},false);

		ResetFrameSize('btMain',100,GlobalOptions.btWinSize.x);
	},

	display_salvager : function (){
		var t = Tabs.Throne;
		t.activepanel = "salvager";
		ResetFrameSize('btMain',100,GlobalOptions.btWinSize.x);
	},

	paint_jewels : function () {
		var t = Tabs.Throne;
		var div = ById("btThroneDiv_Jewels");

		t.BuildJewelList();

		var m = '<div class="divHeader" align="center">'+tx('THRONE ROOM JEWELS')+'</div>';
		m += '<table width=100% class=xtab><tr><td width=30%>&nbsp;</td><td colspan=2 align=center><INPUT id=btAutoJewelState type=submit value="'+tx("Jewel Salvage")+' = '+ (Options.ThroneOptions.JewelSalvageRunning?'ON':'OFF')+'"></td><td width=30% align=right>&nbsp;</td></tr></table>';
		m += '<div class="divHeader" align="center">'+tx('FILTERS')+'</div>';
		m += '<table width=100% cellpadding=0 cellspacing=0 class=xtab><tr><td>';
		m += '<table cellpadding=0 cellspacing=0 class=xtab>';
		m += '<tr><td style="padding-top:5px;"><b>'+tx('Effects')+'</b></td><td style="padding-top:5px;"><b>'+tx('Quality')+'</b></td></tr>';
		m += '<tr><td><div id=btthroneJewelEffectFilter style="width:300px;border:2px solid #ccc;height:96px;overflow-y:scroll;background-color:white;">';
		for (k=0;k<t.JewelEffects.length;k++) {
			var effect = t.JewelEffects[k];
			m += '<INPUT id=btthroneJewelEffect_'+effect+' type=checkbox CHECKED />'+CM.ThroneController.getEffectName(effect)+'<br />';
		}
		m += '</div></td>';
		m += '<td><div id=btthroneJewelQualityFilter style="width:100px;border:2px solid #ccc;height:96px;overflow-y:scroll;background-color: white;">';
		for (k=0;k<t.JewelQuality.length;k++) {
			m += '<INPUT id=btthroneJewelQuality_'+(k+1)+' type=checkbox CHECKED />'+t.JewelQuality[k]+'<br />';
		}
		m += '</div></td></tr>';
		m += '<tr><td style="padding-bottom:5px;">'+strButton8('All','id=btthroneJewelEffectAll onclick="btthroneSelectAllJewelEffect()"')+'&nbsp;'+strButton8('None','id=btthroneJewelEffectNone onclick="btthroneSelectNoneJewelEffect()"')+'</td>';
		m += '<td style="padding-bottom:5px;">'+strButton8('All','id=btthroneJewelQualityAll onclick="btthroneSelectAllJewelQuality()"')+'&nbsp;'+strButton8('None','id=btthroneJewelQualityNone onclick="btthroneSelectNoneJewelQuality()"')+'</td></tr>';

		m += '</table>';
		m += '</td><td style="padding-top:5px;" align=right valign=bottom><div id=btthroneJewelTotal align=right>&nbsp;</div><div>'+strButton14(tx('Refresh Display'), 'id=btthroneJewelRefresh')+'</div></td></tr></table>';

		m += '<div class="divHeader" align="center">'+tx('JEWEL INVENTORY')+'</div>';
		m += '<DIV class=xtab align=center id=btThroneDiv_JewelInventory style="width:100%;overflow-x:auto;min-height:300px;max-height:400px;overflow-y:auto;">&nbsp;</DIV>';

		m += '<a id=btthroneJewelOptionLink class=divLink ><div class="divHeader" align="left"><img id=btthroneJewelOptionArrow height="10" src="'+RightArrow+'">&nbsp;'+tx('SALVAGE OPTIONS')+'</div></a>';
		m += '<div id=btthroneJewelOption class=divHide><TABLE width="98%">';
		m += '<TR><td class=xtab colspan=2>'+tx('This will automatically set and remove any jewels with amounts above the target amount, using the Throne Room item below')+'.</td></tr>';

		var Miraculous = {0:"-- "+tx('Select Throne Room Item')+" --"};
		var MiracleTags = {0:'style="padding-left:15px;"'};
		for (var trId in uW.kocThroneItems) {
			var throne_item = uW.kocThroneItems[trId];
			if (throne_item.quality == CM.ThronePanelController.MAX_QUALITY) {
				var OStyle = 'padding-left:15px;';
				if (throne_item.isBroken) { OStyle += 'background-image:url('+BrokenIcon+');background-size:12px 12px;background-repeat:no-repeat;'; }
				else if (throne_item.jewel && throne_item.jewel.valid) { OStyle += 'background-image:url('+t.JewelImages[throne_item.jewel.quality]+');background-repeat:no-repeat;'; }
				MiracleTags[trId] = 'style="'+OStyle+'"';
				Miraculous[trId] = throne_item.name;
			}
		}

		m += '<TR><td class=xtab>&nbsp;</td><td class=xtab>'+tx('Use Miraculous/Unique Throne item')+': ' + htmlSelector(Miraculous, Options.ThroneOptions.JewelSalvageItem, 'id=btthroneJewelSalvageItem class=btInput',MiracleTags) + '</td></tr>';
		m += '</table><hr><TABLE width="98%">';
		m += '<TR><td class=xtab colspan=2><b>'+tx('Bulk Set Target Amounts')+'</b></td></tr>';

		var JewelEffects = {0:"<b>-- "+tx('All Effects')+" --</b>"};
		for (k=0;k<t.JewelEffects.length;k++) {
			var effect = t.JewelEffects[k];
			JewelEffects[effect] = CM.ThroneController.getEffectName(effect);
		}

		var JewelQualities = {0:"<b>-- "+tx('All Qualities')+" --</b>"};
		for (k=0;k<t.JewelQuality.length;k++) {
			JewelQualities[k+1] = t.JewelQuality[k];
		}

		m += '<TR><td class=xtab>&nbsp;</td><td class=xtab>'+tx('Set')+'&nbsp;'+htmlSelector(JewelQualities,0,'id=btthroneJewelSalvageQualitySelect class=btInput')+'&nbsp;'+htmlSelector(JewelEffects,0,'id=btthroneJewelSalvageEffectSelect class=btInput')+'&nbsp;to&nbsp;<input maxlength="4" style="width: 30px;text-align:right;" id="btthroneJewelSalvageAmount" value="150">&nbsp;'+strButton8(tx('Set'),'id=btthroneJewelSalvageSet')+'</td></tr>';
		m += '<TR><td class=xtab colspan=2 align=center id=btthroneJewelSalvageMessage>&nbsp;</td></tr>';
		m += '</table></div>';

		div.innerHTML = m;

		ById('btthroneJewelOptionLink').addEventListener ('click', function () {ToggleMainDivDisplay("Throne",100,GlobalOptions.btWinSize.x,"btthroneJewelOption",false)}, false);

		ById('btAutoJewelState').addEventListener('click', function(){
			t.toggleAutoJewelState(this);
		}, false);

		ChangeOption('ThroneOptions','btthroneJewelSalvageItem','JewelSalvageItem');

		ById('btthroneJewelRefresh').addEventListener('click', t.display_jewels, false);
		ById('btthroneJewelSalvageSet').addEventListener('click', t.JewelTargetBulkSet, false);
		jQuery("#btthroneJewelQualityFilter input").change(t.display_jewels);
		jQuery("#btthroneJewelEffectFilter input").change(t.display_jewels);
	},

	display_jewels : function (){
		var t = Tabs.Throne;
		var div = ById("btThroneDiv_JewelInventory");
		t.activepanel = "jewels";

		function sortFunc(a, b) {
			if (typeof (a[Options.ThroneOptions.JewelSortColNum]) == 'number') {
				if (Options.ThroneOptions.JewelSortDir > 0)
					return a[Options.ThroneOptions.JewelSortColNum] - b[Options.ThroneOptions.JewelSortColNum];
				else
					return b[Options.ThroneOptions.JewelSortColNum] - a[Options.ThroneOptions.JewelSortColNum];
			} else if (typeof (a[Options.ThroneOptions.JewelSortColNum]) == 'boolean') {
				return 0;
			} else {
				if (Options.ThroneOptions.JewelSortDir > 0)
					return a[Options.ThroneOptions.JewelSortColNum].localeCompare(b[Options.ThroneOptions.JewelSortColNum]);
				else
					return b[Options.ThroneOptions.JewelSortColNum].localeCompare(a[Options.ThroneOptions.JewelSortColNum]);
			}
		}

		var dat = [];
		var EmptyDatabase = true;
		t.TotalJewels = 0;

		for (var JewelKey in t.JewelInventoryList) {
			var jewel_item = t.JewelInventoryList[JewelKey];
			var qlty = CM.thronestats.jewelGrowthLimit[jewel_item.quality];
			var amt = CM.ThroneController.getEffectAmount(uWCloneInto(jewel_item), qlty);
			var name = CM.ThroneController.jewelName(uWCloneInto(jewel_item));
			var buffed = tx('Buff');
			if (name.indexOf(tx("Debuff")) > 0) buffed = tx('Debuff');
			var effect = CM.ThroneController.getEffectName(jewel_item.id);
			var qty = CM.ThroneController.getJewelQuantity(uWCloneInto(jewel_item));
			var qualityName = CM.ThroneController.jewelQualityName(jewel_item.quality);

			t.TotalJewels += qty;

			if (qty==0) continue;

			if (!(jQuery('#btthroneJewelEffect_' + jewel_item.id).is(':checked'))) continue;
			if (!(jQuery('#btthroneJewelQuality_' + jewel_item.quality).is(':checked'))) continue;

			EmptyDatabase = false;

			dat.push([JewelKey,effect,qualityName,buffed,amt,qty,jewel_item.quality,jewel_item.id]);
		}

		ById('btthroneJewelTotal').innerHTML = tx('Total Jewels')+': <b>'+t.TotalJewels+'</b><br>&nbsp;';

		var m = '';
		if (!EmptyDatabase) {
			dat.sort(sortFunc);


			m += '<center><table width=98% cellspacing=0 cellpadding=0 class=xtab>';
			m += '<TR><TD align=left width=54% nowrap><A id=JewelCol1 onclick="btJewelClickSort(this)" class="buttonv2 std blue" style="padding-left:0px;padding-right:0px;"><span style="display:inline-block;width:100%;">&nbsp;'+tx('Effect')+'&nbsp;</span></a></td>\
				<TD width=10% nowrap><A id=JewelCol6 onclick="btJewelClickSort(this)" class="buttonv2 std blue" style="padding-left:0px;padding-right:0px;"><span style="display:inline-block;width:100%;">&nbsp;'+tx('Quality')+'&nbsp;</span></a></td>\
				<TD width=10% align=right nowrap><A id=JewelCol3 onclick="btJewelClickSort(this)" class="buttonv2 std blue" style="padding-left:0px;padding-right:0px;"><span style="display:inline-block;width:100%;">&nbsp;'+uW.g_js_strings.commonstr.type+'&nbsp;</span></a></td>\
				<TD width=10% nowrap><A id=JewelCol4 onclick="btJewelClickSort(this)" class="buttonv2 std blue" style="padding-left:0px;padding-right:0px;"><span style="display:inline-block;width:100%;">&nbsp;'+tx('Amount')+'&nbsp;</span></a></td>\
				<TD width=8% align=left nowrap><A id=JewelCol5 onclick="btJewelClickSort(this)" class="buttonv2 std blue" style="padding-left:0px;padding-right:0px;"><span style="display:inline-block;width:100%;">&nbsp;'+tx('In Stock')+'&nbsp;</span></a></td>\
				<TD width=8% align=left nowrap><A class="buttonv2 std blue" style="padding-left:0px;padding-right:0px;"><span style="display:inline-block;width:100%;">&nbsp;'+tx('Target')+'&nbsp;</span></a></td>\
				</tr>';

			var r = 0;

			for (var G=0;G<dat.length;G++) {
				r=r+1;
				rowClass = 'evenRow';
				var rem = (r % 2);
				if (rem == 1) rowClass = 'oddRow';

				m += '<tr class='+rowClass+'><td class=xtab width=62%>' + dat[G][1] + '</td>';
				m += '<td width=10%>' + dat[G][2] + '</td>';
				m += '<td width=10%>' + dat[G][3] + '</td>';
				m += '<td align=center width=10%>' + dat[G][4] + '%</td>';
				JewelKey = dat[G][0];
				JewelLimit = 150;
				if (t.JewelCaps[JewelKey]) {
					JewelLimit = t.JewelCaps[JewelKey].Cap||JewelLimit;
				}
				if (!Options.ThroneOptions.JewelTarget[JewelKey]) { Options.ThroneOptions.JewelTarget[JewelKey] = JewelLimit; }
				JewelStyle = '<span>';
				if (dat[G][5]>Options.ThroneOptions.JewelTarget[JewelKey]) JewelStyle = '<span class=boldRed>';
				if (dat[G][5]==Options.ThroneOptions.JewelTarget[JewelKey]) JewelStyle = '<span class=boldGreen>';
				m += '<td align=right width=8% id="btthroneJewelStock_'+JewelKey+'">'+JewelStyle+dat[G][5]+'</span></td>';
				m += '<td align=right width=8%><input maxlength="4" style="width: 30px;text-align:right;" id="btthroneJewelLimit_'+JewelKey+'" class="'+JewelKey+'" value="'+Options.ThroneOptions.JewelTarget[JewelKey]+'"></td></tr>';
			}
			m += '</table></center>';
		}
		else {
			m += '<div align=center><br><br>'+tx('No jewels found matching search criteria')+'</div>';
		}
		div.innerHTML = m;
		if (!EmptyDatabase) {
			ById('JewelCol' + Options.ThroneOptions.JewelSortColNum).className = 'buttonv2 std green';

			for (var G=0;G<dat.length;G++) {
				JewelKey = dat[G][7]+','+dat[G][6];
				ById('btthroneJewelLimit_'+JewelKey).addEventListener('change', function(e){
					var JewelKey = e.target['className'];
					if (isNaN(e.target.value)) e.target.value = '';
					JewelLimit = 150;
					if (t.JewelCaps[JewelKey]) {
						JewelLimit = t.JewelCaps[JewelKey].Cap||JewelLimit;
					}
					if (e.target.value>JewelLimit) e.target.value = JewelLimit;
					Options.ThroneOptions.JewelTarget[JewelKey] = e.target.value;
					saveOptions();
					t.RepaintJewelStock(JewelKey);
				}, false);
			}
		}

		ResetFrameSize('btMain',100,GlobalOptions.btWinSize.x);
	},

	paint_compare : function (){
		var t = Tabs.Throne;
		var div = ById("btThroneDiv_Compare");

		var selectedCard1 = 0;
		var selectedCard2 = 0;
		var selectedType1 = 0;
		var selectedType2 = 0;

		var m = '<div align=center style="height:450px;overflow-y:auto;">';
		m += '<div class="divHeader" align="center">'+tx('COMPARE THRONE ROOM CARDS')+'</div>';
		m += '<TABLE width=90% class=xtabBR>';
		m += '<tr align=center><td width=50%/><td width=50%/></tr>';

		m += '<tr><td><div style="max-width:100%;"><b>'+uW.g_js_strings.commonstr.type+':&nbsp;</b><select id="btthroneCompareType1">';
		m += '<option value="0">-- '+tx('ALL')+' --</option>';
		for (var type_index = 0; type_index < trTypes.length; ++type_index) {
			m += '<option value="' + trTypes[type_index] + '">' + uW.g_js_strings.throneRoom[trTypes[type_index]] + '</option>';
		}
		m += '</select></div></td>';

		m += '<td><div style="max-width:100%;"><b>'+uW.g_js_strings.commonstr.type+':&nbsp;</b><select id="btthroneCompareType2">';
		m += '<option value="0">-- '+tx('ALL')+' --</option>';
		for (var type_index = 0; type_index < trTypes.length; ++type_index) {
			m += '<option value="' + trTypes[type_index] + '">' + uW.g_js_strings.throneRoom[trTypes[type_index]] + '</option>';
		}
		m += '</select></div></td>';

		m += '<tr><td><div style="max-width:100%;"><b>'+uW.g_js_strings.commonstr.item+':&nbsp;</b><select id="btthroneCompare1">';
		m += '<option value="0" style="padding-left:15px;">-- '+tx('Select Throne Room Item')+' --</option>';
		for (var k in uW.kocThroneItems) {
			var throne_item = uW.kocThroneItems[k];
			if (throne_item == null || !throne_item) continue;
			var OStyle = 'padding-left:15px;';
			if (throne_item.isBroken) { OStyle += 'background-image:url('+BrokenIcon+');background-size:12px 12px;background-repeat:no-repeat;'; }
			else if (throne_item.jewel && throne_item.jewel.valid) { OStyle += 'background-image:url('+t.JewelImages[throne_item.jewel.quality]+');background-repeat:no-repeat;'; }
			m += '<option style="'+OStyle+'" value="' + throne_item.id + '">' + throne_item.name + ' </option>';
		}
		m += '</select></div></td>';

		m += '<td><div style="max-width:100%;"><b>'+uW.g_js_strings.commonstr.item+':&nbsp;</b><select id="btthroneCompare2">';
		m += '<option value="0" style="padding-left:15px;">-- '+tx('Select Throne Room Item')+' --</option>';
		for (var k in uW.kocThroneItems) {
			var throne_item = uW.kocThroneItems[k];
			if (throne_item == null || !throne_item) continue;
			var OStyle = 'padding-left:15px;';
			if (throne_item.isBroken) { OStyle += 'background-image:url('+BrokenIcon+');background-size:12px 12px;background-repeat:no-repeat;'; }
			else if (throne_item.jewel && throne_item.jewel.valid) { OStyle += 'background-image:url('+t.JewelImages[throne_item.jewel.quality]+');background-repeat:no-repeat;'; }
			m += '<option style="'+OStyle+'" value="' + throne_item.id + '">' + throne_item.name + ' </option>';
		}
		m += '</select></div></td>';

		m += '<tr>';
		m += '<td id="btthroneCompareItem1" style="overflow: visible; width: auto; height: auto;"/>';
		m += '<td id="btthroneCompareItem2" style="overflow: visible; width: auto; height: auto;"/>';
		m += '</tr>';
		m += '<tr>';
		m += '<td id="btthroneCompareInv1" style="overflow: visible; width: auto; height: auto;"/>';
		m += '<td id="btthroneCompareInv2" style="overflow: visible; width: auto; height: auto;"/>';
		m += '</tr>';

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

		div.innerHTML = m;

		jQuery("#btthroneCompareType1").change(function () {
			var trType = ById('btthroneCompareType1').value;
			var trList = ById('btthroneCompare1');
			if (selectedType1 != trType && trType != 0) {
				selectedCard1 = 0;
			}
			jQuery("#btthroneCompare1").empty();
			var trOption = document.createElement('option');
			trOption.text = '-- '+tx('Select Throne Room Item')+' --';
			trOption.value = 0;
			trOption.style = 'padding-left:15px;';
			trList.add(trOption);
			for (var k in uW.kocThroneItems) {
				var throne_item = uW.kocThroneItems[k];
				if (throne_item == null || !throne_item) continue;
				if (throne_item.type == trType || trType == 0) {
					var trOption = document.createElement('option');
					trOption.text = throne_item.name;
					trOption.value = throne_item.id;
					var OStyle = 'padding-left:15px;';
					if (throne_item.isBroken) { OStyle += 'background-image:url('+BrokenIcon+');background-size:12px 12px;background-repeat:no-repeat;'; }
					else if (throne_item.jewel && throne_item.jewel.valid) { OStyle += 'background-image:url('+t.JewelImages[throne_item.jewel.quality]+');background-repeat:no-repeat;'; }
					trOption.style = OStyle;
					trList.add(trOption);
				}
			}

			if (selectedCard1 != 0) {
				jQuery("#btthroneCompare1").val(selectedCard1);
			}

		});

		jQuery("#btthroneCompareType2").change(function () {
			var trType = ById('btthroneCompareType2').value;
			var trList = ById('btthroneCompare2');
			if (selectedType2 != trType && trType != 0) {
				selectedCard2 = 0;
			}
			jQuery("#btthroneCompare2").empty();
			var trOption = document.createElement('option');
			trOption.text = '-- '+tx('Select Throne Room Item')+' --';
			trOption.value = 0;
			trOption.style = 'padding-left:15px;';
			trList.add(trOption);
			for (var k in uW.kocThroneItems) {
				var throne_item = uW.kocThroneItems[k];
				if (throne_item == null || !throne_item) continue;
				if (throne_item.type == trType || trType == 0) {
					var trOption = document.createElement('option');
					trOption.text = throne_item.name;
					trOption.value = throne_item.id;
					var OStyle = 'padding-left:15px;';
					if (throne_item.isBroken) { OStyle += 'background-image:url('+BrokenIcon+');background-size:12px 12px;background-repeat:no-repeat;'; }
					else if (throne_item.jewel && throne_item.jewel.valid) { OStyle += 'background-image:url('+t.JewelImages[throne_item.jewel.quality]+');background-repeat:no-repeat;'; }
					trOption.style = OStyle;
					trList.add(trOption);
				}
			}

			if (selectedCard2 != 0) {
				jQuery("#btthroneCompare2").val(selectedCard2);
			}
		});

		jQuery("#btthroneCompare1").change(function () { changeCompareCard1(this); });

		jQuery("#btthroneCompare1").keyup(function (event) { changeCompareCard1(this); });

		function changeCompareCard1(thisObj) {
			var trId = jQuery(thisObj).val();
			var trDisplay = ById('btthroneCompareItem1');
			selectedCard1 = 0;
			selectedType1 = 0;
			if (trId!=0) {
				if (t.ConvertToCard(trId,trDisplay,true)) {
					t.GetInventory(trId,1,'btthroneCompareInv1');
					selectedCard1 = trId;
					selectedType1 = uW.kocThroneItems[trId].type;
				}
				else {
					trDisplay.innerHTML = '<br><span class=boldRed>'+tx('Card no longer exists')+'!</span>';
				}
			}
			else {
				trDisplay.innerHTML = '&nbsp;';
			}
		}

		jQuery("#btthroneCompare2").change(function () { changeCompareCard2(this); });

		jQuery("#btthroneCompare2").keyup(function (event) { changeCompareCard2(this); });

		function changeCompareCard2(thisObj) {
			var trId = jQuery(thisObj).val();
			var trDisplay = ById('btthroneCompareItem2');
			selectedCard2 = 0;
			selectedType2 = 0;
			if (trId!=0) {
				if (t.ConvertToCard(trId,trDisplay,true)) {
					t.GetInventory(trId,2,'btthroneCompareInv2');
					selectedCard2 = trId;
					selectedType2 = uW.kocThroneItems[trId].type;
				}
				else {
					trDisplay.innerHTML = '<br><span class=boldRed>'+tx('Card no longer exists')+'!</span>';
				}
			}
			else {
				trDisplay.innerHTML = '&nbsp;';
			}
		}
	},

	display_compare : function (){
		var t = Tabs.Throne;
		t.activepanel = "compare";
		ResetFrameSize('btMain',100,GlobalOptions.btWinSize.x);
	},

	paint_presets : function (){
		var t = Tabs.Throne;
		var div = ById("btThroneDiv_Presets");

		var m = '<DIV class=divHeader align=center>'+tx('PRESET BUILDER')+'</div>';
		m += '<a id=btthronePresetSearchLink class=divLink><div class="divHeader" align="left"><img id=btthronePresetSearchArrow height="10" src="'+RightArrow+'">&nbsp;'+tx('CARD SEARCH')+'</div></a>';
		m += '<div id=btthronePresetSearch align=center class="divHide">';

		m += '<div style="padding-top:3px;"><span style="float:left;">'+tx('Sort By')+':&nbsp;<select class=btInput id=btthroneSearchSortEffects>';
		m += '<option value="0">-- '+tx('Select Effect')+' --</option>';
		for (var e in CM.thronestats.tiers) {
			if ((CM.thronestats.effects[e] && (CM.thronestats.effects[e][7]=="0" || DebuffOnly.indexOf(e)!=-1)) || CM.THRONE_ROOM_TYPE_DEBUFF_EFFECTS.indexOf(parseInt(e))!= -1) {
				var effectName = uW.g_js_strings.effects["name_" + e].replace("%1$s", "nn% ");
				m += '<option value="' + e + '">' + effectName + '</option>';
			}
		}
		m += '</select>&nbsp;';
		m += '<select class=btInput id=btthroneSearchSortBuffType>';
		m += '<option value="both">'+tx('Either')+'</option>';
		m += '<option value="buff">'+tx('Buff')+'</option>';
		m += '<option value="debuff">'+tx('Debuff')+'</option>';
		m += '</select>&nbsp;';
		m += '<select class=btInput id=btthroneSearchSortTierType>';
		m += '<option value="values">'+tx('Values')+'</option>';
		m += '<option value="tiers">'+tx('Tiers')+'</option>';
		m += '</select>&nbsp;<a id=btthroneSearchAutoPop style="display:none;" class="inlineButton btButton red14"><span style="width:150px;display:inline-block;text-align:center;">'+tx('Auto-populate Preview')+'</span></a></span>';
		m += '<span style="float:right;">';
		m += '<input id=btthroneSearchInactive type=checkbox>'+tx('Ignore Inactive Effects')+'&nbsp;&nbsp;&nbsp;';
		m += '<input id=btthroneSearchBroken type=checkbox>'+tx('Ignore Broken Cards')+'</span>';
		m += '</span></div><br>';

		m += '<table width=100% cellpadding=0 cellspacing=0 class=xtab><tr><td>';
		m += '<table cellpadding=0 cellspacing=0 class=xtab>';
		m += '<tr><td style="padding-top:5px;"><b>'+tx('Effects')+'</b></td><td style="padding-top:5px;"><b>'+uW.g_js_strings.commonstr.type+'</b></td><td style="padding-top:5px;"><b>'+uW.g_js_strings.commonstr.quality+'</b></td><td style="padding-top:5px;"><b>'+uW.g_js_strings.commonstr.level+'</b></td><td style="padding-top:5px;"><b>'+uW.g_js_strings.commonstr.jewel+'</b></td><td style="padding-top:5px;"><b>'+uW.g_js_strings.commonstr.faction+'</b></td></tr>';
		m += '<tr><td><div id=btthroneSearchEffectFilter style="width:260px;border:2px solid #ccc;height:96px;overflow-y:scroll;background-color:white;">';
		for (var k=0;k<t.ThroneEffects.length;k++) {
			var effect = t.ThroneEffects[k];
			m += '<INPUT id=btthroneSearchEffect_'+effect+' type=checkbox CHECKED />'+CM.ThroneController.getEffectName(effect).replace("%1$s","nn%")+'<br />';
		}
		m += '</div></td>';
		m += '<td><div id=btthroneSearchTypeFilter style="width:150px;border:2px solid #ccc;height:96px;overflow-y:scroll;background-color: white;">';
		for (var k=0;k<trTypes.length;k++) {
			var type = trTypes[k];
			m += '<INPUT id=btthroneSearchType_'+type+' type=checkbox CHECKED /><span style="text-transform:capitalize;">'+uW.g_js_strings.throneRoom[type]+'</span><br />';
		}
		m += '</div></td>';
		m += '<td><div id=btthroneSearchQualityFilter style="width:150px;border:2px solid #ccc;height:96px;overflow-y:scroll;background-color: white;">';
		for (var k=0;k<cardQuality.length;k++) {
			var quality = cardQuality[k].toLowerCase();
			m += '<INPUT id=btthroneSearchQuality_'+k+' type=checkbox CHECKED />'+uW.g_js_strings.throneRoom[quality]+'<br />';
		}
		m += '<INPUT id=btthroneSearchQualityUnique type=checkbox CHECKED />'+uW.g_js_strings.throneRoom.unique+'<br />';
		m += '</div></td>';
		m += '<td><div id=btthroneSearchLevelFilter style="width:100px;border:2px solid #ccc;height:96px;overflow-y:scroll;background-color: white;">';
		for (var k=0;k<=CM.MAX_MASTERS_TOKEN_LEVEL;k++) {
			m += '<INPUT id=btthroneSearchLevel_'+k+' type=checkbox CHECKED />'+k+'<br />';
		}
		m += '</div></td>';
		m += '<td><div id=btthroneSearchJewelFilter style="width:100px;border:2px solid #ccc;height:96px;overflow-y:scroll;background-color: white;">';
		m += '<INPUT id=btthroneSearchJewelNone type=checkbox CHECKED />'+uW.g_js_strings.commonstr.none+'<br />';
		for (var k=0;k<t.JewelQuality.length;k++) {
			m += '<INPUT id=btthroneSearchJewel_'+(k+1)+' type=checkbox CHECKED />'+t.JewelQuality[k]+'<br />';
		}
		m += '</div></td>';
		m += '<td><div id=btthroneSearchFactionFilter style="width:100px;border:2px solid #ccc;height:96px;overflow-y:scroll;background-color: white;">';
		for (var k=0;k<cardFaction.length;k++) {
			var faction = cardFaction[k];
			m += '<INPUT id=btthroneSearchFaction_'+faction+' type=checkbox CHECKED /><span style="text-transform:capitalize;">'+uW.g_js_strings.commonstr[faction]+'</span><br />';
		}
		m += '</div></td></tr>';
		m += '<tr><td style="padding-bottom:5px;">'+strButton8('All','id=btthroneSearchEffectAll onclick="btthroneSelectAllSearchEffect()"')+'&nbsp;'+strButton8('None','id=btthroneSearchEffectNone onclick="btthroneSelectNoneSearchEffect()"')+'</td>';
		m += '<td style="padding-bottom:5px;">'+strButton8('All','id=btthroneSearchTypeAll onclick="btthroneSelectAllSearchType()"')+'&nbsp;'+strButton8('None','id=btthroneSearchTypeNone onclick="btthroneSelectNoneSearchType()"')+'</td>';
		m += '<td style="padding-bottom:5px;">'+strButton8('All','id=btthroneSearchQualityAll onclick="btthroneSelectAllSearchQuality()"')+'&nbsp;'+strButton8('None','id=btthroneSearchQualityNone onclick="btthroneSelectNoneSearchQuality()"')+'</td>';
		m += '<td style="padding-bottom:5px;">'+strButton8('All','id=btthroneSearchLevelAll onclick="btthroneSelectAllSearchLevel()"')+'&nbsp;'+strButton8('None','id=btthroneSearchLevelNone onclick="btthroneSelectNoneSearchLevel()"')+'</td>';
		m += '<td style="padding-bottom:5px;">'+strButton8('All','id=btthroneSearchJewelAll onclick="btthroneSelectAllSearchJewel()"')+'&nbsp;'+strButton8('None','id=btthroneSearchJewelNone onclick="btthroneSelectNoneSearchJewel()"')+'</td>';
		m += '<td style="padding-bottom:5px;">'+strButton8('All','id=btthroneSearchFactionAll onclick="btthroneSelectAllSearchFaction()"')+'&nbsp;'+strButton8('None','id=btthroneSearchFactionNone onclick="btthroneSelectNoneSearchFaction()"')+'</td></tr>';

		m += '</table>';
		m += '</td></tr></table>';
		m += '<div class="divHeader"><TABLE width=100% cellspacing=0><TR><TD class=xtab width=100>&nbsp;</td><TD class=xtab align=center>'+tx('SEARCH RESULTS')+'</td><TD class=xtab width=100 align=right><span id=btthroneSearchCount></span>&nbsp;'+tx('Cards')+'</TD></tr></table></div>';
		m += '<div id=btthroneSearchMsg align=center style="opacity:0.3;">'+tx('Click card to select or unselect')+'</div>';
		m += '<div id=btthroneSearchResults style="min-height:200px;width:'+(GlobalOptions.btWinSize.x-20)+'px;overflow-x:scroll;">&nbsp;</div>';
		m += '</div><hr>';

		m += '<div style="width:100%;display:inline-block;">';
		m += '<table align=left class=xtabBR width=100% style="padding-right:0px;"><tr>';
		m += '<td style="width:50px;">'+tx('Preset')+':</td><td style="width:150px;"><select style="width:150px;" id=btthronepresetselect><option value="0" selected>-- '+tx('Select Preset')+' --</option><option value="-1">('+tx('NEW')+')</option>';
		for (var i=1;i<=Seed.throne.slotNum;i++) {
			m += '<option value="'+i+'">'+tx('Preset')+' '+i+(Options.DashboardOptions.TRPresets[i]?' - '+Options.DashboardOptions.TRPresets[i].name:'')+'</option>';
		}
		var found = false;
		t.NextPresetNumber = 100;
		for (var y in Options.ThroneOptions.LocalPresets) {
			found = true;
			m +='<option style="color:#888;" value="'+y+'">'+Options.ThroneOptions.LocalPresets[y].name+'</option>';
		}
		if (found) t.NextPresetNumber = parseIntNan(y)+1;

		m += '</select></td><td><div id=btthronepresetcommitdiv style="height:20px;"><span style="text-align:center;display:inline-block;margin-top:3px;" id=btthronepresetMsg>&nbsp;</span></div></td></tr>';
		m += '<tr><td valign=top colspan=2><div class=divHeader><span id=btthronepresettitle style="display:inline-block;"><b>'+tx('Preview Stats')+'</b></span><span title="'+tx('Click to revert')+'" style="display:inline-block;vertical-align:middle;margin-top:-6px;font-weight:normal;float:right;margin-right:-12px;" id=btthronepresetinitial>&nbsp;</span></div><div id=btthronepresetpreview>&nbsp;</div><div id=btthronepresetpostdiv style="display:none;" align=center><br>'+strButton8('Post to Chat',' id=btthronepresetpost')+'</div></td><td style="padding-right:0px;"><div style="max-width:'+(GlobalOptions.btWinSize.x-220)+'px;overflow-x:auto;max-height:1000px;overflow-y:auto;padding-right:0px;"><table cellpadding=0 cellspacing=0 style="padding-right:2px;border:1px solid;border-collapse:collapse;" class=xtab width=100%><tr>';

		var LineBreak = 4;
		var DropWidth = 180;
		if (GlobalOptions.btWinSize.x == 750) {LineBreak = 3;DropWidth=160;}
		if (GlobalOptions.btWinSize.x == 1250) {LineBreak = 6;DropWidth=160;}

		for (var type_index = 0; type_index < trTypes.length; ++type_index) {
			if (type_index % LineBreak == 0) m += '</tr><tr>';
			m += '<td valign=top style="padding:2px;overflow:visible;width:180px;height:auto;border:1px solid;">';
			m += '<div id=btthronePresetItemHead' + trTypes[type_index] + ' ><div style="text-transform:capitalize;"><b>'+uW.g_js_strings.throneRoom[trTypes[type_index]]+'</b></div></div>';
			m += '<div id="btthronePresetItemSelectContainer'+trTypes[type_index]+'" style="display:none;">'+htmlSelector({0:'-- '+tx('Please Choose')+' --'},0,' id="btthronePresetItemSelect'+trTypes[type_index]+'" style="width:'+DropWidth+'px;"')+'</div>';
			m += '<div><span id=btthronePresetItemRevert' + trTypes[type_index] + ' style="display:none;">'+strButton8('Revert',' id="btthronePresetItemRevertButton'+trTypes[type_index]+'"')+'</span>&nbsp;</div>';
			m += '<div id=btthronePresetItem' + trTypes[type_index] + ' style="min-height:200px;">&nbsp;</div>';
			m += '</td>';
		}

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

		div.innerHTML = m;

		t.fillPresetItemDropdowns();

		ById('btthronePresetSearchLink').addEventListener ('click', function () {ToggleMainDivDisplay("Throne",100,GlobalOptions.btWinSize.x,"btthronePresetSearch",false);t.SearchCards();}, false);

		for (var type_index = 0; type_index < trTypes.length; ++type_index) {
			ById('btthronePresetItemSelect'+trTypes[type_index]).addEventListener('change', function() {
				var throne_Type = this.id.split('btthronePresetItemSelect')[1];
				var trId = this.value;
				var div = ById('btthronePresetItem'+throne_Type);
				if (trId!=0) {
					t.PreviewCards[throne_Type] = trId;
					if (div) { t.ConvertToCard(trId,div,false,t.PreviewCardScale); }
				}
				else {
					delete t.PreviewCards[throne_Type];
					if (div) {
						div.innerHTML = '&nbsp;';
						div.className = '';
						jQuery(div).unbind();
					}
				}
				t.CheckPreviewRevert();
			}, false);

			ById('btthronePresetItemRevertButton'+trTypes[type_index]).addEventListener('click', function() {
				var throne_Type = this.id.split('btthronePresetItemRevertButton')[1];
				var trId=0;
				if (t.InitialCards[throne_Type]) trId = t.InitialCards[throne_Type];
				ById('btthronePresetItemSelect'+throne_Type).value = trId;
				var div = ById('btthronePresetItem'+throne_Type);
				if (trId!=0) {
					t.PreviewCards[throne_Type] = trId;
					if (div) { t.ConvertToCard(trId,div,false,t.PreviewCardScale); }
				}
				else {
					delete t.PreviewCards[throne_Type];
					if (div) {
						div.innerHTML = '&nbsp;';
						div.className = '';
						jQuery(div).unbind();
					}
				}
				t.CheckPreviewRevert();
			}, false);

		}

		ById('btthronepresetselect').addEventListener('change',t.PresetSelected, false);
		ById('btthronepresetpost').addEventListener('click',t.PostPreviewSlot, false);
		ById('btthroneSearchAutoPop').addEventListener ('click', t.PreviewAutoPop, false);

		jQuery("#btthroneSearchEffectFilter input").change(t.SearchCards);
		jQuery("#btthroneSearchTypeFilter input").change(t.SearchCards);
		jQuery("#btthroneSearchQualityFilter input").change(t.SearchCards);
		jQuery("#btthroneSearchLevelFilter input").change(t.SearchCards);
		jQuery("#btthroneSearchJewelFilter input").change(t.SearchCards);
		jQuery("#btthroneSearchFactionFilter input").change(t.SearchCards);

		ById('btthroneSearchInactive').addEventListener('change',t.SearchCards, false);
		ById('btthroneSearchBroken').addEventListener('change',t.SearchCards, false);
		ById('btthroneSearchSortEffects').addEventListener('change',t.SearchCards, false);
		ById('btthroneSearchSortBuffType').addEventListener('change',t.SearchCards, false);
		ById('btthroneSearchSortTierType').addEventListener('change',t.SearchCards, false);
	},

	display_presets : function (){
		var t = Tabs.Throne;
		t.activepanel = "presets";

		// check selected cards still exist!
		t.RefreshPresetDropdowns();
		t.fillPresetItemDropdowns();

		if (t.PreviewPreset>0 && t.PreviewPreset<100 && ById('btthronepresetLabel')) {
			ById('btthronepresetLabel').value = (Options.DashboardOptions.TRPresets[t.PreviewPreset]?Options.DashboardOptions.TRPresets[t.PreviewPreset].name:'Preset '+t.PreviewPreset);
		}

		ResetFrameSize('btMain',100,GlobalOptions.btWinSize.x);
	},

	display_options : function (){
		var t = Tabs.Throne;
		var div = ById("btThroneDiv_Options");
		t.activepanel = "options";

		var m = '<DIV class=divHeader align=center>'+tx('MANUAL THRONE OPTIONS')+'</div>';
		m += '<TABLE width="100%">';
		m += '<TR><TD class=xtab width=30><INPUT id=btthroneDrag type=checkbox /></td><TD class=xtab>'+tx('Enable draggable throne room furniture')+'&nbsp;<span style="font-size:14px;color:#800;">*</span></td></tr>';
		m += '<TR><TD class=xtab><INPUT id=btthroneJewel type=checkbox /></td><TD class=xtab>'+tx('Show jewel icons in throne room inventory')+'</td></tr>';
		m += '<TR><TD class=xtab><INPUT id=btthroneSafetyOn type=checkbox /></td><TD class=xtab>'+tx('Disable manual upgrade if less than')+' <input class=btInput type=text id=btthroneSafetyLimit size=10 maxlength=10 value="' + Options.ThroneOptions.safetyLimit + '"> '+tx('aetherstone available')+'</td></tr>';
		m += '<TR><TD class=xtab><INPUT id=btthroneChatMight type=checkbox /></td><TD class=xtab>'+tx('Show might in chat posts')+'</td></tr>';
		m += '<TR><TD class=xtab><INPUT id=btthroneBuffsOff type=checkbox /></td><TD class=xtab>'+tx('Prevent automatic upgrade/enhance token selection')+'</td></tr>';
		m += '<TR><TD class=xtab><INPUT id=btthroneRemoveMastersTokens type=checkbox /></td><TD class=xtab>'+tx('Remove Masters Tokens from the upgrade token list')+'</td></tr>';
		m += '<TR><TD class=xtab><INPUT id=btthroneDefaultNextToken type=checkbox /></td><TD class=xtab>'+tx('Default next available Masters Token on manual upgrade (overrides above!)')+'</td></tr>';
		m += '<TR><TD class=xtab><INPUT id=btthroneRemoveOtherTokens type=checkbox /></td><TD class=xtab>'+tx('Remove other tokens from the upgrade token list (Fortune, Opportunity, and Prospector)')+'</td></tr>';

		m += '<TR><TD class=xtab><INPUT id=btthroneNoEquippedSalvage type=checkbox /></td><TD class=xtab>'+tx('Remove Salvage Button if card is Equipped in a Preset')+'</td></tr>';
		m += '<TR><TD class=xtab><INPUT id=btthroneNoMassSalvage type=checkbox /></td><TD class=xtab>'+tx('Remove Mass Salvage Button')+'</td></tr>';
		m += '<TR><TD class=xtab><INPUT id=btthroneSalvageSafety type=checkbox /></td><TD class=xtab>'+tx('Remove Salvage Button for the first')+'&nbsp;<input class=btInput id=btthroneSalvageSafetyNum type=text size=3 maxlength=3 value="' + Options.ThroneOptions.SalvageSafetyNum + '"> '+tx('cards')+'</td></tr>';
		m += '<TR><TD class=xtab><INPUT id=btthroneSearchMenu type=checkbox /></td><TD class=xtab>'+tx('Display Throne item menu when clicking on items in Card Search')+'</td></tr>';

		m += '</table>';

		div.innerHTML = m;
		ResetFrameSize('btMain',100,GlobalOptions.btWinSize.x);

		ToggleOption('ThroneOptions','btthroneDrag', 'DraggableThroneItems', Tabs.Options.RestartReminder);
		ToggleOption('ThroneOptions','btthroneJewel', 'ShowJewelIcons', t.paintTags);
		ToggleOption('ThroneOptions','btthroneDefaultNextToken', 'DefaultNextToken');
		ToggleOption('ThroneOptions','btthroneSafetyOn', 'safetyOn');
		ToggleOption('ThroneOptions','btthroneBuffsOff', 'buffsOff');
		ToggleOption('ThroneOptions','btthroneRemoveMastersTokens', 'removeMastersTokens');
		ToggleOption('ThroneOptions','btthroneRemoveOtherTokens', 'removeOtherTokens');
		ToggleOption('ThroneOptions','btthroneChatMight', 'ChatPostShowMight');

		ToggleOption('ThroneOptions','btthroneNoEquippedSalvage', 'NoEquippedSalvage');
		ToggleOption('ThroneOptions','btthroneNoMassSalvage', 'NoMassSalvage');
		ToggleOption('ThroneOptions','btthroneSalvageSafety', 'SalvageSafety');
		ToggleOption('ThroneOptions','btthroneSearchMenu', 'SearchMenu');

		ChangeIntegerOption('ThroneOptions','btthroneSafetyLimit','safetyLimit',0);
		ChangeIntegerOption('ThroneOptions','btthroneSalvageSafetyNum','SalvageSafetyNum',0);

	},

	display_log : function (){
		var t = Tabs.Throne;
		var div = ById("btThroneDiv_Log");
		t.activepanel = "log";

		var ShowLog = [];
		if (t.logfilter == 'GENERAL') ShowLog = t.EventLog;
		if (t.logfilter == 'SUCCESS') ShowLog = t.SuccessLog;
		if (t.logfilter == 'REPAIR') ShowLog = t.RepairLog;
		if (t.logfilter == 'SALVAGE') ShowLog = t.SalvageLog;

		var m = '<DIV class=divHeader align=center>'+tx('THRONE ROOM ACTIVITY LOG')+'</div>';
		m += '<div align="center"><TABLE cellSpacing=0 width=98% height=0%><tr><td class="xtab"> Area Filter:&nbsp;'+htmlSelector(t.logarealist, t.logfilter, 'id=btthronelogfilter class=btInput')+'<td class="xtab" align=right>('+ShowLog.length+'/'+t.logEntries+')</td></tr></table>';
		m += '<TABLE cellSpacing=0 width=98% height=0%><tr><td class="xtabHD" style="width:100px"><b>Date/Time</b></td><td class="xtabHD"><b>Log Message</b></td><td class="xtabHD" align=right>'+strButton14(tx('Clear Log'),'id=btthroneClearLog')+'</td></tr></table>';
		m += '<div style="max-height:530px; height:530px; overflow-y:scroll" align="center"><TABLE cellSpacing=0 width=98% height=0%>';

		var r = 0;
		var logshow = false;

		var n = ShowLog.length;
		while (n--) {
			var a = ShowLog[n];

			logshow = true;
			r=r+1;
			rowClass = 'evenRow';
			var rem = (r % 2);
			if (rem == 1) rowClass = 'oddRow';

			m += '<tr class="'+rowClass+'">';
			m += '<TD style="width:100px" class=xtab>'+formatDateTime(a.ts)+'</td>';
			m += '<TD class=xtabBRTop>'+a.msg+'</td>';
			m += '</tr>';
		}

		if (!logshow) {
			m += '<tr><td colspan=2 class=xtab><div align="center"><br><br>No log entries</div></td></tr>';
		}

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

		div.innerHTML = m;
		ResetFrameSize('btMain',100,GlobalOptions.btWinSize.x);

		ById('btthronelogfilter').addEventListener('change', t.ChangeLogFilter, false);
		ById('btthroneClearLog').addEventListener ('click', function() {t.ClearLog();}, false);
	},

	// PRESET FUNCTIONS

	fillPresetItemDropdowns : function () {
		var t = Tabs.Throne;

		for (var type_index = 0; type_index < trTypes.length; ++type_index) {
			ById('btthronePresetItemSelect'+trTypes[type_index]).options.length = 0;
			var o = document.createElement("option");
			o.text = "-- "+tx('Select Item')+" --"
			o.style = 'padding-left:15px;"';
			o.value = 0;
			ById('btthronePresetItemSelect'+trTypes[type_index]).options.add(o);
		}

		for (var throneId in uW.kocThroneItems) {
			var throneItem = uW.kocThroneItems[throneId];
			var throneType = throneItem.type;
			var elemSelect = ById('btthronePresetItemSelect'+throneType);
			if (elemSelect) {
				var o = document.createElement("option");
				o.text = throneItem.name;
				o.value = throneId;
				var OStyle = 'padding-left:15px;';
				if (throneItem.isBroken) { OStyle += 'background-image:url('+BrokenIcon+');background-size:12px 12px;background-repeat:no-repeat;'; }
				else if (throneItem.jewel && throneItem.jewel.valid) { OStyle += 'background-image:url('+t.JewelImages[throneItem.jewel.quality]+');background-repeat:no-repeat;'; }
				o.style = OStyle;
				if (t.PreviewCards[throneType] && t.PreviewCards[throneType]==throneId) o.selected = true;
				elemSelect.options.add(o);
			}
		}

		for (var throneType in t.PreviewCards) {
			var throneId = t.PreviewCards[throneType];
			if (!uW.kocThroneItems[throneId]) {
				ById('btthronePresetItem'+throneType).innerHTML = '&nbsp;';
			}
		}
	},

	PresetSelected : function () {
		var t = Tabs.Throne;
		t.PresetBusy = false;
		clearTimeout (t.PresetTimer);
		t.PreviewPreset = ById('btthronepresetselect').value;
		var Preset = t.PreviewPreset;

		if (Preset>0) {
			t.PreviewCards = {};
			t.InitialCards = {};
			if (Preset>=100) {
				if (Options.ThroneOptions.LocalPresets[Preset].cards) {
					for (var ii=0;ii<Options.ThroneOptions.LocalPresets[Preset].cards.length;ii++) {
						var trId = Options.ThroneOptions.LocalPresets[Preset].cards[ii];
						if (uW.kocThroneItems[trId]) {
							t.PreviewCards[uW.kocThroneItems[trId].type] = trId;
							t.InitialCards[uW.kocThroneItems[trId].type] = trId;
						}
					}
				}
			}
			else {
				for (var ii=0;ii<Seed.throne.slotEquip[Preset].length;ii++) {
					var trId = Seed.throne.slotEquip[Preset][ii];
					if (uW.kocThroneItems[trId]) {
						t.PreviewCards[uW.kocThroneItems[trId].type] = trId;
						t.InitialCards[uW.kocThroneItems[trId].type] = trId;
					}
				}
			}

			ById('btthronepresetinitial').innerHTML = '<TABLE cellspacing=0 cellpadding=0><TR><TD id="btthronepre'+Preset+'" class="xtab trimg" style="padding-right: 2px;"><a style="text-decoration:none;"><img style="margin-top:4px;margin-right:2px;width:16px;" src="'+ThroneImage+'"></a></td></tr></table>';

			ById('btthronepre'+Preset).addEventListener ('mouseover', function(){
				ById('btthronepresettitle').innerHTML = '<b>'+tx('Preset Stats')+'</b>';
				var slot = this.id.substring(11);
				if (slot<100) {
					ById('btthronepresetpreview').innerHTML = t.GeneratePresetStats(slot,true,true);
				}
				else {
					ById('btthronepresetpreview').innerHTML = t.GeneratePreviewStats(t.InitialCards,true,true);
				}
			},false);
			ById('btthronepre'+Preset).addEventListener ('mouseout', function(){
				ById('btthronepresettitle').innerHTML = '<b>'+tx('Preview Stats')+'</b>';
				t.PaintPreviewStats();
			},false);
			ById('btthronepre'+Preset).addEventListener ('click', function(){
				t.PresetSelected();
			},false);
		}
		else {
			t.PreviewCards = {};
			t.InitialCards = {};
			ById('btthronepresetinitial').innerHTML = '&nbsp;';
		}
		for (var type_index = 0; type_index < trTypes.length; ++type_index) {
			var div = ById('btthronePresetItem'+trTypes[type_index]);
			if (div) {
				div.innerHTML = '&nbsp;';
				div.className = '';
				jQuery(div).unbind();
			}
			if (Preset!=0) {
				ById('btthronePresetItemSelectContainer'+trTypes[type_index]).style.display='';
			}
			else {
				ById('btthronePresetItemSelectContainer'+trTypes[type_index]).style.display='none';
			}
		}
		for (var ii in t.PreviewCards) {
			var trId = t.PreviewCards[ii];
			if (uW.kocThroneItems[trId]) {
				t.ConvertToCard(trId,ById('btthronePresetItem' + uW.kocThroneItems[trId].type),false,t.PreviewCardScale);
			}
		}
		t.fillPresetItemDropdowns();
		t.CheckPreviewRevert();

		if (Preset != 0) {
			var PresetName = '';
			if (Preset>=100) { PresetName = Options.ThroneOptions.LocalPresets[Preset].name; }
			else if (Preset>0) { PresetName = (Options.DashboardOptions.TRPresets[Preset]?Options.DashboardOptions.TRPresets[Preset].name:'Preset '+Preset); }
			var NumPresets = {0:'('+tx('NEW')+')'};
			var PresetTags = {};
			for (var i=1;i<=Seed.throne.slotNum;i++) {
				NumPresets[i]=tx('Preset')+' '+i;
			}
			for (var y in Options.ThroneOptions.LocalPresets) {
				NumPresets[y] = Options.ThroneOptions.LocalPresets[y].name;
				PresetTags[y] = 'style="color:#888;"';
			}

			ById('btthronepresetcommitdiv').innerHTML = '<span style="display:inline-block;float:left;">'+tx('Name')+':&nbsp;<INPUT class="btInput" id="btthronepresetLabel" style="width:120px;" maxlength=15 type=text value="'+PresetName+'" />&nbsp;</span><span id=btthronepresetdeletespan style="display:none;">&nbsp;'+strButton8(tx('Delete'),'id=btthronepresetdelete')+'&nbsp;</span><span style="text-align:center;display:inline-block;margin-top:3px;" id=btthronepresetMsg>&nbsp;</span><span style="display:inline-block;float:right;" id=btthronepresetcommitspan><a id=btthronepresetcommit class="inlineButton btButton blue14 disabled"><span style="width:120px;display:inline-block;text-align:center;">'+tx('Commit Changes')+'</span></a><a id=btthronepresetcommitcancel style="display:none;" class="inlineButton btButton red14"><span style="width:120px;display:inline-block;text-align:center;">'+tx('Cancel')+'</span></a>&nbsp;'+tx('to')+'&nbsp;'+htmlSelector(NumPresets,Preset,'id=btthronepresetcommitnum',PresetTags)+'</span>';
			ById('btthronepresetcommit').addEventListener('click',t.CommitPresetChanges,false);
			ById('btthronepresetcommitcancel').addEventListener('click',t.CancelPresetChanges,false);
			if (Preset>=100) { ById('btthronepresetdeletespan').style='margin-top:2px;display:inline-block;float:left'; }
			ById('btthronepresetdelete').addEventListener('click',t.DeleteLocalPreset,false);
			ById('btthronepresetLabel').addEventListener('change',t.PresetLabelChanged,false);
			ById('btthronepresetcommitnum').addEventListener('click',t.PresetCommitNumChanged,false);
		}
		else {
			ById('btthronepresetcommitdiv').innerHTML = '<span style="text-align:center;display:inline-block;margin-top:3px;" id=btthronepresetMsg>&nbsp;</span>';
		}

		t.PresetNameChanged = false;
		t.PresetTargetChanged = false;

		ResetFrameSize('btMain',100,GlobalOptions.btWinSize.x);
	},

	PresetLabelChanged : function() {
		var t = Tabs.Throne;
		t.PresetNameChanged = true;
		jQuery('#btthronepresetcommit').removeClass("disabled").removeClass("blue14").addClass("red14");
	},

	PresetCommitNumChanged : function() {
		var t = Tabs.Throne;
		t.PresetTargetChanged = true;
		jQuery('#btthronepresetcommit').removeClass("disabled").removeClass("blue14").addClass("red14");
	},

	CheckCommitButton : function () {
		var t = Tabs.Throne;
		var PreviewChanged = false;
		for (var type_index = 0; type_index < trTypes.length; ++type_index) {
			var throneType = trTypes[type_index];
			if ((t.PreviewCards[throneType] && !t.InitialCards[throneType]) || (!t.PreviewCards[throneType] && t.InitialCards[throneType]) || (t.PreviewCards[throneType] && t.InitialCards[throneType] && t.PreviewCards[throneType] != t.InitialCards[throneType])) {
				PreviewChanged = true;
				break;
			}
		}
		if (PreviewChanged || t.PresetNameChanged || t.PresetTargetChanged) {
			jQuery('#btthronepresetcommit').removeClass("disabled").removeClass("blue14").addClass("red14");
		}
		else {
			jQuery('#btthronepresetcommit').addClass("disabled").addClass("blue14").removeClass("red14");;
		}
	},

	PaintPreviewStats : function () {
		var t = Tabs.Throne;
		ById('btthronepresetpreview').innerHTML = t.GeneratePreviewStats(t.PreviewCards,true,true);
		if (jQuery.isEmptyObject(t.PreviewCards)) { ById('btthronepresetpostdiv').style.display='none'; }
		else { ById('btthronepresetpostdiv').style.display=''; }
		ResetFrameSize('btMain',100,GlobalOptions.btWinSize.x);
	},

	CheckPreviewRevert : function () {
		var t = Tabs.Throne;
		for (var type_index = 0; type_index < trTypes.length; ++type_index) {
			var throneType = trTypes[type_index];
			if ((t.PreviewCards[throneType] && !t.InitialCards[throneType]) || (!t.PreviewCards[throneType] && t.InitialCards[throneType]) || (t.PreviewCards[throneType] && t.InitialCards[throneType] && t.PreviewCards[throneType] != t.InitialCards[throneType])) {
				ById('btthronePresetItemRevert'+trTypes[type_index]).style.display='';
			}
			else {
				ById('btthronePresetItemRevert'+trTypes[type_index]).style.display='none';
			}
		}
		t.CheckCommitButton();
		t.CheckSearchPreview();
		t.PaintPreviewStats();
	},

	CancelPresetChanges : function () {
		var t = Tabs.Throne;
		t.PresetBusy = false;
		clearTimeout(t.PresetTimer);
		var Preset = parseIntNan(ById('btthronepresetcommitnum').value);
		t.PreviewPreset = Preset;
		t.display_presets();
		t.PresetSelected();
		t.setPresetMessage(tx('Action cancelled')+'!');
	},

	CommitPresetChanges : function () {
		var t = Tabs.Throne;
		if (jQuery('#btthronepresetcommit').hasClass("disabled")) return;
		ById('btthronepresetcommit').style.display="none";
		ById('btthronepresetcommitcancel').style.display='';
		var Preset = parseIntNan(ById('btthronepresetcommitnum').value);
		if (Preset==0) { Preset = t.NextPresetNumber; }

		if (Preset>=100) {
			// local preset
			if (!Options.ThroneOptions.LocalPresets[Preset]) Options.ThroneOptions.LocalPresets[Preset] = {name:'Local '+(Preset-99)};
			if (t.PresetNameChanged) {
				Options.ThroneOptions.LocalPresets[Preset].name = ById('btthronepresetLabel').value;
			}
			Options.ThroneOptions.LocalPresets[Preset].cards = [];
			for (var throneType in t.PreviewCards) {
				var throneId = t.PreviewCards[throneType];
				Options.ThroneOptions.LocalPresets[Preset].cards.push(throneId);
			}
			saveOptions();
			t.PreviewPreset = Preset;
			t.display_presets();
			t.PresetSelected();
			t.setPresetMessage(tx('Preset Saved'));
		}
		else {
			t.setPresetMessage(tx('Committing Changes to preset '+Preset+'...'));
			// kabam preset
			if (t.PresetNameChanged) {
				Dashboard.UpdatePresetLabel(ById('btthronepresetLabel'),Preset);
			}
			var equipped = {};
			for (var ii=0;ii<Seed.throne.slotEquip[Preset].length;ii++) {
				var trId = Seed.throne.slotEquip[Preset][ii];
				equipped[uW.kocThroneItems[trId].type] = trId;
			}
			t.UnequipQueue = [];
			t.EquipQueue = [];
			for (var type_index = 0; type_index < trTypes.length; ++type_index) {
				if (!t.PreviewCards[trTypes[type_index]] && equipped[trTypes[type_index]]) {
					// unequip old card from preset
					t.UnequipQueue.push(equipped[trTypes[type_index]]);
				}
				else {
					if (t.PreviewCards[trTypes[type_index]] && (!equipped[trTypes[type_index]] || (t.PreviewCards[trTypes[type_index]] != equipped[trTypes[type_index]]))) {
						// equip new card to preset
						t.EquipQueue.push(t.PreviewCards[trTypes[type_index]]);
					}
				}
			}
			t.ErrorQueue = [];
			t.PresetBusy = true;
			t.PresetTimer = setTimeout(t.EquipPresetCards,0,Preset);
		}
	},

	EquipPresetCards : function(Preset) {
		var t = Tabs.Throne;
		if (!t.PresetBusy) return;
		clearTimeout (t.PresetTimer);
		if (t.UnequipQueue.length>0) {
			var trId = t.UnequipQueue.shift();
			if (uW.kocThroneItems[trId]) {
				t.unequipItem(uW.kocThroneItems[trId],Preset,t.EquipPresetCards);
			}
			else {
				t.log(tx('Unequip Error')+' - '+('Card does not exist'),'GENERAL',true);
				t.PresetTimer = setTimeout(t.EquipPresetCards,0,Preset);
			}
			return;
		}
		if (t.EquipQueue.length>0) {
			var trId = t.EquipQueue.shift();
			if (uW.kocThroneItems[trId]) {
				t.equipItem(uW.kocThroneItems[trId],Preset,t.EquipPresetCards);
			}
			else {
				t.log(tx('Equip Error')+' - '+('Card does not exist'),'GENERAL',true);
				t.PresetTimer = setTimeout(t.EquipPresetCards,0,Preset);
			}
			return;
		}
		t.PresetBusy = false;
		t.PreviewPreset = Preset;
		t.display_presets();
		t.PresetSelected();
		t.setPresetMessage(tx('Complete')+'!');
	},

	unequipItem: function (I, preset, notify) {
		var t = Tabs.Throne;
		if (!I) return;
		if (!preset) preset = Seed.throne.activeSlot;

		var params = uW.Object.clone(uW.g_ajaxparams);
		params.ctrl = 'throneRoom\\ThroneRoomServiceAjax';
		params.action = 'unequipItem';
		params.itemId = I.id;
		params.presetId = preset;
		new MyAjaxRequest(uW.g_ajaxpath + "ajax/_dispatch53.php" + uW.g_ajaxsuffix, {
			method: "post",
			parameters: params,
			loading: true,
			onSuccess: function (rslt) {
				if (rslt.ok) {
					if (preset == Seed.throne.activeSlot) { CM.ThroneView.clickItemUnequip(uWCloneInto(I)); }
					else {
						I.presetId = 0;
						var throneSlot = Seed.throne.slotEquip[preset];
						for (var slotIndex = 0; slotIndex < throneSlot.length; slotIndex++) {
							var throneItem = uW.kocThroneItems[throneSlot[slotIndex]];
							if (throneItem.id == I.id) {
								throneSlot.splice(slotIndex,1);
								break;
							}
						}
						Seed.throne.slotEquip[preset] = throneSlot;
					}
					t.setPresetMessage(tx('Unequipping')+' '+I.type+'...');
					if (notify && t.PresetBusy) { t.PresetTimer = setTimeout(notify,t.THRONE_DELAY*1000,preset); }
				}
				else {
					t.log(tx('Unequip Error')+' - '+rslt.msg,'GENERAL',true);
					t.setPresetMessage('<span class=boldRed>'+tx('Error unequipping')+' '+I.type+'...</span>');
					if (notify && t.PresetBusy) { t.PresetTimer = setTimeout(notify,1000,preset); }
				}
			},
			onFailure: function () {
				t.setPresetMessage('<span class=boldRed>'+tx('Server Error')+'</span>');
				t.log(tx('Unequip Error')+' - '+tx('Server Error'),'GENERAL',true);
			},
		},true); // noretry
	},

	equipItem: function (I, preset, notify) {
		var t = Tabs.Throne;
		if (!I) return;
		if (!preset) preset = Seed.throne.activeSlot;

		var params = uW.Object.clone(uW.g_ajaxparams);
		params.ctrl = 'throneRoom\\ThroneRoomServiceAjax';
		params.action = 'equipItem';
		params.itemId = I.id;
		params.presetId = preset;
		new MyAjaxRequest(uW.g_ajaxpath + "ajax/_dispatch53.php" + uW.g_ajaxsuffix, {
			method: "post",
			parameters: params,
			loading: true,
			onSuccess: function (rslt) {
				if (rslt.ok) {
					if (preset == Seed.throne.activeSlot) { CM.ThroneView.clickItemEquip(uWCloneInto(I)); }
					else {
						var throneSlot = Seed.throne.slotEquip[preset];
						for (var slotIndex = 0; slotIndex < throneSlot.length; slotIndex++) {
							var throneItem = uW.kocThroneItems[throneSlot[slotIndex]];
							if (throneItem.type == I.type) {
								throneItem.isEquipped = false;
								throneItem.presetId = 0;
								throneSlot.splice(slotIndex,1);
								break;
							}
						}
						I.presetId = preset;
						throneSlot.push(I.id);
						Seed.throne.slotEquip[preset] = uWCloneInto(throneSlot);
					}
					t.setPresetMessage(tx('Equipping')+' '+I.type+'...');
					if (preset == Seed.throne.activeSlot) CM.ThroneView.clickItemEquip(uWCloneInto(I));
					if (notify && t.PresetBusy) { t.PresetTimer = setTimeout(notify,t.THRONE_DELAY*1000,preset); }
				}
				else {
					t.log(tx('Equip Error')+' - '+rslt.msg,'GENERAL',true);
					t.setPresetMessage('<span class=boldRed>'+tx('Error equipping')+' '+I.type+'...</span>');
					if (notify && t.PresetBusy) { t.PresetTimer = setTimeout(notify,1000,preset); }
				}
			},
			onFailure: function () {
				t.setPresetMessage('<span class=boldRed>'+tx('Server Error')+'</span>');
				t.log(tx('Equip Error')+' - '+tx('Server Error'),'GENERAL',true);
			},
		},true); // noretry
	},

	DeleteLocalPreset : function () {
		var t = Tabs.Throne;
		var Preset = t.PreviewPreset;
		if (Preset>=100) {
			// local preset
			if (Options.ThroneOptions.LocalPresets[Preset]) {
				delete Options.ThroneOptions.LocalPresets[Preset];
				saveOptions();
				t.PreviewPreset = 0;
				t.display_presets();
				t.PresetSelected();
				t.setPresetMessage(tx('Preset Deleted'));
			}
		}
	},

	setPresetMessage : function (msg) {
		ById('btthronepresetMsg').innerHTML = '&nbsp;&nbsp;&nbsp;'+msg;
	},

	RefreshPresetDropdowns : function () {
		var t = Tabs.Throne;
		ById('btthronepresetselect').options.length = 0;
		var o = document.createElement("option");
		o.text = "-- "+tx('Select Preset')+" --"
		o.value = 0;
		ById('btthronepresetselect').options.add(o);
		var o = document.createElement("option");
		o.text = "("+tx('NEW')+")"
		o.value = -1;
		if (t.PreviewPreset == -1) o.selected = true;
		ById('btthronepresetselect').options.add(o);

		for (var i=1;i<=Seed.throne.slotNum;i++) {
			var o = document.createElement("option");
			o.text = tx('Preset')+' '+i+(Options.DashboardOptions.TRPresets[i]?' - '+Options.DashboardOptions.TRPresets[i].name:'');
			o.value = i;
			if (t.PreviewPreset == i) o.selected = true;
			ById('btthronepresetselect').options.add(o);
		}
		var found = false;
		for (var y in Options.ThroneOptions.LocalPresets) {
			found = true;
			var o = document.createElement("option");
			o.text = Options.ThroneOptions.LocalPresets[y].name;
			o.value = y;
			o.style = 'color:#888;';
			if (t.PreviewPreset == y) o.selected = true;
			ById('btthronepresetselect').options.add(o);
		}
		if (found) t.NextPresetNumber = parseIntNan(y)+1;

		if (ById('btthronepresetcommitnum')) {
			ById('btthronepresetcommitnum').options.length = 0;
			var o = document.createElement("option");
			o.text = "("+tx('NEW')+")"
			o.value = 0;
			ById('btthronepresetcommitnum').options.add(o);

			for (var i=1;i<=Seed.throne.slotNum;i++) {
				var o = document.createElement("option");
				o.text = tx('Preset')+' '+i;
				o.value = i;
				if (t.PreviewPreset == i) o.selected = true;
				ById('btthronepresetcommitnum').options.add(o);
			}
			for (var y in Options.ThroneOptions.LocalPresets) {
				var o = document.createElement("option");
				o.text = Options.ThroneOptions.LocalPresets[y].name;
				o.value = y;
				o.style = 'color:#888;';
				if (t.PreviewPreset == y) o.selected = true;
				ById('btthronepresetcommitnum').options.add(o);
			}
		}
	},

	SelectAllSearchEffect : function () {
		var t = Tabs.Throne;
		for (var k=0;k<t.ThroneEffects.length;k++) {
			var effect = t.ThroneEffects[k];
			ById("btthroneSearchEffect_"+effect).checked = true;
		}
		t.SearchCards();
	},

	SelectNoneSearchEffect : function () {
		var t = Tabs.Throne;
		for (var k=0;k<t.ThroneEffects.length;k++) {
			var effect = t.ThroneEffects[k];
			ById("btthroneSearchEffect_"+effect).checked = false;
		}
		t.SearchCards();
	},

	SelectAllSearchType : function () {
		var t = Tabs.Throne;
		for (var k=0;k<trTypes.length;k++) {
			var type = trTypes[k];
			ById("btthroneSearchType_"+type).checked = true;
		}
		t.SearchCards();
	},

	SelectNoneSearchType : function () {
		var t = Tabs.Throne;
		for (var k=0;k<trTypes.length;k++) {
			var type = trTypes[k];
			ById("btthroneSearchType_"+type).checked = false;
		}
		t.SearchCards();
	},

	SelectAllSearchQuality : function () {
		var t = Tabs.Throne;
		for (var k=0;k<cardQuality.length;k++) {
			ById("btthroneSearchQuality_"+k).checked = true;
		}
		ById("btthroneSearchQualityUnique").checked = true;
		t.SearchCards();
	},

	SelectNoneSearchQuality : function () {
		var t = Tabs.Throne;
		for (var k=0;k<cardQuality.length;k++) {
			ById("btthroneSearchQuality_"+k).checked = false;
		}
		ById("btthroneSearchQualityUnique").checked = false;
		t.SearchCards();
	},

	SelectAllSearchLevel : function () {
		var t = Tabs.Throne;
		for (var k=0;k<=CM.MAX_MASTERS_TOKEN_LEVEL;k++) {
			ById("btthroneSearchLevel_"+k).checked = true;
		}
		t.SearchCards();
	},

	SelectNoneSearchLevel : function () {
		var t = Tabs.Throne;
		for (var k=0;k<=CM.MAX_MASTERS_TOKEN_LEVEL;k++) {
			ById("btthroneSearchLevel_"+k).checked = false;
		}
		t.SearchCards();
	},

	SelectAllSearchJewel : function () {
		var t = Tabs.Throne;
		for (var k=0;k<t.JewelQuality.length;k++) {
			ById("btthroneSearchJewel_"+(k+1)).checked = true;
		}
		ById("btthroneSearchJewelNone").checked = true;
		t.SearchCards();
	},

	SelectNoneSearchJewel : function () {
		var t = Tabs.Throne;
		for (var k=0;k<t.JewelQuality.length;k++) {
			ById("btthroneSearchJewel_"+(k+1)).checked = false;
		}
		ById("btthroneSearchJewelNone").checked = false;
		t.SearchCards();
	},

	SelectAllSearchFaction : function () {
		var t = Tabs.Throne;
		for (var k=0;k<cardFaction.length;k++) {
			var faction = cardFaction[k];
			ById("btthroneSearchFaction_"+faction).checked = true;
		}
		t.SearchCards();
	},

	SelectNoneSearchFaction : function () {
		var t = Tabs.Throne;
		for (var k=0;k<cardFaction.length;k++) {
			var faction = cardFaction[k];
			ById("btthroneSearchFaction_"+faction).checked = false;
		}
		t.SearchCards();
	},

	SearchCards : function () {
		var t = Tabs.Throne;
		t.SearchResults = [];
		var m = '<table align=left class=xtabBR><tr>';

		// search for matching cards

		for (var 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 isBroken = throneItem.isBroken;

			var jewelQuality = 0;
			if (throneItem.jewel && throneItem.jewel.valid) jewelQuality = throneItem.jewel.quality;
			if (jewelQuality > 0 && ById('btthroneSearchJewel_' + jewelQuality)) { if (!(ById('btthroneSearchJewel_' + jewelQuality).checked)) continue; }
			else { if (!ById('btthroneSearchJewelNone').checked) continue; }

			if (ById('btthroneSearchBroken').checked && isBroken) continue;
			if (!(ById('btthroneSearchQualityUnique').checked) && unique) continue;
			if (!(ById('btthroneSearchQuality_' + quality).checked) && !unique) continue;
			if (!(ById('btthroneSearchFaction_' + faction).checked)) continue;
			if (!(ById('btthroneSearchLevel_' + level).checked)) continue;
			if (!(ById('btthroneSearchType_' + thronetype).checked)) continue;

			// effects filter

			var rejectcard = true;
			for (var k in throneItem.effects) {
				var inactive = (parseInt(k.split("slot")[1]) > parseInt(quality));
				if (ById('btthroneSearchInactive').checked && inactive) continue;
				if ((ById('btthroneSearchEffect_' + throneItem.effects[k].id).checked)) {
					rejectcard = false;
					break;
				}
			}
			if (rejectcard) continue;

			t.SearchResults.push(throneItem.id);
		}

		// sort if required

		if (ById('btthroneSearchSortEffects').value!=0) {
			t.SearchResults.sort(function (a,b) { return SortThroneValue(b) - SortThroneValue(a); });
		}

		function SortThroneValue (trId) {
			var t = Tabs.Throne;
			var retValue = 0;
			var EffectSearch = ById('btthroneSearchSortEffects').value;
			var BuffType = ById('btthroneSearchSortBuffType').value;
			var TierType = ById('btthroneSearchSortTierType').value;
			y = uW.kocThroneItems[trId];
			if (!y) return +retValue;
			var quality = y.quality || 0;
			for (var O in y["effects"]) {
				var i = +(O.split("slot")[1]);
				if (i > quality && (ById('btthroneSearchInactive').checked)) { return +retValue; }

				var effect = y["effects"]["slot"+i]["id"];
				if (effect==EffectDebuffs[EffectSearch] && BuffType != "buff") {
					if (TierType=="value") { retValue -= parseFloat(getTRSlotStat(y,effect,i)); }
					else { retValue -= t.getTRTier(y,effect,i); }
				}
				else if (effect==EffectSearch && BuffType != "debuff") {
					if (TierType=="value") { retValue += parseFloat(getTRSlotStat(y,effect,i)); }
					else { retValue += t.getTRTier(y,effect,i); }
				}
			}
			return +retValue;
		};

		// display results

		for (var k=0;k<t.SearchResults.length;k++) {
			var trId = t.SearchResults[k];
			m += '<td style="vertical-align:top;"><div id="btthroneSearchItem_'+trId+'" style="cursor:pointer;border:3px solid transparent;">&nbsp;</div></td>';
		}
		m += '</tr></table>';
		ById('btthroneSearchResults').innerHTML = m;

		for (var k=0;k<t.SearchResults.length;k++) {
			var trId = t.SearchResults[k];
			t.ConvertToCard(trId,ById('btthroneSearchItem_' + trId),false,t.PreviewCardScale,!Options.ThroneOptions.SearchMenu,true);
			if (!Options.ThroneOptions.SearchMenu) {
				jQuery('#btthroneSearchItem_' + trId).click(function () {
					var trId = jQuery(this).attr("class");
					t.ClickedSearchCard(trId);
				});
			}
		}

		ById('btthroneSearchCount').innerHTML = t.SearchResults.length;
		t.CheckSearchPreview();

		if(ById('btthroneSearchSortEffects').value!=0) {
			ById('btthroneSearchAutoPop').style.display='';
		}
		else {
			ById('btthroneSearchAutoPop').style.display='none';
		}

		ResetFrameSize('btMain',100,GlobalOptions.btWinSize.x);
	},

	getTRTier : function (y,id,i) {
		var Current = 0;
		var tier = parseInt(y["effects"]["slot"+i]["tier"])
		var	p = CM.thronestats.tiers[id][tier];
		while (!p && (tier > 0)) { tier--; p = CM.thronestats.tiers[id][tier]; }
		if (p) { // can't find stats for tier
			Current = +p.base;
		}
		return Current;
	},
	
	ClickedSearchCard : function (trId) {
		var t = Tabs.Throne;
		var throneItem = uW.kocThroneItems[trId];
		if (throneItem) {
			if (ById('btthronepresetselect').value==0) { ById('btthronepresetselect').value=-1; t.PresetSelected(); }

			var throneType = throneItem.type;
			var div = ById('btthronePresetItem'+throneType);
			if (t.PreviewCards[throneType] && t.PreviewCards[throneType]==trId) {
				delete t.PreviewCards[throneType];
				ById('btthronePresetItemSelect'+throneType).value = 0;
				if (div) {
					div.innerHTML = '&nbsp;';
					div.className = '';
					jQuery(div).unbind();
				}
			}
			else {
				t.PreviewCards[throneType] = trId;
				ById('btthronePresetItemSelect'+throneType).value = trId;
				if (div) { t.ConvertToCard(trId,div,false,t.PreviewCardScale); }
			}
			t.CheckPreviewRevert();
		}
	},

	CheckSearchPreview : function () {
		var t = Tabs.Throne;
		for (var k=0;k<t.SearchResults.length;k++) {
			var trId = t.SearchResults[k];
			var throneItem = uW.kocThroneItems[trId];
			if (throneItem) {
				var throneType = throneItem.type;
				var colour = 'transparent';
				if (t.PreviewCards[throneType] && t.PreviewCards[throneType]==trId) {
					colour = 'green';
				}
				jQuery('#btthroneSearchItem_' + trId).css('border', '3px solid '+colour);
			}
		}
	},

	PreviewAutoPop : function () {
		var t = Tabs.Throne;
		if (ById('btthronepresetselect').value==0) { ById('btthronepresetselect').value=-1; t.PresetSelected(); }
		var TempPreview = {};
		for (var k=0;k<t.SearchResults.length;k++) {
			var trId = t.SearchResults[k];
			var throneItem = uW.kocThroneItems[trId];
			if (throneItem) {
				var throneType = throneItem.type;
				if (!TempPreview[throneType]) {
					TempPreview[throneType] = trId;
				}
			}
		}
		for (var throneType in TempPreview) {
			var trId = TempPreview[throneType];
			t.PreviewCards[throneType] = trId;
			ById('btthronePresetItemSelect'+throneType).value = trId;
			var div = ById('btthronePresetItem'+throneType);
			if (div) { t.ConvertToCard(trId,div,false,t.PreviewCardScale); }
		}
		t.CheckPreviewRevert();
	},

	// LOG FUNCTIONS

	saveLogs : function () {
		var t = Tabs.Throne;
		GM_setValue ('ThroneSuccessLog_'+getServerId()+'_'+uW.tvuid, JSON2.stringify(t.SuccessLog));
		GM_setValue ('ThroneRepairLog_'+getServerId()+'_'+uW.tvuid, JSON2.stringify(t.RepairLog));
		GM_setValue ('ThroneSalvageLog_'+getServerId()+'_'+uW.tvuid, JSON2.stringify(t.SalvageLog));
		GM_setValue ('ThroneEventLog_'+getServerId()+'_'+uW.tvuid, JSON2.stringify(t.EventLog));
	},

	log : function (msg,area,error){
		var t = Tabs.Throne;
		if (!area) area = 'GENERAL';
		var ts = unixTime();
		if (area=='GENERAL') {
			while (t.EventLog.length >= t.logEntries) {	t.EventLog.shift();	}
			t.EventLog.push ({msg:msg, ts:ts});
			if (GlobalOptions.ExtendedDebugMode) {
				logit(msg); // also send to browser log
			}
		}
		if (area=='SUCCESS') {
			while (t.SuccessLog.length >= t.logEntries) { t.SuccessLog.shift();	}
			t.SuccessLog.push ({msg:msg, ts:ts});
		}
		if (area=='REPAIR') {
			while (t.RepairLog.length >= t.logEntries) { t.RepairLog.shift();	}
			t.RepairLog.push ({msg:msg, ts:ts});
		}
		if (area=='SALVAGE') {
			while (t.SalvageLog.length >= t.logEntries) { t.SalvageLog.shift(); }
			t.SalvageLog.push ({msg:msg, ts:ts});
		}

		if (error && GlobalOptions.ExtendedDebugMode) actionLog(msg,'THRONE');

		if (tabManager.currentTab && tabManager.currentTab.name == 'Throne' && Options.btWinIsOpen && t.activepanel=='log') {
			t.display_log();
		}
	},

	ChangeLogFilter : function (evt) {
		var t = Tabs.Throne;
		t.logfilter = evt.target.value;
		t.display_log();
	},

	ClearLog : function () {
		var t = Tabs.Throne;
		if (t.logfilter == 'GENERAL') t.EventLog = [];
		if (t.logfilter == 'SUCCESS') t.SuccessLog = [];
		if (t.logfilter == 'REPAIR') t.RepairLog = [];
		if (t.logfilter == 'SALVAGE') t.SalvageLog = [];
		t.saveLogs();
		t.display_log();
	},

	// STATS FUNCTIONS

	AddToStats : function (Type,Quality,Level,Success) {
		var t = Tabs.Throne;
		if (Type=="E") {
			if (Success) {
				if (!Options.ThroneOptions.Stats.EnhanceSuccess[Quality][Level]) Options.ThroneOptions.Stats.EnhanceSuccess[Quality][Level] = 0;
				Options.ThroneOptions.Stats.EnhanceSuccess[Quality][Level]++;
			}
			else {
				if (!Options.ThroneOptions.Stats.EnhanceFail[Quality][Level]) Options.ThroneOptions.Stats.EnhanceFail[Quality][Level] = 0;
				Options.ThroneOptions.Stats.EnhanceFail[Quality][Level]++;
			}
		}
		if (Type=="U") {
			if (Success) {
				if (!Options.ThroneOptions.Stats.UpgradeSuccess[Quality][Level]) Options.ThroneOptions.Stats.UpgradeSuccess[Quality][Level] = 0;
				Options.ThroneOptions.Stats.UpgradeSuccess[Quality][Level]++;
			}
			else {
				if (!Options.ThroneOptions.Stats.UpgradeFail[Quality][Level]) Options.ThroneOptions.Stats.UpgradeFail[Quality][Level] = 0;
				Options.ThroneOptions.Stats.UpgradeFail[Quality][Level]++;
			}
		}
		saveOptions();
	},

	ClearStats : function (type) {
		var t = Tabs.Throne;
		if (type=="E") {
			Options.ThroneOptions.Stats.EnhanceSuccess = {0:{}, 1:{}, 2:{}, 3:{}, 4:{}, 5:{}, 6:{}};
			Options.ThroneOptions.Stats.EnhanceFail = {0:{}, 1:{}, 2:{}, 3:{}, 4:{}, 5:{}, 6:{}};
		}
		if (type=="U") {
			Options.ThroneOptions.Stats.UpgradeSuccess = {0:{}, 1:{}, 2:{}, 3:{}, 4:{}, 5:{}, 6:{}};
			Options.ThroneOptions.Stats.UpgradeFail = {0:{}, 1:{}, 2:{}, 3:{}, 4:{}, 5:{}, 6:{}};
		}
		saveOptions();
		t.ViewUpgradeStats();
	},

	// UPGRADE FUNCTIONS

	toggleAutoUpgradeState: function(obj){
		var t = Tabs.Throne;
		obj = ById('btAutoUpgradeState');
		if (Options.ThroneOptions.UpgradeRunning == true) {
			Options.ThroneOptions.UpgradeRunning = false;
			obj.value = tx("Upgrade = OFF");
			t.UpgradeStatus = tx('Powered Off');
			t.UpgradeReturnStatus = '';
			t.PaintUpgradeStatus();
			clearTimeout(t.UpgradeTimer);
		}
		else {
			Options.ThroneOptions.UpgradeRunning = true;
			obj.value = tx("Upgrade = ON");
			t.UpgradeStatus = tx('Starting')+'...';
			t.UpgradeReturnStatus = '';
			t.PaintUpgradeStatus();
			t.UpgradeQueueIndex = 0; // start from top of queue again
			t.UpgradeTimer = setTimeout(function () { t.doAutoUpgradeLoop();}, 0);
		}
		saveOptions();
		SetToggleButtonState('Upgrade',Options.ThroneOptions.UpgradeRunning,'Upgrade');
	},

	doAutoUpgradeLoop : function() {
		var t = Tabs.Throne;
		clearTimeout(t.UpgradeTimer);
		if (!Options.ThroneOptions.UpgradeRunning) {
			t.UpgradeStatus = tx('Powered Off');
			t.UpgradeReturnStatus = '';
			t.PaintUpgradeStatus();
			return;
		}

		if (t.GemUseTripSwitch) {
			t.log(tx('Upgrader accidentally used gems - Please refresh game! Turning off'),'GENERAL',true);
			t.toggleAutoUpgradeState();
			uW.Modal.showAlert('<div align="center">'+tx('Upgrader accidentally used gems - Please refresh game! Turning off')+'</div>');
			return;
		}

		var BrokenItemInQueue = false;
		t.loopupgradeaction = false;
		t.autoupgradedelay = 0; // no delay if no action taken!

		if (t.UpgradeQueueIndex >= Options.ThroneOptions.UpgradeQueue.length) {
			t.UpgradeQueueIndex = 0;
		}

		if (!t.BreakInProgress) {
			if (Options.ThroneOptions.UpgradeQueue.length != 0) {
				// only process repair logic if repair queue inactive (otherwise it gets handled there)
				if (!Options.ThroneOptions.RepairRunning) {
					var now = unixTime();
					if (Seed.queue_throne && Seed.queue_throne.end && Seed.queue_throne.end>now) {
						t.autoSpeedup("upgrade");
					}
					else {
						// Find first of any broken items in queue to repair!
						for (var Qitem = 0; Qitem < Options.ThroneOptions.UpgradeQueue.length; Qitem++) {
							var QObj = Options.ThroneOptions.UpgradeQueue[Qitem];
							if (QObj) {
								var throneItem = uW.kocThroneItems[QObj.item];
								if (throneItem && throneItem.isBroken) {
									t.RepairItem(throneItem.id,"upgrade");
									break;
								}
							}
						}
					}
				}

				// now loop from index position for next available queue entry to upgrade

				var GotEntry = false;
				for (var Qitem = t.UpgradeQueueIndex; Qitem < Options.ThroneOptions.UpgradeQueue.length; Qitem++) {
					var QObj = Options.ThroneOptions.UpgradeQueue[Qitem];
					if (QObj) {
						var throneItem = uW.kocThroneItems[QObj.item];
						if (!throneItem) {
//							t.log(tx('Unknown card removed from Upgrade Queue'),'GENERAL',true);
//							Options.ThroneOptions.UpgradeQueue.splice(Qitem, 1);
//							Qitem--; //decrement
//							saveOptions();
						}
						else {
							if (QObj.action=="upgrade") {
								if (throneItem.level>=QObj.maximum && QObj.status!=2) {
									QObj.status = 2;
									Options.ThroneOptions.UpgradeQueue[Qitem].status = 2;
									saveOptions();
									t.paintUpgradeQueue();
								}
								if (throneItem.level<QObj.maximum && QObj.status==2) {
									QObj.status = 1;
									Options.ThroneOptions.UpgradeQueue[Qitem].status = 1;
									saveOptions();
									t.paintUpgradeQueue();
								}
							}
							if (QObj.action=="enhance") {
								if (throneItem.quality>=QObj.maximum && QObj.status!=2) {
									QObj.status = 2;
									Options.ThroneOptions.UpgradeQueue[Qitem].status = 2;
									saveOptions();
									t.paintUpgradeQueue();
								}
								if (throneItem.quality<QObj.maximum && QObj.status==2) {
									QObj.status = 1;
									Options.ThroneOptions.UpgradeQueue[Qitem].status = 1;
									saveOptions();
									t.paintUpgradeQueue();
								}
							}
							if (QObj.status!=2) {
								if (!throneItem.isBroken) {
									GotEntry = true;
									t.UpgradeQueueIndex = Qitem;
									break;
								}
								else {
									BrokenItemInQueue = true;
									if (Options.ThroneOptions.UpgradeOneItem) {
										t.UpgradeQueueIndex = Qitem; // one at a time selected, so not got entry, but also don't loop round for next item!
										break;
									}
								}
							}
						}
					}
				}
				if (GotEntry) {
					var QObj = Options.ThroneOptions.UpgradeQueue[t.UpgradeQueueIndex];
					var throneItem = uW.kocThroneItems[QObj.item];
					// We have an item for Upgrading/Enhancing!
					if (QObj.action=="upgrade") {
						t.UpgradeStatus = tx('Upgrading')+' '+throneItem.name+' '+tx('to level')+' '+parseIntNan(throneItem.level+1);
					}
					else {
						t.UpgradeStatus = tx('Enhancing')+' '+throneItem.name+' '+tx('to')+' '+CardQuality(throneItem.quality+1);
					}
					t.UpgradeReturnStatus = '';

					var OKtoUpgrade = true;

					var throne_seq = Object.keys(uW.kocThroneItems);
					var item_seq = throne_seq.indexOf(throneItem.id.toString())+1;
					if (item_seq>(Seed.throne.rowNum*5)) {
						t.UpgradeReturnStatus = tx('Cannot upgrade')+' - '+tx('Throne room row is still locked');
						t.log(throneItem.name+' ['+throneItem.id+']: '+t.UpgradeReturnStatus,'GENERAL',true);
						t.PaintUpgradeStatus();
						OKtoUpgrade = false;
						if (Options.ThroneOptions.UpgradeOneItem) { // push to end
							Options.ThroneOptions.UpgradeQueue.push(Options.ThroneOptions.UpgradeQueue.splice(t.UpgradeQueueIndex, 1)[0]);
							t.paintUpgradeQueue();
						}
					}

					if (OKtoUpgrade) {
						// Select a boost item if required...
						var boostItem = 0;
						if (QObj.action=="upgrade") {
							var NextLevel = throneItem.level+1;
							if (boostItem==0 && Options.ThroneOptions.UpgradeUseMasters && NextLevel>=Options.ThroneOptions.UpgradeUseMastersMin && NextLevel<=Options.ThroneOptions.UpgradeUseMastersMax) {
								boostItem = Tabs.Throne.getNextAvailableMasters(throneItem,Options.ThroneOptions.UpgradeBoostLevelOnly);
								if (CM.MASTERS_TOKEN_LEVELS[boostItem]>Options.ThroneOptions.UpgradeUseMastersMax) { boostItem=0; }
							}
							if (boostItem==0 && Options.ThroneOptions.UpgradeUseProspector && NextLevel>=Options.ThroneOptions.UpgradeUseProspectorMin && NextLevel<=Options.ThroneOptions.UpgradeUseProspectorMax) {
								boostItem = Tabs.Throne.getNextAvailableToken(throneItem,"P",Options.ThroneOptions.UpgradeBoostLevelOnly);
								if (t.ProspectorTokens[boostItem]>Options.ThroneOptions.UpgradeUseProspectorMax) { boostItem=0; }
							}
							if (boostItem==0 && Options.ThroneOptions.UpgradeUseOpportunity && NextLevel>=Options.ThroneOptions.UpgradeUseOpportunityMin && NextLevel<=Options.ThroneOptions.UpgradeUseOpportunityMax) {
								boostItem = Tabs.Throne.getNextAvailableToken(throneItem,"O",Options.ThroneOptions.UpgradeBoostLevelOnly);
								if (t.OpportunityTokens[boostItem]>Options.ThroneOptions.UpgradeUseOpportunityMax) { boostItem=0; }
							}
							if (boostItem==0 && Options.ThroneOptions.UpgradeUseFortune && NextLevel>=Options.ThroneOptions.UpgradeUseFortuneMin && NextLevel<=Options.ThroneOptions.UpgradeUseFortuneMax) {
								boostItem = Tabs.Throne.getNextAvailableToken(throneItem,"F",Options.ThroneOptions.UpgradeBoostLevelOnly);
								if (t.FortuneTokens[boostItem]>Options.ThroneOptions.UpgradeUseFortuneMax) { boostItem=0; }
							}
							if (Options.ThroneOptions.UpgradeBoostMinLevel<=NextLevel) {
								if (boostItem==0 && Options.ThroneOptions.UseUAT && uW.ksoItems[20022].count > 0) { boostItem = 20022; }
								if (boostItem==0 && Options.ThroneOptions.UseUSLT && uW.ksoItems[20019].count > 0) { boostItem = 20019; }
								if (boostItem==0 && Options.ThroneOptions.UseULT && uW.ksoItems[20006].count > 0) { boostItem = 20006; }
								if (boostItem==0 && Options.ThroneOptions.UseULLT && uW.ksoItems[20005].count > 0) { boostItem = 20005; }
								if (boostItem==0 && Options.ThroneOptions.UseUPS && uW.ksoItems[20002].count > 0) { boostItem = 20002; }
								if (boostItem==0 && Options.ThroneOptions.UseULPS && uW.ksoItems[20001].count > 0) { boostItem = 20001; }
								if (boostItem==0 && Options.ThroneOptions.UpgradeNoBoosts) {
									t.UpgradeReturnStatus = tx('No upgrade boosts available')+'!';
									OKtoUpgrade = false;
								}
							}
						}
						if (QObj.action=="enhance") {
							var NextQuality = throneItem.quality+1;
							if (boostItem==0 && Options.ThroneOptions.EnhanceUseMasters && NextQuality>=Options.ThroneOptions.EnhanceUseMastersMin && NextQuality<=Options.ThroneOptions.EnhanceUseMastersMax) {
								boostItem = Tabs.Throne.getNextAvailableOrb(throneItem,Options.ThroneOptions.EnhanceBoostLevelOnly);
								if (t.Orbs[boostItem]>Options.ThroneOptions.EnhanceUseMastersMax) { boostItem=0; }
							}
							if (Options.ThroneOptions.EnhanceBoostMinQuality<=NextQuality) {
								if (boostItem==0 && Options.ThroneOptions.UseEMO && uW.ksoItems[20004].count > 0) { boostItem = 20004; }
								if (boostItem==0 && Options.ThroneOptions.UseELMO && uW.ksoItems[20003].count > 0) { boostItem = 20003; }
								if (boostItem==0 && Options.ThroneOptions.UseEPS && uW.ksoItems[20002].count > 0) { boostItem = 20002; }
								if (boostItem==0 && Options.ThroneOptions.UseELPS && uW.ksoItems[20001].count > 0) { boostItem = 20001; }
								if (boostItem==0 && Options.ThroneOptions.EnhanceNoBoosts) {
									t.UpgradeReturnStatus = tx('No enhance boosts available')+'!';
									OKtoUpgrade = false;
								}
							}
						}
						if (boostItem!=0) {
							t.UpgradeStatus = t.UpgradeStatus+' '+tx('with')+' '+uW.itemlist["i"+boostItem].name;
						}
						t.PaintUpgradeStatus();
					}

					if (OKtoUpgrade) {
						if (QObj.action=="upgrade") {
							t.UpgradeItem(QObj.item,t.UpdateUpgradeStats,boostItem,true,t.UpgradeQueueIndex);
						}
						else {
							t.EnhanceItem(QObj.item,t.UpdateEnhanceStats,boostItem,true,t.UpgradeQueueIndex);
						}
					}

					if (!Options.ThroneOptions.UpgradeOneItem) {
						t.UpgradeQueueIndex++; // go to next entry for next pass
					}
					t.autoupgradedelay = Options.ThroneOptions.UpgradeInterval; // delay next action
				}
				else { // all queue entries complete or broken - loop round again... or One at a time, so leave it...
					if (BrokenItemInQueue) {
						t.UpgradeStatus = tx('Waiting for repair to complete')+'...';
						t.UpgradeReturnStatus = '';
					}
					else {
						if (t.UpgradeQueueIndex == 0) { // whole queue done!
							t.UpgradeStatus = tx('Upgrade queue completed')+'!';
							t.UpgradeReturnStatus = '';
						}
					}
					t.PaintUpgradeStatus();
					if (!Options.ThroneOptions.UpgradeOneItem) {
						t.UpgradeQueueIndex = 0;
					}
					t.autoupgradedelay = Options.ThroneOptions.UpgradeInterval; // delay next action
				}
			}
			else { // no queue! loop round again...
				t.UpgradeQueueIndex = 0;
				t.UpgradeStatus = tx('No cards in upgrade queue')+'!';
				t.UpgradeReturnStatus = '';
				t.PaintUpgradeStatus();
				t.autoupgradedelay = Options.ThroneOptions.UpgradeInterval; // delay next action
			}
		}
		else {
			t.UpgradeStatus = tx('Upgrades suspended while throne room cards are being broken')+'!';
			t.UpgradeReturnStatus = '';
			t.PaintUpgradeStatus();
			t.autoupgradedelay = Options.ThroneOptions.UpgradeInterval; // delay next action
		}
		t.UpgradeTimer = setTimeout(function () { t.doAutoUpgradeLoop(); }, (t.autoupgradedelay * 1000));
	},

	UpdateUpgradeStats : function(rslt,trId,aetherbalance,Qitem) {
		var t = Tabs.Throne;
		var throneItem = uW.kocThroneItems[trId];
		if (!throneItem) {
			t.UpgradeReturnStatus = tx('Unknown Item')+'?';
		}
		else {
			if (rslt.ok) {
				if (rslt.success) {
					t.UpgradeReturnStatus = tx('Upgrade Successful')+'!';
					t.AddToStats('U',throneItem.quality,throneItem.level,true);
					t.UpdateUpgradeQueue(throneItem,Qitem,true);
				}
				else {
					t.UpgradeReturnStatus = tx('Upgrade Failed')+'!';
					t.AddToStats('U',throneItem.quality,throneItem.level+1,false);
					var now = unixTime();
					if (!Seed.queue_throne || (Seed.queue_throne.end && Seed.queue_throne.end<now)) { // send to repair
						if (throneItem.isBroken || rslt.break) {
							t.RepairItem(throneItem.id,"upgrade");
						}
					}
					t.UpdateUpgradeQueue(throneItem,Qitem,false);
				}
			}
		}
		t.PaintUpgradeStatus();
	},

	UpdateEnhanceStats : function(rslt,trId,aetherbalance,Qitem) {
		var t = Tabs.Throne;
		var throneItem = uW.kocThroneItems[trId];
		if (!throneItem) {
			t.UpgradeReturnStatus = tx('Unknown Item')+'?';
		}
		else {
			if (rslt.ok) {
				if (rslt.success) {
					t.UpgradeReturnStatus = tx('Enhance Successful')+'!';
					t.AddToStats('E',throneItem.quality,throneItem.level,true);
					t.UpdateUpgradeQueue(throneItem,Qitem,true);
				}
				else {
					t.UpgradeReturnStatus = tx('Enhance Failed')+'!';
					t.AddToStats('E',throneItem.quality+1,throneItem.level,false);
					var now = unixTime();
					if (!(Seed.queue_throne && Seed.queue_throne.end && Seed.queue_throne.end>now)) { // repair not busy
						if (throneItem.isBroken || rslt.break) {
							t.RepairItem(throneItem.id,"upgrade");
						}
					}
					t.UpdateUpgradeQueue(throneItem,Qitem,false);
				}
			}
		}
		t.PaintUpgradeStatus();
	},

	UpdateUpgradeQueue : function(throneItem,Qitem,Success) {
		var t = Tabs.Throne;
		var QObj = Options.ThroneOptions.UpgradeQueue[Qitem];
		if (QObj) {
			Options.ThroneOptions.UpgradeQueue[Qitem].triesTotal ++;
			Options.ThroneOptions.UpgradeQueue[Qitem].triesThis ++;
			Options.ThroneOptions.UpgradeQueue[Qitem].triesLimiter ++;
			if (QObj.status==0) {
				Options.ThroneOptions.UpgradeQueue[Qitem].status = 1;
				Options.ThroneOptions.UpgradeQueue[Qitem].messages = tx('No upgrades yet')+'...';
			}

			if (QObj.action=="upgrade") {
				if (Success) {
					Options.ThroneOptions.UpgradeQueue[Qitem].messages = tx('Upgraded to level')+' '+throneItem.level+' '+tx('in')+' '+Options.ThroneOptions.UpgradeQueue[Qitem].triesThis+' '+tx('attempts')+'.';
					Options.ThroneOptions.UpgradeQueue[Qitem].triesThis = 0;
					Options.ThroneOptions.UpgradeQueue[Qitem].triesLimiter = 0;
					if (throneItem.level>=QObj.maximum) {
						Options.ThroneOptions.UpgradeQueue[Qitem].status = 2;
					}
					var msg = throneItem.name+' ['+throneItem.id+'] '+Options.ThroneOptions.UpgradeQueue[Qitem].messages;
					t.log(msg,'SUCCESS');
					if (Options.ThroneOptions.WhisperToMe) { sendChat("/" + Seed.player.name + ' :::. |' + msg); }
					if (Options.ThroneOptions.SendToInbox) { t.sendMail(Seed.player.name, tx('THRONE: Upgrade Success')+': '+throneItem.name, msg); }
				}
			}
			if (QObj.action=="enhance") {
				if (Success) {
					Options.ThroneOptions.UpgradeQueue[Qitem].messages = tx('Enhanced to')+' '+CardQuality(throneItem.quality)+' '+tx('in')+' '+Options.ThroneOptions.UpgradeQueue[Qitem].triesThis+' '+tx('attempts')+'.';
					Options.ThroneOptions.UpgradeQueue[Qitem].triesThis = 0;
					Options.ThroneOptions.UpgradeQueue[Qitem].triesLimiter = 0;
					if (throneItem.quality>=QObj.maximum) {
						Options.ThroneOptions.UpgradeQueue[Qitem].status = 2;
					}
					var msg = throneItem.name+' ['+throneItem.id+'] '+Options.ThroneOptions.UpgradeQueue[Qitem].messages;
					t.log(msg,'SUCCESS');
					if (Options.ThroneOptions.WhisperToMe) { sendChat("/" + Seed.player.name + ' :::. |' + msg); }
					if (Options.ThroneOptions.SendToInbox) { t.sendMail(Seed.player.name, tx('THRONE: Enhance Success')+': '+throneItem.name, msg); }

				}
			}
			if (!Success && Options.ThroneOptions.UpgradeOneItem && Options.ThroneOptions.UpgradeOneMax && parseIntNan(Options.ThroneOptions.UpgradeQueue[Qitem].triesLimiter)>=Options.ThroneOptions.UpgradeOneMaxAttempts) {
				// send to the back of the queue and reset...
				Options.ThroneOptions.UpgradeQueue[Qitem].triesLimiter = 0;
				Options.ThroneOptions.UpgradeQueue.push(Options.ThroneOptions.UpgradeQueue.splice(Qitem, 1)[0]);
				t.log(throneItem.name+' ['+throneItem.id+']: '+tx('Upgrade/Enhance attempts limit reached - Card requeued'),'GENERAL');
			}
			saveOptions();
			t.paintUpgradeQueue();
		}
	},

	sendMail: function (sendTo, subject, msg) {
		var params = uW.Object.clone(uW.g_ajaxparams);
		params.emailTo = sendTo;
		params.subject = subject;
		params.message = msg;
		params.requestType = "COMPOSED_MAIL";
		new MyAjaxRequest(uW.g_ajaxpath + "ajax/getEmail.php" + uW.g_ajaxsuffix, {
			method:"post",
			parameters:params,
			onSuccess: function (rslt) {
				if (rslt.ok) {
					DeleteLastMessage();
				}
			}
		})
	},

	PaintUpgradeStatus : function () {
		var t = Tabs.Throne;
		var Stats = '';

		if (Options.ThroneOptions.UpgradeRunning) {
			var Stats = '<span style="inline-block;float:right;margin-top:4px;">'+strButton8(tx('View Stats'),'id=btthroneupgradeoverviewstats')+'</span>';
		}
		if (ById('btthroneoverviewupgradestatusdiv')) ById('btthroneoverviewupgradestatusdiv').innerHTML = t.UpgradeStatus+'<br><i>'+t.UpgradeReturnStatus+Stats+'</i>';
		if (ById('btthroneupgradeoverviewstats')) ById('btthroneupgradeoverviewstats').addEventListener('click',t.ViewUpgradeStats,false);
	},

	ViewUpgradeStats : function () {
		var t = Tabs.Throne;

		var HeadColour = 'rgba('+HEXtoRGB(Options.Colors.PanelText).r+','+HEXtoRGB(Options.Colors.PanelText).g+','+HEXtoRGB(Options.Colors.PanelText).b+',0.5)';

		var maxlevel = CM.MAX_MASTERS_TOKEN_LEVEL;
		var maxquality = CM.ThronePanelController.MAX_QUALITY;

		var m = '<DIV class=divHeader align=center>'+tx('UPGRADE STATISTICS')+'</div>';
		m += '<DIV style="width:'+(GlobalOptions.btWinSize.x-10)+'px;overflow-x:scroll;"><TABLE cellpadding=2 cellspacing=0 align=left>';
		m += '<TR><TD class=xtabHD style="border-right:1px solid '+HeadColour+';">&nbsp;</td>';

		var c = 0;
		for (var i=maxlevel;i>0;i--) {
			c=c+1;
			colClass = 'evenRow';
			var rem = (c % 2);
			if (rem == 1) colClass = 'oddRow';
			m += '<TD width=30 class="xtabHD '+colClass+'" align=center>+'+i+'</td>';
		}
		m += '</tr>';

		var st = [];
		var ft = [];

		for (var j=0;j<=maxquality;j++) {
			m += '<TR><TD class=xtab style="border-right:1px solid '+HeadColour+';"><b>'+CardQuality(j)+'</b></td>';
			var c = 0;
			for (var i=maxlevel;i>0;i--) {
				c=c+1;
				colClass = 'evenRow';
				var rem = (c % 2);
				if (rem == 1) colClass = 'oddRow';
				var s = (Options.ThroneOptions.Stats.UpgradeSuccess[j][i])?Options.ThroneOptions.Stats.UpgradeSuccess[j][i]:0;
				var f = (Options.ThroneOptions.Stats.UpgradeFail[j][i])?Options.ThroneOptions.Stats.UpgradeFail[j][i]:0;
				if (!st[i]) st[i]=0;
				st[i] = st[i]+s;
				if (!ft[i]) ft[i]=0;
				ft[i] = ft[i]+f;
				m += '<TD width=30 class="xtab '+colClass+'" align=center>'+s+'/'+(s+f)+'</td>';
			}
			m += '</tr>';
		}
		m += '<TR><TD class=xtab style="border-right:1px solid '+HeadColour+';border-top:1px solid '+HeadColour+';"><b>'+tx('Totals')+'</b></td>';
		var c = 0;
		for (var i=maxlevel;i>0;i--) {
			c=c+1;
			colClass = 'evenRow';
			var rem = (c % 2);
			if (rem == 1) colClass = 'oddRow';
			m += '<TD width=30 class="xtab '+colClass+'" style="border-top:1px solid '+HeadColour+';" align=center><b>'+st[i]+'/'+(st[i]+ft[i])+'</b></td>';
		}
		m += '<TR><TD class=xtab style="border-right:1px solid '+HeadColour+';border-top:1px solid '+HeadColour+';"><b>'+tx('Percentage')+'</b></td>';
		var c = 0;
		for (var i=maxlevel;i>0;i--) {
			c=c+1;
			colClass = 'evenRow';
			var rem = (c % 2);
			if (rem == 1) colClass = 'oddRow';
			if (st[i]+ft[i]==0) { m += '<TD width=30 class="xtab '+colClass+'" style="border-top:1px solid '+HeadColour+';" align=center><b>--</b></td>'; }
			else { m += '<TD width=30 class="xtab '+colClass+'" style="border-top:1px solid '+HeadColour+';" align=center><b>'+(Math.round((st[i]/(st[i]+ft[i]))*100*100)/100)+'%</b></td>'; }
		}
		m += '</tr>';
		m += '</table></div>';
		m += '<DIV align=center>'+strButton14('Clear Stats','id=btthroneClearUpgradeStats')+'</div><br>';

		m += '<DIV class=divHeader align=center>'+tx('ENHANCE STATISTICS')+'</div>';
		m += '<DIV style="width:'+(GlobalOptions.btWinSize.x-10)+'px;overflow-x:scroll;"><TABLE cellpadding=2 cellspacing=0 align=left>';
		m += '<TR><TD class=xtabHD style="border-right:1px solid '+HeadColour+';">&nbsp;</td>';
		m += '<TD width=30 class="xtabHD oddRow" style="border-right:1px solid '+HeadColour+';" align=center>'+tx('Percent')+'</td>';
		m += '<TD width=30 class="xtabHD evenRow" style="border-right:1px solid '+HeadColour+';" align=center>'+tx('Totals')+'</td>';

		var c = 0;
		for (var i=maxlevel;i>=0;i--) {
			c=c+1;
			colClass = 'evenRow';
			var rem = (c % 2);
			if (rem == 1) colClass = 'oddRow';
			m += '<TD width=30 class="xtabHD '+colClass+'" align=center>+'+i+'</td>';
		}
		m += '</tr>';

		var st = [];
		var ft = [];

		for (var i=maxlevel;i>=0;i--) {
			for (var j=1;j<=maxquality;j++) {
				var s = (Options.ThroneOptions.Stats.EnhanceSuccess[j][i])?Options.ThroneOptions.Stats.EnhanceSuccess[j][i]:0;
				var f = (Options.ThroneOptions.Stats.EnhanceFail[j][i])?Options.ThroneOptions.Stats.EnhanceFail[j][i]:0;
				if (!st[j]) st[j]=0;
				st[j] = st[j]+s;
				if (!ft[j]) ft[j]=0;
				ft[j] = ft[j]+f;
			}
		}

		for (var j=1;j<=maxquality;j++) {
			m += '<TR><TD class=xtab style="border-right:1px solid '+HeadColour+';"><b>'+CardQuality(j)+'</b></td>';
			if (st[j]+ft[j]==0) { m += '<TD width=30 class="xtab oddRow" style="border-right:1px solid '+HeadColour+';" align=center><b>--</b></td>'; }
			else { m += '<TD width=30 class="xtab oddRow" style="border-right:1px solid '+HeadColour+';" align=center><b>'+(Math.round((st[j]/(st[j]+ft[j]))*100*100)/100)+'%</b></td>'; }
			m += '<TD width=30 class="xtab evenRow" style="border-right:1px solid '+HeadColour+';" align=center><b>'+st[j]+'/'+(st[j]+ft[j])+'</b></td>';
			var c = 0;
			for (var i=maxlevel;i>=0;i--) {
				c=c+1;
				colClass = 'evenRow';
				var rem = (c % 2);
				if (rem == 1) colClass = 'oddRow';
				var s = (Options.ThroneOptions.Stats.EnhanceSuccess[j][i])?Options.ThroneOptions.Stats.EnhanceSuccess[j][i]:0;
				var f = (Options.ThroneOptions.Stats.EnhanceFail[j][i])?Options.ThroneOptions.Stats.EnhanceFail[j][i]:0;
				m += '<TD width=30 class="xtab '+colClass+'" align=center>'+s+'/'+(s+f)+'</td>';
			}
			m += '</tr>';
		}
		m += '</table></div>';
		m += '<DIV align=center>'+strButton14('Clear Stats','id=btthroneClearEnhanceStats')+'</div>';

		var pop = new CPopup ('btUpgradeStatsPopup', 0, 0, 750, 400, true);
		pop.getMainDiv().innerHTML = m;
		pop.getTopDiv().innerHTML = '<CENTER><B>'+tx("Stats")+'</b></center>';
		pop.show (true);
		ResetFrameSize('btUpgradeStatsPopup',400,GlobalOptions.btWinSize.x);
		pop.centerMe (mainPop.getMainDiv());

		ById('btthroneClearUpgradeStats').addEventListener ('click', function() {t.ClearStats("U");}, false);
		ById('btthroneClearEnhanceStats').addEventListener ('click', function() {t.ClearStats("E");}, false);
	},

	update_upgrader : function () {
		var t = Tabs.Throne;

		t.LessProtection = parseIntNan(Seed.items.i20001);
		t.Protection = parseIntNan(Seed.items.i20002);
		t.LessMystic = parseIntNan(Seed.items.i20003);
		t.Mystic = parseIntNan(Seed.items.i20004);
		t.LessLucky = parseIntNan(Seed.items.i20005);
		t.Lucky = parseIntNan(Seed.items.i20006);
		t.SuperLucky = parseIntNan(Seed.items.i20019);
		t.Apprentice = parseIntNan(Seed.items.i20022);

		ById('btthroneUseELPSLabel').innerHTML = t.LessProtection;
		ById('btthroneUseEPSLabel').innerHTML = t.Protection;
		ById('btthroneUseELMOLabel').innerHTML = t.LessMystic;
		ById('btthroneUseEMOLabel').innerHTML = t.Mystic;
		ById('btthroneUseULPSLabel').innerHTML = t.LessProtection;
		ById('btthroneUseUPSLabel').innerHTML = t.Protection;
		ById('btthroneUseULLTLabel').innerHTML = t.LessLucky;
		ById('btthroneUseULTLabel').innerHTML = t.Lucky;
		ById('btthroneUseUSLTLabel').innerHTML = t.SuperLucky;
		ById('btthroneUseUATLabel').innerHTML = t.Apprentice;

		// check queue item status

		for (var Qitem=0;Qitem<Options.ThroneOptions.UpgradeQueue.length;Qitem++) {
			var QObj = Options.ThroneOptions.UpgradeQueue[Qitem];
			if (QObj) {
				var throneItem = uW.kocThroneItems[QObj.item];
				if (throneItem) {
					if (QObj.status == 2) {
						throneStatusClass = 'btthroneSuccess';
					} else if (throneItem.isBroken) {
						if (throneItem.id == Seed.queue_throne.itemId) {
							throneStatusClass = 'btthroneHammer';
						} else {
							throneStatusClass = 'btthroneBroken';
						}
					} else {
						throneStatusClass = 'btthroneGoButton';
					}
					if (ById('btThroneQueueState'+Qitem)) { ById('btThroneQueueState'+Qitem).className = throneStatusClass; }
				}
			}
		}
	},

	update_repairer : function () {
		var t = Tabs.Throne;

		t.Squire = parseIntNan(Seed.items.i1);
		t.Knight = parseIntNan(Seed.items.i2);
		t.Guinevere = parseIntNan(Seed.items.i3);
		t.Morgana = parseIntNan(Seed.items.i4);
		t.Arthur = parseIntNan(Seed.items.i5);
		t.Merlin = parseIntNan(Seed.items.i6);
		t.Divine = parseIntNan(Seed.items.i7);
		t.Epic = parseIntNan(Seed.items.i8);

		ById('btthroneUseSHLabel').innerHTML = t.Squire;
		ById('btthroneUseKHLabel').innerHTML = t.Knight;
		ById('btthroneUseGHLabel').innerHTML = t.Guinevere;
		ById('btthroneUseMHLabel').innerHTML = t.Morgana;
		ById('btthroneUseAHLabel').innerHTML = t.Arthur;
		ById('btthroneUseRHLabel').innerHTML = t.Merlin;
		ById('btthroneUseDHLabel').innerHTML = t.Divine;
		ById('btthroneUseEHLabel').innerHTML = t.Epic;

		// check queue item status

		var repairinc = 0;
		var currSet = getFactionBonus(Seed.throne.activeSlot);
		if (currSet.hazBonus && currSet.faction === "briton") {
			repairinc = CM.ThroneController.effectBonus(94);
		}

		var BrokenMight = 0;
		var BrokenTime = 0;

		for (var Qitem=0;Qitem<Options.ThroneOptions.RepairQueue.length;Qitem++) {
			var QObj = Options.ThroneOptions.RepairQueue[Qitem];
			if (QObj) {
				var throneItem = uW.kocThroneItems[QObj.item];
				if (throneItem) {
					if (throneItem.isBroken) {
						BrokenMight += CardMight(throneItem);
						if (throneItem.id == Seed.queue_throne.itemId) {
							throneStatusClass = 'btthroneHammer';
							var reptime = Seed.queue_throne.end - uW.unixtime();
						} else {
							throneStatusClass = 'btthroneBroken';
							if (throneItem.brokenType=="level") { var reptime = t.getRepairTime(throneItem.brokenType,throneItem.level); }
							else { var reptime = t.getRepairTime(throneItem.brokenType,throneItem.quality); }
							reptime = Math.ceil(reptime - (reptime * (repairinc / 100)))
						}
						BrokenTime += reptime;
					} else {
						throneStatusClass = 'btthroneSuccess';
					}
					if (ById('btThroneRepairQueueState'+Qitem)) { ById('btThroneRepairQueueState'+Qitem).className = throneStatusClass; }
				}
			}
		}
		t.UpdateRepairQueueSummary(BrokenMight,BrokenTime);
	},

	getRepairTime : function (brokenType,level) {
		var reptime = 0;
		if (brokenType=="level") {
			if (CM.thronestats["repairCostUpgrade"][level]) {
				reptime = CM.thronestats["repairCostUpgrade"][level].Time;
			}
		}
		else {
			if (CM.thronestats["repairCostEnhance"][level]) {
				reptime = CM.thronestats["repairCostEnhance"][level].Time;
			}
		}
		return reptime;
	},

	UpdateRepairQueueSummary : function (BrokenMight,BrokenTime) {
		if (ById('btthroneRepairQueueMight')) { ById('btthroneRepairQueueMight').innerHTML = '<i>'+tx('Broken might in Queue')+':&nbsp;'+addCommas(BrokenMight)+'</i>'; }
		if (ById('btthroneRepairQueueTime')) { ById('btthroneRepairQueueTime').innerHTML = '<i>'+tx('Estimated time to Repair')+':&nbsp;'+timestr(BrokenTime)+'</i>'; }
	},

	UpgradeCityButton: function (city, x, y) {
		var t = Tabs.Throne;
		Options.ThroneOptions.UpgradeCityNum = city.idx;
		saveOptions();
	},

	fillUpgradeItemDropdown : function () {
		var t = Tabs.Throne;

		ById('btthroneUpgradeItem').options.length = 0;
		var o = document.createElement("option");
		o.text = "-- "+tx('Select Item')+" --"
		o.style = 'padding-left:15px;"';
		o.value = 0;
		ById('btthroneUpgradeItem').options.add(o);

		for (var throneId in uW.kocThroneItems) {
			var throneItem = uW.kocThroneItems[throneId];
			var o = document.createElement("option");
			o.text = throneItem.name;
			o.value = throneId;
			var OStyle = 'padding-left:15px;';
			if (throneItem.isBroken) { OStyle += 'background-image:url('+BrokenIcon+');background-size:12px 12px;background-repeat:no-repeat;'; }
			else if (throneItem.jewel && throneItem.jewel.valid) { OStyle += 'background-image:url('+t.JewelImages[throneItem.jewel.quality]+');background-repeat:no-repeat;'; }
			o.style = OStyle;
			ById('btthroneUpgradeItem').options.add(o);
		}
	},

	helpPop : function (){
		var t = Tabs.Throne;
		var helpText = '<br>'+tx("Using Speedups for Throne Room Repairs");
		helpText += '<p>'+tx('Hourglasses will be used in the following order if they are selected, and the required criteria is met')+' :-</p>';
		helpText += '<TABLE class=xtab><TR><TD><b>'+uW.g_js_strings.commonstr.item+'</b></td><TD><b>'+uW.g_js_strings.commonstr.time+'</b></td><TD><b>'+tx('Criteria')+'</b></td></tr>';
		helpText += '<TR><TD>'+uW.itemlist.i8.name+'</td><TD>2.5 days</td><TD>'+tx('More than 48 hours remaining')+'</td></tr>';
		helpText += '<TR><TD>'+uW.itemlist.i7.name+'</td><TD>24 hrs</td><TD>'+tx('More than 23 hours 30 minutes remaining')+'</td></tr>';
		helpText += '<TR><TD>'+uW.itemlist.i6.name+'</td><TD>15 hrs</td><TD>'+tx('More than 14 hours 30 minutes remaining')+'</td></tr>';
		helpText += '<TR><TD>'+uW.itemlist.i5.name+'</td><TD>8 hrs</td><TD>'+tx('More than 7 hours 30 minutes remaining')+'</td></tr>';
		helpText += '<TR><TD>'+uW.itemlist.i4.name+'</td><TD>2.5 hrs</td><TD>'+tx('More than 2 hours remaining')+'</td></tr>';
		helpText += '<TR><TD>'+uW.itemlist.i3.name+'</td><TD>1 hr</td><TD>'+tx('More than 45 minutes remaining')+'</td></tr>';
		helpText += '<TR><TD>'+uW.itemlist.i2.name+'</td><TD>15 mins</td><TD>'+tx('More than 5 minutes remaining')+'</td></tr>';
		helpText += '<TR><TD>'+uW.itemlist.i1.name+'</td><TD>1 min</td><TD>'+tx('More than 30 seconds remaining')+'</td></tr>';
		helpText += '</table>';
		helpText += '<p>'+tx('If the override box is ticked, then the override rule specified will take priority')+'.</p><br>';

		var pop = new CPopup ('BotHelp', 0, 0, 460, 420, true);
		pop.centerMe (mainPop.getMainDiv());
		pop.getMainDiv().innerHTML = helpText;
		pop.getTopDiv().innerHTML = '<CENTER><B>'+tx("PowerBot+ Help")+': '+tx("Speedups")+'</b></center>';
		pop.show (true);
	},

	addThroneQueue : function (item,action,level,nopaint) {
		var t = Tabs.Throne;
		level = parseIntNan(level);
		if (level==0) return;
		if (item==0) return;

		var throneItem = uW.kocThroneItems[item];
		if (!throneItem) return;

		if (action=="upgrade" && throneItem.level>=level) return;
		if (action=="enhance" && throneItem.quality>=level) return;

		// if item already in queue then ignore

		var found = false;
		for (var i=0;i<Options.ThroneOptions.UpgradeQueue.length;i++) {
			var QObj = Options.ThroneOptions.UpgradeQueue[i];
			if (QObj.item == item && QObj.action == action) {
				if (QObj.maximum<level) {
					Options.ThroneOptions.UpgradeQueue[i].maximum=level; // update level if necessary
				}
				found = true;
				break;
			}
		}
		if (!found) {
			var QObj = {};
			QObj.item = item;
			QObj.action = action;
			QObj.maximum = level;
			QObj.status = 0;
			QObj.triesTotal = 0;
			QObj.triesThis = 0;
			QObj.triesLimiter = 0;
			QObj.messages = tx('Not Started');

			Options.ThroneOptions.UpgradeQueue.push(QObj);
			if (!nopaint) { t.paintUpgradeQueue(); }
		}
	},

	deleteThroneQueueAll : function() {
		var t = Tabs.Throne;
		Options.ThroneOptions.UpgradeQueue = [];
		saveOptions();
		ById('btUpgradeMessages').innerHTML = tx("Upgrade Queue deleted!");
		t.paintUpgradeQueue();
	},

	deleteThroneQueue : function(obj,index) {
		var t = Tabs.Throne;
		Options.ThroneOptions.UpgradeQueue.splice(index,1);
		saveOptions();
		ById('btUpgradeMessages').innerHTML = tx("Queue entry deleted!");
		t.paintUpgradeQueue();
	},

	ThroneQueueUp : function(obj,index) {
		var t = Tabs.Throne;
		if (index>0) {
			Options.ThroneOptions.UpgradeQueue.splice(index-1, 0, Options.ThroneOptions.UpgradeQueue.splice(index, 1)[0]);
		}
		saveOptions();
		t.paintUpgradeQueue();
	},

	ThroneQueueDn : function(obj,index) {
		var t = Tabs.Throne;
		if (index<Options.ThroneOptions.UpgradeQueue.length-1) {
			Options.ThroneOptions.UpgradeQueue.splice(index+1, 0, Options.ThroneOptions.UpgradeQueue.splice(index, 1)[0]);
		}
		saveOptions();
		t.paintUpgradeQueue();
	},

	ThroneQueueMaxChange : function(obj,index) {
		var t = Tabs.Throne;
		Options.ThroneOptions.UpgradeQueue[index].maximum = parseIntNan(obj.value);

		saveOptions();
	},

	paintUpgradeQueue : function () {
		var t = Tabs.Throne;
		var m = '';

		MasterQuals = {};
		for (k=1;k<cardQuality.length;k++) {
			var quality = cardQuality[k].toLowerCase();
			MasterQuals[k] = uW.g_js_strings.throneRoom[quality];
		}
		MasterLevels = {};
		for (var type_index = 3; type_index < CM.MAX_MASTERS_TOKEN_LEVEL + 1; ++type_index) {
			MasterLevels[type_index] = type_index;
		}

		var QLen = Options.ThroneOptions.UpgradeQueue.length;

		if (QLen==0) {
			m = '<br><div align=center style="opacity:0.3;">'+tx('No throne cards queued')+'</div>';
			ById('btthroneUpgradeQueue').innerHTML = m;
		} else {
			m = '<TABLE width=100% cellspacing=0 align=center class=xtab><tr><th class=xtabHD align=left>'+tx('Card')+'</th><th width=50px class=xtabHD align=left>'+tx('Action')+'</th><th width=70px class=xtabHD align=left>'+tx('Target')+'</th><th class=xtabHD align=left>'+tx('Messages')+'</th><th width=50px class=xtabHD align=center>'+tx('Order')+'</th><th width=50px class=xtabHD align=center>'+uW.g_js_strings.commonstr.status+'</th><th width=100px class=xtabHD align=right><a class="inlineButton btButton red14" onclick="btThroneQueueDeleteAll()"><span>'+tx('Remove All')+'</span></a></th></tr>';
			var r = 0;

			for (var Qitem=0;Qitem<Options.ThroneOptions.UpgradeQueue.length;Qitem++) {
				var QObj = Options.ThroneOptions.UpgradeQueue[Qitem];
				if (QObj) {
					var throneItem = uW.kocThroneItems[QObj.item];

					var throneCardName = tx("Unknown / Salvaged")+ ' ['+QObj.item+']';
					var cardExists = false;
					var throneStatusClass = '';
					if (throneItem) {
						cardExists = true;
						throneCardName = throneItem.name;

						if (QObj.status == 2) {
							throneStatusClass = 'btthroneSuccess';
						} else if (throneItem.isBroken) {
							if (throneItem.id == Seed.queue_throne.itemId) {
								throneStatusClass = 'btthroneHammer';
							} else {
								throneStatusClass = 'btthroneBroken';
							}
						} else {
							throneStatusClass = 'btthroneGoButton';
						}
					}

					rowClass = 'evenRow';
					var rem = (r % 2);
					if (rem == 1) rowClass = 'oddRow';
					m += '<TR class="'+rowClass+'"><TD width=150px align=left><div id=btThroneQueueItem'+Qitem+' style="white-space:nowrap;">'+throneCardName+'</div></td>';
					if (cardExists) {
						m += '<TD align=left>'+capitalize(tx(QObj.action))+'</td>';
						if (QObj.action=="enhance") { m += '<TD align=left>'+htmlSelector(MasterQuals,QObj.maximum, 'class=btInput id="btthroneUpgradeQueueMax_'+Qitem+'" onchange="btThroneQueueMaxChange(this,'+Qitem+')" Qitem="'+Qitem+'"')+'</td>'; }
						else { m += '<TD align=left>'+htmlSelector(MasterLevels,QObj.maximum, 'class=btInput id="btthroneUpgradeQueueMax_'+Qitem+'" onchange="btThroneQueueMaxChange(this,'+Qitem+')" Qitem="'+Qitem+'"')+'</td>'; }
						m += '<td>'+QObj.messages+'&nbsp;';
						if (QObj.status==1) {
							m += '<br>'+QObj.triesThis+' '+tx('tries this level')+', '+QObj.triesTotal+' '+tx('tries in total');
						}
						m += '</td>';
						m += '<td align=center><a title="move up" onclick="btThroneQueueUp(this,'+Qitem+')"><img class=flip style="height:10px;width:13px;" src="'+DownArrow+'"><br><a title="move down" onclick="btThroneQueueDn(this,'+Qitem+')"><img style="height:10px;width:13px;" src="'+DownArrow+'"></td>';
						m += '<td align=center><div id=btThroneQueueState'+Qitem+' class="'+throneStatusClass+'"></div></td>';
					}
					else {
						m += '<TD align=left>&nbsp;</td><TD align=left>&nbsp;</td><TD align=left>&nbsp;</td><TD align=center>&nbsp;</td><TD align=center>&nbsp;</td>';
					}
					m += '<td align=right>'+strButton8(tx('Remove'),'onclick="btThroneQueueDelete(this,'+Qitem+')"')+'</td>';
					m += '</td></tr>';
					r++;
				}
			}
			m += '</table><div align=center id=btthroneUpgradeQueueMessage>&nbsp;</div>';
			ById('btthroneUpgradeQueue').innerHTML = m;

			for (var Qitem=0;Qitem<Options.ThroneOptions.UpgradeQueue.length;Qitem++) {
				var QObj = Options.ThroneOptions.UpgradeQueue[Qitem];
				if (QObj) {
					var trItem = uW.kocThroneItems[QObj.item];
					if (trItem) {
						ById('btThroneQueueItem'+Qitem).addEventListener('mouseover', function(A) {
							A.stopPropagation();
							var throneId = Options.ThroneOptions.UpgradeQueue[this.id.split('btThroneQueueItem')[1]].item;
							var throneItem = uW.kocThroneItems[throneId];
							if (throneItem) {
								uW.Tooltip.show(A, Tabs.Reference.DisplayTRCard(throneItem,false))
							}
						}, false);
					}
				}
			}
		}
		ById('btthroneUpgradeQueueCount').innerHTML = QLen;
		ResetFrameSize('btMain',100,GlobalOptions.btWinSize.x);
	},

	// REPAIR FUNCTIONS

	BreakThroneButtonClicked : function () {
		var t = Tabs.Throne;
		if (t.BreakInProgress) { // cancel
			t.BreakInProgress = false;
			ById('btthroneBreakThrone').innerHTML = '<span>'+tx('Break Throne Room')+'</span>';
			ById('btthroneBreakMessages').innerHTML = tx("Throne room breaking cancelled")+'!';
		}
		else { // do it!
			if (t.GemUseTripSwitch) { return; } // don't start if gem probs
			// build queue
			t.BreakQueue = [];
			t.BreakMight = 0;
			for (var throneId in uW.kocThroneItems) {
				var throneItem = uW.kocThroneItems[throneId];
				if (throneItem && !throneItem.isBroken) {
					var throne_seq = Object.keys(uW.kocThroneItems);
					var item_seq = throne_seq.indexOf(throneItem.id.toString())+1;
					if (item_seq<=(Seed.throne.rowNum*5)) {
						if (!Options.ThroneOptions.BreakIgnorePreset || t.NumberOfPresetsEquipped(throneId)==0) {
							if ((throneItem.level>=parseIntNan(Options.ThroneOptions.BreakMinLevel)) && (throneItem.level<=parseIntNan(Options.ThroneOptions.BreakMaxLevel)) && throneItem.level<CM.MAX_MASTERS_TOKEN_LEVEL) {
								var itemMight = CardMight(throneItem);
								t.BreakMight += itemMight;
								t.BreakQueue.push(throneId);
								if ((parseIntNan(Options.ThroneOptions.BreakMaxMight)!=0) && (t.BreakMight>parseIntNan(Options.ThroneOptions.BreakMaxMight))) {
									break;
								}
							}
						}
					}
				}
			}

			if (t.BreakQueue.length>0) {
				var popConfirm = null;
				popConfirm = new CPopup('ptConfirmAction', 0, -100, 500, 150, true, function () { clearTimeout(1000); });
				popConfirm.centerMe(mainPop.getMainDiv());
				var m = '<DIV style="height:50px;"><br><TABLE align=center style="width:500px;" class=xtab>';
				m += '<tr><TD align=center><div style="white-space:initial;">'+tx('Please confirm you want to break')+' '+t.BreakQueue.length+' '+tx('throne room cards, reducing your might by')+' '+addCommas(t.BreakMight)+'?</div><br>&nbsp;</td></tr>';
				m += '<tr><TD align=center><INPUT id=ptConfirm type=submit value="'+tx('Break Throne Room')+'" \>&nbsp;<INPUT id=ptCancel type=submit value="'+uW.g_js_strings.commonstr.cancel+'" \><br>&nbsp;</td></tr></table></div>';
				popConfirm.getMainDiv().innerHTML = m;
				ResetFrameSize('ptConfirmAction',150,500);
				popConfirm.getTopDiv().innerHTML = '<DIV align=center><b>'+tx('Break Throne Room Confirmation')+'?</b></div>';
				popConfirm.show(true);
				ById('ptConfirm').addEventListener('click', function () {
					popConfirm.show(false);
					popConfirm.onClose();
					popConfirm.destroy();
					popConfirm = null;

					t.BreakInProgress = true;
					t.BreakTotal = t.BreakQueue.length;
					t.BreakCounter = 0;
					ById('btthroneBreakThrone').innerHTML = '<span>'+tx('Cancel')+'</span>';
					ById('btthroneBreakMessages').innerHTML = tx("Throne Room break initiated")+'!';
					t.ProcessThroneBreak();

				}, false);
				ById('ptCancel').addEventListener('click', function () {
					popConfirm.show(false);
					popConfirm.onClose();
					popConfirm.destroy();
					popConfirm = null;
				}, false);
			}
			else {
				ById('btthroneBreakMessages').innerHTML = tx("No cards matching Throne Room breaking parameters")+'!';
			}
		}

	},

	ProcessThroneBreak : function () {
		var t = Tabs.Throne;
		if (!t.BreakInProgress) { return; } // cancelled!
		if (t.BreakQueue.length==0) {
			t.BreakInProgress = false;
			ById('btthroneBreakThrone').innerHTML = '<span>'+tx('Break Throne Room')+'</span>';
			ById('btthroneBreakMessages').innerHTML = tx('Throne room breaking complete')+'!';
			return;
		}
		t.BreakCounter++;
		var trId = t.BreakQueue.pop(0);
		var throneItem = uW.kocThroneItems[trId];
		if (throneItem && !throneItem.isBroken) { // just checking
			ById('btthroneBreakMessages').innerHTML = tx("Breaking")+' '+throneItem.name+' ('+t.BreakCounter+'/'+t.BreakTotal+')';
			t.UpgradeItem(trId,t.CheckBreakResult,0);
		}
	},

	CheckBreakResult : function(rslt,trId) {
		var t = Tabs.Throne;
		if (rslt.ok) {
			if (Options.ThroneOptions.BreakRepairAuto) {
				t.addThroneRepairQueue(trId);
			}
		}
		if (rslt.reason && rslt.reason=="aether") {
			t.BreakInProgress = false;
			ById('btthroneBreakThrone').innerHTML = '<span>'+tx('Break Throne Room')+'</span>';
			ById('btthroneBreakMessages').innerHTML = tx('Aetherstone depleted. Turning off')+'!';
		}
		if (t.GemUseTripSwitch) {
			t.BreakInProgress = false;
			ById('btthroneBreakThrone').innerHTML = '<span>'+tx('Break Throne Room')+'</span>';
			ById('btthroneBreakMessages').innerHTML = tx('Throne Room Break accidentally used gems - Please refresh game! Turning off')+'!';
			uW.Modal.showAlert('<div align="center">'+tx('Throne Room Break accidentally used gems - Please refresh game! Turning off')+'</div>');
		}
		setTimeout(t.ProcessThroneBreak,2000);
	},

	toggleAutoRepairState: function(obj){
		var t = Tabs.Throne;
		obj = ById('btAutoRepairState');
		if (Options.ThroneOptions.RepairRunning == true) {
			Options.ThroneOptions.RepairRunning = false;
			obj.value = tx("Repair = OFF");
			t.RepairStatus = tx('Powered Off');
			t.PaintRepairStatus();
			clearTimeout(t.RepairTimer);
		}
		else {
			Options.ThroneOptions.RepairRunning = true;
			obj.value = tx("Repair = ON");
			t.RepairStatus = tx('Starting')+'...';
			t.PaintRepairStatus();
			t.RepairTimer = setTimeout(function () { t.doAutoRepairLoop();}, 0);
		}
		saveOptions();
		SetToggleButtonState('Repair',Options.ThroneOptions.RepairRunning,'Repair');
	},

	doAutoRepairLoop : function() {
		var t = Tabs.Throne;
		clearTimeout(t.RepairTimer);
		if (!Options.ThroneOptions.RepairRunning) {
			t.RepairStatus = tx('Powered Off');
			t.PaintRepairStatus();
			return;
		}

		var BrokenItemInQueue = false;
		t.looprepairaction = false;
		t.autorepairdelay = 2; // default 2 seconds delay if no action taken!

		t.RepairStatus = tx('Checking for cards to repair')+'...';
		t.PaintRepairStatus();

		if (Options.ThroneOptions.RepairQueue.length != 0) {
			// if repair queue busy see if we can use repair speedups
			var now = unixTime();
			if (Seed.queue_throne && Seed.queue_throne.end && Seed.queue_throne.end>now) {
				t.autoSpeedup("repair");
				t.looprepairaction = true;
			}
			else {
				// Find first of any broken items in queue to repair!
				// If Upgrade queue running, broken items in that queuee take priority!
				if (Options.ThroneOptions.UpgradeRunning) {
					// Find first of any broken items in queue to repair!
					for (var Qitem = 0; Qitem < Options.ThroneOptions.UpgradeQueue.length; Qitem++) {
						var QObj = Options.ThroneOptions.UpgradeQueue[Qitem];
						if (QObj) {
							var throneItem = uW.kocThroneItems[QObj.item];
							if (throneItem && throneItem.isBroken) {
								BrokenItemInQueue = true;
								t.RepairItem(throneItem.id,"upgrade");
								t.looprepairaction = true;
								break;
							}
						}
					}
				}

				if (!BrokenItemInQueue) {
					for (var Qitem = 0; Qitem < Options.ThroneOptions.RepairQueue.length; Qitem++) {
						var QObj = Options.ThroneOptions.RepairQueue[Qitem];
						if (QObj) {
							var throneItem = uW.kocThroneItems[QObj.item];
							if (throneItem && throneItem.isBroken) {
								BrokenItemInQueue = true;
								t.RepairItem(throneItem.id,"repair");
								t.looprepairaction = true;
								break;
							}
						}
					}
				}
				if (!BrokenItemInQueue) {
					t.RepairStatus = tx('Repair queue complete')+'!';
					t.PaintRepairStatus();
				}
			}
		}
		else { // no queue! loop round again...
			t.RepairStatus = tx('No cards in repair queue')+'!';
			t.PaintRepairStatus();
		}
		if (t.looprepairaction) { t.autorepairdelay = t.intervalRepairSecs; } // delay next action
		t.RepairTimer = setTimeout(function () { t.doAutoRepairLoop(); }, (t.autorepairdelay * 1000));
	},

	fillRepairItemDropdown : function () {
		var t = Tabs.Throne;

		ById('btthroneRepairItem').options.length = 0;
		var o = document.createElement("option");
		o.text = "-- "+tx('Select Item')+" --"
		o.style = 'padding-left:15px;"';
		o.value = 0;
		ById('btthroneRepairItem').options.add(o);

		for (var throneId in uW.kocThroneItems) {
			var throneItem = uW.kocThroneItems[throneId];
			if (throneItem.isBroken) {
				var o = document.createElement("option");
				o.text = throneItem.name;
				o.value = throneId;
				o.style = 'padding-left:15px;background-image:url('+BrokenIcon+');background-size:12px 12px;background-repeat:no-repeat;';
				ById('btthroneRepairItem').options.add(o);
			}
		}
	},

	PaintRepairStatus : function () {
		var t = Tabs.Throne;

		var now = unixTime();
		if (!t.serverwait) {
			if (Seed.queue_throne && Seed.queue_throne.end && Seed.queue_throne.end>now) {
				var throne_item = uW.kocThroneItems[Seed.queue_throne.itemId];
				if (throne_item) {
					var m = '<div>'+tx('Repairing')+' '+throne_item.name+'</div>';
					m += '<div><i><span id=btthroneoverviewrepairtimer>'+timestr(Seed.queue_throne.end - now)+'</span><span>&nbsp;'+tx('remaining')+'...</span></i><span style="inline-block;float:right;margin-top:-2px;">';

					var Squire = parseIntNan(Seed.items.i1);
					var Knight = parseIntNan(Seed.items.i2);
					var Guinevere = parseIntNan(Seed.items.i3);
					var Morgana = parseIntNan(Seed.items.i4);
					var Arthur = parseIntNan(Seed.items.i5);
					var Merlin = parseIntNan(Seed.items.i6);
					var Divine = parseIntNan(Seed.items.i7);
					var Epic = parseIntNan(Seed.items.i8);

					var Speedups = '';
					Speedups += t.paintSpeedup(1,Squire);
					Speedups += t.paintSpeedup(2,Knight);
					Speedups += t.paintSpeedup(3,Guinevere);
					Speedups += t.paintSpeedup(4,Morgana);
					Speedups += t.paintSpeedup(5,Arthur);
					Speedups += t.paintSpeedup(6,Merlin);
					Speedups += t.paintSpeedup(7,Divine);
					Speedups += t.paintSpeedup(8,Epic);
					Speedups += '<td class=xtab style="padding-right:2px">'+strButton8(tx("Cancel Repair"),'onClick="cancelRepair()"')+'</td>';
					if (Speedups != "") Speedups = "<table align=left cellspacing=0 cellpadding=0><tr>" + Speedups + "</tr></table>";
					m += Speedups+'</span>';
					if (ById('btthroneoverviewrepairstatusdiv')) {
						ById('btthroneoverviewrepairstatusdiv').innerHTML = m;
					}
				}
			}
			else {
				if (ById('btthroneoverviewrepairstatusdiv')) ById('btthroneoverviewrepairstatusdiv').innerHTML = t.RepairStatus;
			}
		}
	},

	paintSpeedup : function (item, count) {
		var t = Tabs.Throne;
		var n = '';
		if (count>0) {
			n += '<td class=xtab style="padding-right:2px"><a onClick="btthronerepairSpeedup('+item+')"><img height=18 style="opacity:0.8;vertical-align:text-top;" src="'+IMGURL+'items/70/'+item+'.jpg" title="'+itemTitle(item)+'"></a></td>';
		}
		return n;
	},

	SpeedupRepair : function (iid, notify) {
		var t = Tabs.Throne;
		var now = unixTime();
		if (Seed.queue_throne && Seed.queue_throne.end && Seed.queue_throne.end>now) {
			t.serverwait = true;
			if (ById('btthroneoverviewrepairstatusdiv')) ById('btthroneoverviewrepairstatusdiv').innerHTML = tx('Applying Speedup')+'...';
			var now = unixTime();
			var params = uW.Object.clone(uW.g_ajaxparams);
			params.ctrl = 'throneRoom\\ThroneRoomServiceAjax';
			params.action = 'speedupRepair';
			params.throneItemId = Seed.queue_throne.itemId;
			params.speedupItemId = iid;

			new MyAjaxRequest(uW.g_ajaxpath + "ajax/_dispatch53.php" + uW.g_ajaxsuffix, {
				method: "post",
				parameters: params,
				onSuccess: function (rslt) {
					if (rslt.ok) {
						var reduced = CM.intelligentOrdering.getReduceTime(iid),
						timeDifference = 0,
						startTime,
						endTime;
						Seed.items["i" + iid] = parseInt(Seed.items["i" + iid]) - 1;
						uW.ksoItems[iid].subtract();
						timeDifference = SpeedupArray[iid-1];
						startTime = Seed.queue_throne.start;
						endTime = Seed.queue_throne.end;
						Seed.queue_throne.start = startTime - reduced;
						Seed.queue_throne.end = endTime - reduced;
						CM.ThronePanelView.appliedSpeedUp();
						if (Seed.queue_throne.end < uW.unixtime()) {
							if (jQuery("#thronePanelBrokenContainer").length > 0) {
								CM.ModalManager.close();
							}
							clearInterval(CM.ThronePanelView.repairIntervals);
							CM.ThronePanelView.repairIntervals = null;
							var throne_item = uW.kocThroneItems[params.throneItemId];
							throne_item.isBroken = false;
							throne_item.brokenType = "";
							jQuery("#throneInventoryItem" + params.throneItemId + " .repair").remove();
							CM.ThroneController.updateItemMight(throne_item, 0);
						}
						t.serverwait = false;
						t.PaintRepairStatus();
					} else {
						t.serverwait = false;
						t.log(tx('Error using repair speedup')+' - '+rslt.msg,'REPAIR',true);
					}
					if (notify) notify(rslt);
				},
				onFailure: function () {
					t.serverwait = false;
					if (notify) notify({msg: 'AJAX error'});
				}
			},true);
		}
	},

	CancelRepair : function (notify) {
		var t = Tabs.Throne;
		if (Seed.queue_throne && Seed.queue_throne.itemId) {
			t.serverwait = true;
			if (ById('btthroneoverviewrepairstatusdiv')) ById('btthroneoverviewrepairstatusdiv').innerHTML = tx('Cancelling Repair')+'...';

			var params = uW.Object.clone(uW.g_ajaxparams);
			params.ctrl = 'throneRoom\\ThroneRoomServiceAjax';
			params.action = 'cancelRepair';
			params.throneRoomItemId = Seed.queue_throne.itemId;

			new MyAjaxRequest(uW.g_ajaxpath + "ajax/_dispatch53.php" + uW.g_ajaxsuffix, {
				method: "post",
				parameters: params,
				onSuccess: function (rslt) {
					if (rslt.ok) {
						var throne_item = uW.kocThroneItems[params.throneRoomItemId];

						jQuery("#throneInventoryItem" + params.throneRoomItemId + " .repair").remove();
						jQuery("#throneInventoryItem" + params.throneRoomItemId).append("<span class='broken'></span>");
						Seed.queue_throne = {};
						clearInterval(CM.ThronePanelView.repairIntervals);
						CM.ThronePanelView.repairIntervals = null;
						t.serverwait = false;
						t.PaintRepairStatus();
					} else {
						t.serverwait = false;
						t.log(tx('Error cancelling repair')+' - '+rslt.msg,'REPAIR',true);
					}
					if (notify) notify(rslt);
				},
				onFailure: function () {
					t.serverwait = false;
					if (notify) notify({msg: 'AJAX error'});
				}
			},true);
		}
	},

	paintRepairQueue : function () {
		var t = Tabs.Throne;
		var m = '';

		var repairinc = 0;
		var currSet = getFactionBonus(Seed.throne.activeSlot);
		if (currSet.hazBonus && currSet.faction === "briton") {
			repairinc = CM.ThroneController.effectBonus(94);
		}
		var QLen = Options.ThroneOptions.RepairQueue.length;

		if (QLen==0) {
			m = '<br><div align=center style="opacity:0.3;">'+tx('No throne cards queued')+'</div>';
			ById('btthroneRepairQueue').innerHTML = m;
		} else {
			m = '<div><table class=xtab width=100%><tr><td align=right id=btthroneRepairQueueMight>&nbsp;</td><td align=left id=btthroneRepairQueueTime>&nbsp;</td></tr></table></div>';
			m += '<TABLE width=100% cellspacing=0 align=center class=xtab><tr><th class=xtabHD align=left>'+tx('Card')+'</th><th width=50px class=xtabHD align=center>'+tx('Order')+'</th><th width=50px class=xtabHD align=center>'+uW.g_js_strings.commonstr.status+'</th><th width=100px class=xtabHD align=right><a class="inlineButton btButton red14" onclick="btThroneRepairQueueDeleteAll()"><span>'+tx('Remove All')+'</span></a></th></tr>';

			var BrokenMight = 0;
			var BrokenTime = 0;

			var r = 0;

			for (var Qitem=0;Qitem<Options.ThroneOptions.RepairQueue.length;Qitem++) {
				var QObj = Options.ThroneOptions.RepairQueue[Qitem];
				if (QObj) {
					var throneItem = uW.kocThroneItems[QObj.item];

					var throneCardName = tx("Unknown / Salvaged")+ ' ['+QObj.item+']';
					var cardExists = false;
					var throneStatusClass = '';
					if (throneItem) {
						cardExists = true;
						throneCardName = throneItem.name;

						if (throneItem.isBroken) {
							BrokenMight += CardMight(throneItem);
							if (throneItem.id == Seed.queue_throne.itemId) {
								throneStatusClass = 'btthroneHammer';
								var reptime = Seed.queue_throne.end - uW.unixtime();
							} else {
								throneStatusClass = 'btthroneBroken';
								if (throneItem.brokenType=="level") { var reptime = t.getRepairTime(throneItem.brokenType,throneItem.level); }
								else { var reptime = t.getRepairTime(throneItem.brokenType,throneItem.quality); }
								reptime = Math.ceil(reptime - (reptime * (repairinc / 100)))
							}
							BrokenTime += reptime;
						} else {
							throneStatusClass = 'btthroneSuccess';
						}
					}

					rowClass = 'evenRow';
					var rem = (r % 2);
					if (rem == 1) rowClass = 'oddRow';
					m += '<TR class="'+rowClass+'"><TD align=left><div><span id=btThroneRepairQueueItem'+Qitem+' style="white-space:nowrap;">'+throneCardName+'</span></div></td>';
					if (cardExists) {
						m += '<td align=center><a title="move up" onclick="btThroneRepairQueueUp(this,'+Qitem+')"><img class=flip style="height:10px;width:13px;" src="'+DownArrow+'"><br><a title="move down" onclick="btThroneRepairQueueDn(this,'+Qitem+')"><img style="height:10px;width:13px;" src="'+DownArrow+'"></td>';
						m += '<td align=center><div id=btThroneRepairQueueState'+Qitem+' class="'+throneStatusClass+'"></div></td>';
					}
					else {
						m += '<TD align=center>&nbsp;</td><TD align=center>&nbsp;</td>';
					}
					m += '<td align=right>'+strButton8(tx('Remove'),'onclick="btThroneRepairQueueDelete(this,'+Qitem+')"')+'</td>';
					m += '</td></tr>';
					r++;
				}
			}
			m += '</table><div align=center id=btthroneRepairQueueMessage>&nbsp;</div>';
			ById('btthroneRepairQueue').innerHTML = m;

			t.UpdateRepairQueueSummary(BrokenMight,BrokenTime);

			for (var Qitem=0;Qitem<Options.ThroneOptions.RepairQueue.length;Qitem++) {
				var QObj = Options.ThroneOptions.RepairQueue[Qitem];
				if (QObj) {
					var trItem = uW.kocThroneItems[QObj.item];
					if (trItem) {
						ById('btThroneRepairQueueItem'+Qitem).addEventListener('mouseover', function(A) {
							A.stopPropagation();
							var throneId = Options.ThroneOptions.RepairQueue[this.id.split('btThroneRepairQueueItem')[1]].item;
							var throneItem = uW.kocThroneItems[throneId];
							if (throneItem) {
								uW.Tooltip.show(A, Tabs.Reference.DisplayTRCard(throneItem,false))
							}
						}, false);
					}
				}
			}
		}
		ById('btthroneRepairQueueCount').innerHTML = QLen;
		ResetFrameSize('btMain',100,GlobalOptions.btWinSize.x);
	},

	addThroneRepairQueue : function (item,nopaint) {
		var t = Tabs.Throne;
		var throneItem = uW.kocThroneItems[item];
		if (!throneItem) return;

		// if item already in queue then ignore

		var found = false;
		for (var i=0;i<Options.ThroneOptions.RepairQueue.length;i++) {
			var QObj = Options.ThroneOptions.RepairQueue[i];
			if (QObj.item == item) { found = true; break; }
		}
		if (!found) {
			var QObj = {};
			QObj.item = item;
			Options.ThroneOptions.RepairQueue.push(QObj);
			if (!nopaint) { t.paintRepairQueue(); }
		}
	},

	deleteThroneRepairQueueAll : function() {
		var t = Tabs.Throne;
		Options.ThroneOptions.RepairQueue = [];
		saveOptions();
		ById('btRepairMessages').innerHTML = tx("Repair Queue deleted!");
		t.paintRepairQueue();
	},

	deleteThroneRepairQueue : function(obj,index) {
		var t = Tabs.Throne;
		Options.ThroneOptions.RepairQueue.splice(index,1);
		saveOptions();
		ById('btRepairMessages').innerHTML = tx("Queue entry deleted!");
		t.paintRepairQueue();
	},

	ThroneRepairQueueUp : function(obj,index) {
		var t = Tabs.Throne;
		if (index>0) {
			Options.ThroneOptions.RepairQueue.splice(index-1, 0, Options.ThroneOptions.RepairQueue.splice(index, 1)[0]);
		}
		saveOptions();
		t.paintRepairQueue();
	},

	ThroneRepairQueueDn : function(obj,index) {
		var t = Tabs.Throne;
		if (index<Options.ThroneOptions.RepairQueue.length-1) {
			Options.ThroneOptions.RepairQueue.splice(index+1, 0, Options.ThroneOptions.RepairQueue.splice(index, 1)[0]);
		}
		saveOptions();
		t.paintRepairQueue();
	},

	// SALVAGE FUNCTIONS

	toggleAutoSalvageState: function(obj){
		var t = Tabs.Throne;
		obj = ById('btAutoSalvageState');
		if (Options.ThroneOptions.SalvageRunning == true) {
			Options.ThroneOptions.SalvageRunning = false;
			obj.value = tx("Salvage = OFF");
			t.SalvageStatus = tx('Powered Off');
			t.PaintSalvageStatus();
			clearTimeout(t.SalvageTimer);
		}
		else {
			Options.ThroneOptions.SalvageRunning = true;
			obj.value = tx("Salvage = ON");
			t.SalvageStatus = tx('Starting')+'...';
			t.PaintSalvageStatus();
			t.SalvageTimer = setTimeout(function () { t.doAutoSalvageLoop();}, 0);
		}
		saveOptions();
		SetToggleButtonState('Salvage',Options.ThroneOptions.SalvageRunning,'Salvage');
	},

	doAutoSalvageLoop : function() {
		var t = Tabs.Throne;
		clearTimeout(t.SalvageTimer);
		if (!Options.ThroneOptions.SalvageRunning) {
			t.SalvageStatus = tx('Powered Off');
			t.PaintSalvageStatus();
			return;
		}

		t.loopsalvageaction = false;
		t.autosalvagedelay = t.intervalSalvageLoopSecs; // big delay if no action taken!

		if (t.SalvageItems.length == 0) { // build new salvage list
			t.SalvageItems = t.BuildSalvageList(false);
		}

		if (t.SalvageItems.length > 0) {
			var trId = t.SalvageItems.splice(0,1);
			var throne_item = uW.kocThroneItems[trId];
			if (throne_item) {
				t.loopsalvageaction = true;
				var throne_seq = Object.keys(uW.kocThroneItems);
				var item_seq = throne_seq.indexOf(trId.toString())+1;
				if (item_seq>(Seed.throne.rowNum*5)) {
						t.SalvageStatus = tx('Cannot salvage')+' '+throne_item.name+' - '+tx('Throne room row is still locked');
						t.log(t.SalvageStatus,'GENERAL',true);
						t.PaintSalvageStatus();
				}
				else {
					// check if we need to upgrade item first
					if (t.upgradeProfit && Options.ThroneOptions.SalvageUpgradeFirst && !t.GemUseTripSwitch && (throne_item.quality <= Options.ThroneOptions.SalvageUpgradeFirstMaxQuality) && throne_item.level == 0) {
						Options.ThroneOptions.DoubleCheckSalvage.push(trId);
						t.UpgradeItem(trId,function (rslt,trId,aetherbalance) { t.SalvageItem(trId,t.UpdateSalvageStats,aetherbalance); },false,0);
					}
					else {
						t.SalvageItem(trId,t.UpdateSalvageStats,0);
					}
				}
			}
		}
		else {
			t.SalvageStatus = tx('Waiting for cards to salvage')+'...';
			t.PaintSalvageStatus();
		}

		if (t.loopsalvageaction) { t.autosalvagedelay = t.intervalSalvageSecs; } // action taken, apply small delay...
		t.SalvageTimer = setTimeout(function () { t.doAutoSalvageLoop(); }, (t.autosalvagedelay * 1000));
	},

	BuildSalvageList : function () {
		var t = Tabs.Throne;

		var countItem = 0;
		var retList = [];

		for (var k in uW.kocThroneItems) {
			var throne_item = uW.kocThroneItems[k];
			if (throne_item == null || !throne_item) continue;

			countItem++;

			// safety ignores
			if (throne_item.level != 0) continue;
			if (throne_item.unique > 0) continue;
			if (throne_item.isEquipped) continue;
			if (throne_item.isBroken) continue;

			if (countItem <= Options.ThroneOptions.SalvageKeepFirst) continue;
			if (throne_item.quality >= parseIntNan(Options.ThroneOptions.SalvageMaxQuality)) continue;

			// check the rules
			if (t.applyRules(throne_item.id)) { //item was found in salvage rules
				if (Options.ThroneOptions.SalvageUpgradeAuto) {
					t.addThroneQueue(throne_item.id,'upgrade',Options.ThroneOptions.UpgradeDefaultLevel);
					t.addThroneQueue(throne_item.id,'enhance',Options.ThroneOptions.UpgradeDefaultQuality);
				}
				continue;
			}

			// item not found, so needs to be salvaged
			retList.push(throne_item.id);
		}
		return retList;
	},

	getEffect : function(effString) {
		for (var efx in CM.thronestats.tiers) {
			if (effString==CM.ThroneController.getEffectName(efx)) {
				return efx;
			}
		}
		if (effString=="Infantry" || effString=="Ranged" || effString=="Horsed" || effString=="Siege" || effString=="Spellcaster" || effString=="Tower") { return effString; }
		else { return ""; }
	},

	applyRules : function (trId) {
		var t = Tabs.Throne;
		for (var r=0;r<Options.ThroneOptions.SalvageRuleSet.length;r++) {
			var rule = Options.ThroneOptions.SalvageRuleSet[r];
			if (rule.ThroneApplyRule(trId)) return true;
		}
		return false;
	},

	UpgradeItem : function (trId,notify,buffItemId,auto,Qitem) {
		var t = Tabs.Throne;

		var throne_item = uW.kocThroneItems[trId];
		if (throne_item) {
			var StonesRequired = 0;
			if (CM.thronestats.upgrade[throne_item.level+1]) { StonesRequired = CM.thronestats.upgrade[throne_item.level+1].Stones; }
			var num_city = t.pickAetherUpgradeCity(Options.ThroneOptions.UpgradeCityNum,StonesRequired);
			var UpgradeCityId = Seed.cities[num_city][0];

			if (auto && parseInt(Seed.resources["city"+UpgradeCityId]["rec5"][0])<Options.ThroneOptions.UpgradeMinAether) {
				t.UpgradeReturnStatus = tx('Not enough aetherstone to attempt upgrade');
				t.PaintUpgradeStatus();
				return;
			}

			var savecurrentcityid = uW.currentcityid;
			uW.currentcityid = UpgradeCityId;
			var w = CM.ThronePanelController.calcCost("upgrade", throne_item, null, "stones");
			uW.currentcityid = savecurrentcityid;

			if ((w.gems.use > 0) || (w.stones.total > parseInt(Seed.resources["city"+UpgradeCityId]["rec5"][0]))) {
				t.log(tx('Not enough aetherstones to upgrade'),'GENERAL',true);
				if (auto) {
					t.UpgradeReturnStatus = tx('Not enough aetherstone to upgrade');
					t.PaintUpgradeStatus();
					return;
				}
				else {
					if (notify) notify({ok:false,reason:'aether'},trId,0);
				}
			}
			else {
				var params = uW.Object.clone(uW.g_ajaxparams);
				params.ctrl = 'throneRoom\\ThroneRoomServiceAjax';
				params.action = 'upgradeLevel';
				params.throneRoomItemId = trId;
				if (buffItemId && Seed.items["i"+buffItemId] && Seed.items["i"+buffItemId]>0) {
					params.buffItemId = buffItemId;
				}
				params.payment = "aetherstone";
				params.cityId = UpgradeCityId;

				new MyAjaxRequest(uW.g_ajaxpath + "ajax/_dispatch53.php" + uW.g_ajaxsuffix, {
					method: "post",
					parameters: params,
					loading: true,
					onSuccess: function (rslt) {
						var aetherbalance = 0;
						if (rslt.ok) {
							aetherbalance = rslt.aetherstones;
							Seed.resources["city"+UpgradeCityId]["rec5"][0] = parseIntNan(Seed.resources["city"+UpgradeCityId]["rec5"][0]) - parseIntNan(rslt.aetherstones);
							if (params.buffItemId) CM.InventoryView.removeItemFromInventory(params.buffItemId);
							if (rslt.gems > 0) {
								t.log(tx('ACCIDENTAL GEM USE DETECTED'),'GENERAL',true);
								t.GemUseTripSwitch = true;
							}

							var throne_item = uW.kocThroneItems[params.throneRoomItemId];
							if (throne_item) {
								if (rslt.success) {
									var K = CM.ThroneView.getMightBonus(throne_item);
									throne_item.level = rslt.item.level;
									throne_item.quality = rslt.item.quality;
									throne_item.name = throne_item.createName();
									CM.ThroneController.updateItemMight(throne_item, K);
								}
								else {
									if (rslt.break) {
										t.SetItemStatus(trId,rslt.item.status,"level");
										CM.ThroneController.removeItemMight(throne_item);
									}
								}
							}
							t.CheckRenderInventory();
						}
						else {
							t.FixItemStatus(rslt,trId,"level");
							t.log(tx('Upgrade Error')+' - '+rslt.msg,'GENERAL',true);
						}
						if (notify) notify(rslt,params.throneRoomItemId,aetherbalance,Qitem);
					},
					onFailure: function () {
						t.log(tx('Server error on upgrade'),'GENERAL',true);
						if (auto) { return; }
						else {
							if (notify) notify({ok:false},params.throneRoomItemId,0);
						}
					},
				});
			}
		}
	},

	EnhanceItem : function (trId,notify,buffItemId,auto,Qitem) {
		var t = Tabs.Throne;

		var throne_item = uW.kocThroneItems[trId];
		if (throne_item) {
			var StonesRequired = 0;
			if (CM.thronestats.enhance[throne_item.quality+1]) { StonesRequired = CM.thronestats.enhance[throne_item.quality+1].Stones; }
			var num_city = t.pickAetherUpgradeCity(Options.ThroneOptions.UpgradeCityNum,StonesRequired);
			var UpgradeCityId = Seed.cities[num_city][0];

			if (auto && parseInt(Seed.resources["city"+UpgradeCityId]["rec5"][0])<Options.ThroneOptions.UpgradeMinAether) {
				t.UpgradeReturnStatus = tx('Not enough aetherstone to attempt enhance');
				t.PaintUpgradeStatus();
				return;
			}

			var savecurrentcityid = uW.currentcityid;
			uW.currentcityid = UpgradeCityId;
			var w = CM.ThronePanelController.calcCost("enhance", throne_item, null, "stones");
			uW.currentcityid = savecurrentcityid;

			if ((w.gems.use > 0) || (w.stones.total > parseInt(Seed.resources["city"+UpgradeCityId]["rec5"][0]))) {
				t.log(tx('Not enough aetherstones to enhance'),'GENERAL',true);
				if (auto) {
					t.UpgradeReturnStatus = tx('Not enough aetherstone to enhance');
					t.PaintUpgradeStatus();
					return;
				}
				else {
					if (notify) notify({ok:false,reason:'aether'},trId,0);
				}
			}
			else {

				var params = uW.Object.clone(uW.g_ajaxparams);
				params.ctrl = 'throneRoom\\ThroneRoomServiceAjax';
				params.action = 'upgradeQuality';
				params.throneRoomItemId = trId;
				if (buffItemId && Seed.items["i"+buffItemId] && Seed.items["i"+buffItemId]>0) {
					params.buffItemId = buffItemId;
				}
				params.payment = "aetherstone";
				params.cityId = UpgradeCityId;

				new MyAjaxRequest(uW.g_ajaxpath + "ajax/_dispatch53.php" + uW.g_ajaxsuffix, {
					method: "post",
					parameters: params,
					loading: true,
					onSuccess: function (rslt) {
						var aetherbalance = 0;
						if (rslt.ok) {
							aetherbalance = rslt.aetherstones;
							Seed.resources["city"+UpgradeCityId]["rec5"][0] = parseIntNan(Seed.resources["city"+UpgradeCityId]["rec5"][0]) - parseIntNan(rslt.aetherstones);
							if (params.buffItemId) CM.InventoryView.removeItemFromInventory(params.buffItemId);
							if (rslt.gems > 0) {
								t.log(tx('ACCIDENTAL GEM USE DETECTED'),'GENERAL',true);
								t.GemUseTripSwitch = true;
							}

							var throne_item = uW.kocThroneItems[params.throneRoomItemId];
							if (throne_item) {
								if (rslt.success) {
									var K = CM.ThroneView.getMightBonus(throne_item);
									throne_item.level = rslt.item.level;
									throne_item.quality = rslt.item.quality;
									throne_item.name = throne_item.createName();
									CM.ThroneController.updateItemMight(throne_item, K);
								}
								else {
									if (rslt.break) {
										t.SetItemStatus(trId,rslt.item.status,"quality");
										CM.ThroneController.removeItemMight(throne_item);
									}
								}
							}
							t.CheckRenderInventory();
						}
						else {
							t.FixItemStatus(rslt,trId,"quality");
							t.log(tx('Enhance Error')+' - '+rslt.msg,'GENERAL',true);
						}
						if (notify) notify(rslt,trId,aetherbalance,Qitem);
					},
					onFailure: function () {
						t.log(tx('Server error on Enhance'),'GENERAL',true);
						if (auto) { return; }
						else {
							if (notify) notify({ok:false},trId,0);
						}
					},
				});
			}
		}
	},

	SetItemStatus: function (trId,status,brokenType) {
		var t = Tabs.Throne;
		var throne_item = uW.kocThroneItems[trId];
		if (throne_item) {
			throne_item.isBroken = true;
			throne_item.brokenType = brokenType;
			throne_item.name = throne_item.createName();
			throne_item.status = status;
			var b = Seed.throne.slotEquip;
				jQuery.each(b, function (g, h) {
				a = jQuery.inArray(trId, h);
				if (a > -1) { h.splice(a, 1) }
			});
			t.CheckRenderInventory();
		}
	},

	FixItemStatus: function (rslt,trId,brokenType) {
		var t = Tabs.Throne;
		var throne_item = uW.kocThroneItems[trId];
		if (throne_item) {
			if (rslt.msg && rslt.msg.indexOf("Has status 4") > -1) { // repairing
				t.SetItemStatus(trId,4,brokenType);
			}
			if (rslt.msg && rslt.msg.indexOf("Has status 3") > -1) { // broken
				t.SetItemStatus(trId,3,brokenType);
			}
		}
	},

	RepairItem: function (trId,action,notify) {
		var t = Tabs.Throne;
		var throne_item = uW.kocThroneItems[trId];
		if (throne_item) {
			var params = uW.Object.clone(uW.g_ajaxparams);
			params.action = 'timeRepair';
			params.throneRoomItemId = trId;
			params.ctrl = 'throneRoom\\ThroneRoomServiceAjax';

			new MyAjaxRequest(uW.g_ajaxpath + "ajax/_dispatch53.php" + uW.g_ajaxsuffix, {
				method: "post",
				parameters: params,
				loading: true,
				onSuccess: function (rslt) {
					var throne_item = uW.kocThroneItems[trId];
					if (rslt.ok) {
						var startTime = unixTime();
						var endTime = rslt.eta;
						Seed.queue_throne.itemId = throne_item.id;
						Seed.queue_throne.start = startTime;
						Seed.queue_throne.end = endTime;
						if (!CM.ThronePanelView.repairIntervals) {
							CM.ThronePanelView.repairIntervals = setInterval(function () {
								CM.ThronePanelView.doInterval(throne_item, (Seed.queue_throne.end - Seed.queue_throne.start), 0);
							}, 1000)
						}
						t.CheckRenderInventory();
						t.paintUpgradeQueue();
						t.paintRepairQueue();
						t.log(tx('Repairing')+' '+throne_item.name,'REPAIR');
						setTimeout(t.autoSpeedup, 3000, action);
					}
					else {
						if (rslt.msg == "Item is not broken") {
							uW.kocThroneItems[trId].isBroken = false;
							uW.kocThroneItems[trId].brokenType = "";
							t.CheckRenderInventory();
							t.paintUpgradeQueue();
							t.paintRepairQueue();
						}
						else {
							t.log(tx('Error Repairing')+' '+throne_item.name+' - '+rslt.msg,'REPAIR',true);
						}
					}
					if (notify) notify(trId);
				},
				onFailure: function () {
					t.log(tx('Server error on Repair'),'GENERAL',true);
					if (notify) notify(trId);
				}
			},true); // noretry
		}
	},

	SalvageItem : function (trId,notify,aetherbalance) {
		var t = Tabs.Throne;
		var aetherbalance = aetherbalance||0;

		var num_city = t.pickAetherSalvageCity(Options.ThroneOptions.SalvageCityNum);
		var SalvageCityId = Seed.cities[num_city][0];

		t.SalvageStatus = tx('Salvaging Item')+'...';
		t.PaintSalvageStatus();

		var params = uW.Object.clone(uW.g_ajaxparams);
		params.ctrl = 'throneRoom\\ThroneRoomServiceAjax';
		params.action = 'salvage';
		params.itemId = trId;
		params.cityId = SalvageCityId;

		new MyAjaxRequest(uW.g_ajaxpath + "ajax/_dispatch53.php" + uW.g_ajaxsuffix, {
			method: "post",
			parameters: params,
			onSuccess: function (rslt) {
				var throne_item = uW.kocThroneItems[trId];
				if (rslt.ok) {
					Seed.resources["city"+SalvageCityId]["rec5"][0] += parseIntNan(rslt.aetherstones);
					if (throne_item) {
						var b = Seed.throne.slotEquip;
						jQuery.each(b, function (g, h) {
							a = jQuery.inArray(trId, h);
							if (a > -1) { h.splice(a, 1) }
						});
						CM.ThroneController.removeItemMight(throne_item);
						delete uW.kocThroneItems[trId];
						t.SalvageStatus = tx('Salvaged')+' '+throne_item.name+' - '+tx('net aetherstone gained')+' '+addCommas(rslt.aetherstones-aetherbalance);
						t.log(t.SalvageStatus,'SALVAGE');
					}
				} else {
					if (throne_item) {
						t.SalvageStatus = tx('Error Salvaging Item')+' '+throne_item.name+' - '+rslt.msg;
						if (rslt.error_code && rslt.error_code==256) { // assume already deleted so remove from kocThroneItems otherwise we'll get stuck on it
							delete uW.kocThroneItems[trId];
						}
					}
				}
				t.CheckRenderInventory();
				if (notify) notify(rslt,aetherbalance);
			}
		},true);
	},

	UpdateSalvageStats : function(rslt,aetherbalance) {
		var t = Tabs.Throne;
		var aetherbalance = aetherbalance||0;
		if (rslt.ok) {
			Options.ThroneOptions.NumSalvaged++;
			Options.ThroneOptions.AetherSalvaged += rslt.aetherstones-aetherbalance;
			saveOptions();
		}
		t.PaintSalvageStatus();
	},

	PaintSalvageStatus : function () {
		var t = Tabs.Throne;
		var Stats = '';

		if (Options.ThroneOptions.SalvageRunning) {
			var now = new Date();
			if (!Options.ThroneOptions.SalvageStartDate) Options.ThroneOptions.SalvageStartDate = now.valueOf();
			var StartDate = new Date(Options.ThroneOptions.SalvageStartDate);
			var since = StartDate.toDateString();

			var Stats = addCommas(Options.ThroneOptions.NumSalvaged)+'&nbsp;'+tx('cards salvaged')+',&nbsp;'+addCommas(Options.ThroneOptions.AetherSalvaged)+'&nbsp;'+tx('aetherstone collected')+'&nbsp;'+tx('since')+'&nbsp;'+since+'<span style="inline-block;float:right;margin-top:4px;">'+strButton8(tx('Reset Stats'),'id=btthronesalvageoverviewreset')+'</span>';
		}
		if (ById('btthroneoverviewsalvagestatusdiv')) ById('btthroneoverviewsalvagestatusdiv').innerHTML = t.SalvageStatus+'<br><i>'+Stats+'</i>';
		if (ById('btthronesalvageoverviewreset')) ById('btthronesalvageoverviewreset').addEventListener('click',t.ResetSalvageStats,false);
	},

	ResetSalvageStats : function() {
		var t = Tabs.Throne;
		Options.ThroneOptions.SalvageStartDate = 0;
		Options.ThroneOptions.NumSalvaged = 0;
		Options.ThroneOptions.AetherSalvaged = 0;
		saveOptions();
		t.PaintSalvageStatus();
	},

	SalvageCityButton: function (city, x, y) {
		var t = Tabs.Throne;
		Options.ThroneOptions.SalvageCityNum = city.idx;
		saveOptions();
	},

	FormatSalvageCondition : function(rule,advanced) {
		var t = Tabs.Throne;
		var innerM = tx('Simple Rule')+':<br>';
		if (advanced) { innerM = tx('Advanced Rule')+':<br>'; }

		if (rule.length==0) {
			innerM += tx('Keep ALL');
		}
		else {
			for (ii = 0; ii < rule.length; ii++) {
				var condition = rule[ii];
				if (ii == 0) innerM += tx('Card');
				else innerM += '<br><b>'+tx('AND')+'</b>';

				if (condition.mustHave != 'false') innerM += '&nbsp;'+tx('must have')+'&nbsp;';
				else innerM += '&nbsp;'+tx('must')+'&nbsp;<b>'+tx('NOT')+'</b>&nbsp;'+tx('have')+'&nbsp;';

				var slotcount = 0;
				for (j = 0; j < condition.slots.length; j++) { if (condition.slots[j]) slotcount++;	}

				if (condition.number!=1 || slotcount>1) { innerM += condition.number+'x&nbsp;'; }

				if (condition.effect=="Infantry" || condition.effect=="Ranged" || condition.effect=="Horsed" || condition.effect=="Siege" || condition.effect=="Spellcaster" || condition.effect=="Tower") {
					innerM += tx(condition.effect)+'&nbsp;';
				}
				else {
					innerM += uW.g_js_strings.effects["name_" + condition.effect].replace("%1$s", "nn% ")+'&nbsp;';
				}

				var debuffonlyeffect = false;
				if (CM.thronestats.effects[condition.effect] && CM.thronestats.effects[condition.effect][7]=="1") {
					debuffonlyeffect = true;
				}

				if (!debuffonlyeffect) {
					if (condition.buffType=='b') innerM += tx('buff')+'&nbsp;';
					else if (condition.buffType=='d') innerM += tx('debuff')+'&nbsp;';
					else innerM += tx('buff or debuff')+'&nbsp;';
				}

				if (slotcount<=1) { innerM += tx('in slot')+':&nbsp;'; }
				else { innerM += tx('in slots')+':&nbsp;'; }

				for (j = 0; j < condition.slots.length; j++) {
					if (condition.slots[j]) innerM += (j + 1) + "&nbsp;";
				}
			}
		}
		innerM += '<br>&nbsp;';
		return innerM;
	},

	SalvageClickSort : function (e) {
		var t = Tabs.Throne;
		var newColNum = e.id.substr(10);
		ById('SalvageCol' + Options.ThroneOptions.SalvageSortColNum).className = 'buttonv2 std blue';
		e.className = 'buttonv2 std green';
		if (newColNum == Options.ThroneOptions.SalvageSortColNum) { Options.ThroneOptions.SalvageSortDir *= -1; }
		else { Options.ThroneOptions.SalvageSortColNum = newColNum; }
		saveOptions();
		t.paint_salvage_rules();
	},

	pickAetherSalvageCity : function(citynum) {
		var t = Tabs.Throne;
		if (!Options.ThroneOptions.SalvageAnyCity || parseInt(Seed.resources["city"+Seed.cities[citynum][0]]["rec5"][0]) <= Options.ThroneOptions.SalvageMaxAether) return citynum;
		var ind = citynum;
		var lowest = 99999999;

		for (var i=1;i<=Seed.cities.length; i++) {
			var ii=citynum+i;
			if (ii>=Seed.cities.length) ii-=Seed.cities.length;
			cityId = Seed.cities[ii][0];
			if (Options.ThroneOptions.SalvageOverflow == "lowest") {
				if (parseInt(Seed.resources["city"+cityId]["rec5"][0]) < lowest) {
					lowest = +Seed.resources["city"+cityId]["rec5"][0];
					ind = ii;
				}
			}
			else {
				if (parseInt(Seed.resources["city"+cityId]["rec5"][0]) <= Options.ThroneOptions.SalvageMaxAether) {
					return ii;
				}
			}
		}
//		if (ind==citynum) t.log(tx('Warning - All cities contain more than the maximum salvage aetherstone amount'),'GENERAL');
		return ind;
	},

	SalvageNewRule : function (advanced) {
		var t = Tabs.Throne;
		t.EditRuleNumber = -1;
		t.EditMode = true;
		ById('btthroneSalvageMessages').innerHTML = "&nbsp;";

		if (advanced) { t.PaintAdvancedRulePanel(); }
		else { t.PaintSimpleRulePanel(); }
	},

	SalvageEditRule : function (entry) {
		var t = Tabs.Throne;
		t.EditRuleNumber = entry;
		t.EditMode = true;
		ById('btthroneSalvageMessages').innerHTML = "&nbsp;";

		if (Options.ThroneOptions.SalvageRuleSet[entry].advancedrule) { t.PaintAdvancedRulePanel(); }
		else { t.PaintSimpleRulePanel(); }
	},

	SalvageDeleteRule : function (entry) {
		var t = Tabs.Throne;
		Options.ThroneOptions.SalvageRuleSet.splice(entry,1);
		saveOptions();
		ById('btthroneSalvageMessages').innerHTML = tx("Salvage rule deleted")+"!";
		t.SalvageItems = []; // force reset of items to salvage
		t.paint_salvage_rules();
	},

	SalvageClearRules : function() {
		var t = Tabs.Throne;
		Options.ThroneOptions.SalvageRuleSet = [];
		// for safety, switch off!
		if (Options.ThroneOptions.SalvageRunning == true) {
			t.toggleAutoSalvageState();
		}
		saveOptions();
		ById('btthroneSalvageMessages').innerHTML = tx("All salvage rules deleted")+"!";
		t.SalvageItems = []; // force reset of items to salvage
		t.paint_salvage_rules();
	},

	SalvageAddRule : function (rule) {
		var t = Tabs.Throne;
		Options.ThroneOptions.SalvageRuleSet.unshift(rule);
		saveOptions();
	},

	SalvageReplaceRule : function (rule) {
		var t = Tabs.Throne;
		Options.ThroneOptions.SalvageRuleSet[t.EditRuleNumber] = rule;
		saveOptions();
	},

	PaintSimpleRulePanel : function () {
		var t = Tabs.Throne;

		if (t.EditRuleNumber<0) { var z= '<div class=divHeader align=center>'+tx('NEW SIMPLE RULE')+'</div><br>'; }
		else { var z= '<div class=divHeader align=center>'+tx('EDIT SIMPLE RULE')+'</div><br>'; }

		z += '<table class=xtab cellpadding=2>';
		z += '<tr><td><b>'+tx('Define Throne Cards To Keep')+':</b></td>';
		z += '<td alight=left>'+uW.g_js_strings.commonstr.faction+':&nbsp;<select id=btthroneSalvageFactionType class=btInput>';
		z += '<option value="any">'+tx('Any')+'</option>';
		for (var k=0;k<cardFaction.length;k++) {
			var faction = cardFaction[k];
			z += '<option value="' + faction + '">' + uW.g_js_strings.commonstr[faction] + '</option>';
		}
		z += '</select></td>';
		z += '<td alight=left>'+tx('Card Type')+':&nbsp;<select id=btthroneSalvageCardType class=btInput>';
		z += '<option value="any">'+tx('Any')+'</option>';
		for (var k=0;k<trTypes.length;k++) {
			var type = trTypes[k];
			z += '<option value="' + type + '">' + uW.g_js_strings.throneRoom[type] + '</option>';
		}
		z += '</select></td>';
		z += '</tr></table>';
		z += '<table id=btthroneSalvageConditionTable class=xtab style="padding-left: 5px;">';
		z += '<tr><td align=left><input id=btthroneSalvageAddRow type=button value="'+tx('Add Row')+'"/></td></tr>';
		z += '</table><br>';

		z += '<div align="center"><TABLE cellSpacing=0 width=98% height=0% class=xtab><tr><td>&nbsp;</td><td align=center>'+strButton20(tx('Save Rule'), 'id=btthroneSalvageSaveRule')+'&nbsp;';
		if (t.EditRuleNumber>=0) { z += strButton20(tx('Save a Copy'), 'id=btthroneSalvageCopyRule')+'&nbsp;'; }
		z += strButton20(uW.g_js_strings.commonstr.cancel, 'id=btthroneSalvageCancelRule')+'</td><td align=right>&nbsp;</td></tr></table></div>';

		ById('btthroneSalvagePanel').innerHTML = z;

		if (t.EditRuleNumber<0) { t.createRow(); }
		else {
			var rule = Options.ThroneOptions.SalvageRuleSet[t.EditRuleNumber];
			ById('btthroneSalvageFactionType').value = rule.faction;
			ById('btthroneSalvageCardType').value = rule.type;
			var table = ById('btthroneSalvageConditionTable');
			while (table.rows.length > 1) table.deleteRow(0);
			for (var row = 0; row < rule.conditions.length; row++) {
				var condition = rule.conditions[row];
				t.createRow();
				table.rows[row].cells[0].children[0].value = condition.mustHave;
				table.rows[row].cells[1].children[0].value = condition.number;
				table.rows[row].cells[2].children[0].value = condition.effect;
				table.rows[row].cells[3].children[0].value = condition.buffType;
				var slotCells = table.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;
				}
			}
		}

		ById('btthroneSalvageAddRow').addEventListener ('click', t.createRow, false);
		ById('btthroneSalvageSaveRule').addEventListener ('click', function() {t.SaveSimpleRule(false);}, false);
		if (ById('btthroneSalvageCopyRule')) { ById('btthroneSalvageCopyRule').addEventListener ('click', function() {t.SaveSimpleRule(true);}, false); }
		ById('btthroneSalvageCancelRule').addEventListener ('click', function() {t.paint_salvage_rules();}, false);

		ResetFrameSize('btMain',100,GlobalOptions.btWinSize.x);
	},

	PaintAdvancedRulePanel : function () {
		var t = Tabs.Throne;

		if (t.EditRuleNumber<0) { var z= '<div class=divHeader align=center>'+tx('NEW ADVANCED RULE')+'</div><br>'; }
		else { var z= '<div class=divHeader align=center>'+tx('EDIT ADVANCED RULE')+'</div><br>'; }

		z += '<table class=xtab cellpadding=2>';
		z += '<tr><td><b>'+tx('Define Throne Cards To Keep')+':</b></td>';
		z += '<td alight=left>'+uW.g_js_strings.commonstr.faction+':&nbsp;<select id=btthroneSalvageFactionType class=btInput>';
		z += '<option value="any">'+tx('Any')+'</option>';
		for (var k=0;k<cardFaction.length;k++) {
			var faction = cardFaction[k];
			z += '<option value="' + faction + '">' + uW.g_js_strings.commonstr[faction] + '</option>';
		}
		z += '</select></td>';
		z += '<td alight=left>'+tx('Card Type')+':&nbsp;<select id=btthroneSalvageCardType class=btInput>';
		z += '<option value="any">'+tx('Any')+'</option>';
		for (var k=0;k<trTypes.length;k++) {
			var type = trTypes[k];
			z += '<option value="' + type + '">' + uW.g_js_strings.throneRoom[type] + '</option>';
		}
		z += '</select></td>';
		z += '</tr></table>';

		z += '<table id=btthroneSalvageConditionTable class=xtab style="padding-left: 5px;">';
		z += '<tr><td align=left>'+tx('Row')+'&nbsp;1</td><td align=left><select style="width:250px;" id=btthroneSalvageRow1Advanced class=btInput></select></td></tr>';
		z += '<tr><td align=left>'+tx('Row')+'&nbsp;2</td><td align=left><select style="width:250px;" id=btthroneSalvageRow2Advanced class=btInput></select></td></tr>';
		z += '<tr><td align=left>'+tx('Row')+'&nbsp;3</td><td align=left><select style="width:250px;" id=btthroneSalvageRow3Advanced class=btInput></select></td></tr>';
		z += '<tr><td align=left>'+tx('Row')+'&nbsp;4</td><td align=left><select style="width:250px;" id=btthroneSalvageRow4Advanced class=btInput></select></td></tr>';
		z += '<tr><td align=left>'+tx('Row')+'&nbsp;5</td><td align=left><select style="width:250px;" id=btthroneSalvageRow5Advanced class=btInput></select></td></tr>';
		z += '</table><br>';

		z += '<div align="center"><TABLE cellSpacing=0 width=98% height=0% class=xtab><tr><td>&nbsp;</td><td align=center>'+strButton20(tx('Save Rule'), 'id=btthroneSalvageSaveRule')+'&nbsp;';
		if (t.EditRuleNumber>=0) { z += strButton20(tx('Save a Copy'), 'id=btthroneSalvageCopyRule')+'&nbsp;'; }
		z += strButton20(uW.g_js_strings.commonstr.cancel, 'id=btthroneSalvageCancelRule')+'</td><td align=right>&nbsp;</td></tr></table></div>';

		ById('btthroneSalvagePanel').innerHTML = z;

		if (t.EditRuleNumber<0) { t.filterAdvancedStats(); }
		else {
			var rule = Options.ThroneOptions.SalvageRuleSet[t.EditRuleNumber];
			ById('btthroneSalvageFactionType').value = rule.faction;
			ById('btthroneSalvageCardType').value = rule.type;
			t.filterAdvancedStats(rule.type);
			for (var 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 = ById('btthroneSalvageRow'+slotNumber+'Advanced');
				cell.value = condition.effect;
			}
		}

		ById('btthroneSalvageCardType').addEventListener('change', function() {
			var selectedValue = ById('btthroneSalvageCardType').value;
			t.filterAdvancedStats(selectedValue);
		}, false);

		ById('btthroneSalvageSaveRule').addEventListener ('click', function() {t.SaveAdvancedRule(false);}, false);
		if (ById('btthroneSalvageCopyRule')) { ById('btthroneSalvageCopyRule').addEventListener ('click', function() {t.SaveAdvancedRule(true);}, false); }
		ById('btthroneSalvageCancelRule').addEventListener ('click', function() {t.paint_salvage_rules();}, false);

		ResetFrameSize('btMain',100,GlobalOptions.btWinSize.x);
	},

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

		for (var i=1;i<=5;i++) {
			var row = ById('btthroneSalvageRow'+i+'Advanced');
			row.innerHTML = "";
			ById("btthroneSalvageRow"+i+"Advanced").options.add(new Option(tx("none"), "none"));
		}

		if (cardtype == 'any') {
			for (var i=1;i<=5;i++) {
				var row = ById('btthroneSalvageRow'+i+'Advanced');
				for (var eff in CM.thronestats.tiers) {
					var effectName = uW.g_js_strings.effects["name_" + eff].replace("%1$s", "nn% ");
					row.options.add(new Option(effectName, eff));
				}
				row.options.add(new Option(tx("Any Infantry"), "Infantry"));
				row.options.add(new Option(tx("Any Ranged"), "Ranged"));
				row.options.add(new Option(tx("Any Horsed"), "Horsed"));
				row.options.add(new Option(tx("Any Siege"), "Siege"));
				row.options.add(new Option(tx("Any Spellcaster"), "Spellcaster"));
				row.options.add(new Option(tx("Any Tower"), "Tower"));
			}
		}
		else {
			for (var eff in CM.thronestats.tiers) {
				var effectName = uW.g_js_strings.effects["name_" + eff].replace("%1$s", "nn% ");
				for (var i=1;i<=5;i++) {
					if (t.AdvancedStatsGrid[cardtype][i][eff]) { ById("btthroneSalvageRow"+i+"Advanced").options.add(new Option(tx(effectName), eff)); }
				}
			}
		}
	},

	ThroneRule : function (type, faction, conditions, advancedrule) { //class definition for rules and conditions
		var t = Tabs.Throne;
		this.type = type;
		this.faction = faction;
		this.advancedrule = advancedrule;
		if (conditions)
			this.conditions = conditions;
		else
			this.conditions = [];

		this.ThroneAddCondition = t.ThroneAddCondition;
		this.ThroneApplyRule	= t.ThroneApplyRule;
	},

	ThroneAddCondition : function (c) {
		var t = Tabs.Throne;
		this.conditions.push(c);
	},

	ThroneApplyRule : function (id) {
		var t = Tabs.Throne;
		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 (var r=0;r<this.conditions.length;r++) {
			if (!this.conditions[r].ThroneCheckCondition(id)) return false;
		}
		return true;
	},

	ThroneCondition : function (mustHave, number, effect, buffType, slots ) {
		var t = Tabs.Throne;
		this.mustHave = mustHave;
		this.number = number;
		this.effect = effect;
		this.buffType = buffType;
		this.slots = slots;
		this.ThroneCheckCondition = t.ThroneCheckCondition;
	},

	ThroneCheckCondition : function (id) {
		var t = Tabs.Throne;
		var numberFound = 0;
		var effectsFound = false;
		// get card
		var ThroneItem = uW.kocThroneItems[id];

		if (!ThroneItem) return false;

		// for loop for stat
		// count up occurrences
		for (var i in ThroneItem.effects) {
			var slotid = i.split("slot")[1];
			if (!this.slots[slotid-1]) continue;

			var CardEffect = ThroneItem.effects[i].id;
			var isDebuff = (CM.thronestats.effects[CardEffect] && CM.thronestats.effects[CardEffect][7]=="1");

			if (this.buffType == "b" && isDebuff) continue;
			if (this.buffType == "d" && !isDebuff) continue;

			var eff = this.effect;
			var checkEffect = parseInt(CardEffect);
			if (isDebuff) {
				for (var efx in EffectDebuffs) {
					if (EffectDebuffs[efx]==CardEffect) {
						checkEffect = efx;
						break;
					}
				}
			}

			if (eff==checkEffect) { numberFound++; }
			else {
				if (eff=="Infantry" && InfantryEffects.indexOf(checkEffect) != -1) { numberFound++; }
				if (eff=="Ranged" && RangedEffects.indexOf(checkEffect) != -1) { numberFound++; }
				if (eff=="Horsed" && HorsedEffects.indexOf(checkEffect) != -1) { numberFound++; }
				if (eff=="Siege" && SiegeEffects.indexOf(checkEffect) != -1) { numberFound++; }
				if (eff=="Spellcaster" && SpellcasterEffects.indexOf(checkEffect) != -1) { numberFound++; }
				if (eff=="Tower" && TowerEffects.indexOf(checkEffect) != -1) { numberFound++; }
			}
		}

		if ( numberFound >= this.number) { effectsFound = true; }

		if (this.mustHave != "false") {	return effectsFound; }
		else { return (!effectsFound); }
	},

	removeRow: function (row) {
		var t = Tabs.Throne;
		var table = ById('btthroneSalvageConditionTable');

		for (i = 0; i < table.rows.length; i++) {
			if (table.rows[i] == row) {
				table.deleteRow(i);
				break;
			}
		}
		ResetFrameSize('btMain',100,GlobalOptions.btWinSize.x);
	},

	createRow: function () {
		var t = Tabs.Throne;
		var table = ById('btthroneSalvageConditionTable');
		var rowCount = table.rows.length;
		var row = table.insertRow(rowCount - 1);
		rowCount++;
		var rowId = "r" + rowCount;
		row.id = rowId;

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

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

		row.innerHTML = z;

		var select = ById(rowId + "ThroneSel3");
		for (var e in CM.thronestats.tiers) {
			if ((CM.thronestats.effects[e] && (CM.thronestats.effects[e][7]=="0" || DebuffOnly.indexOf(e)!=-1)) || CM.THRONE_ROOM_TYPE_DEBUFF_EFFECTS.indexOf(parseInt(e))!= -1) {
				var effectName = uW.g_js_strings.effects["name_" + e].replace("%1$s", "nn% ");
				select.options.add(new Option(effectName, e));
			}
		}
		// add in options for troops specific effects
		select.options.add(new Option(tx("Any Infantry"), "Infantry"));
		select.options.add(new Option(tx("Any Ranged"), "Ranged"));
		select.options.add(new Option(tx("Any Horsed"), "Horsed"));
		select.options.add(new Option(tx("Any Siege"), "Siege"));
		select.options.add(new Option(tx("Any Spellcaster"), "Spellcaster"));
		select.options.add(new Option(tx("Any Tower"), "Tower"));

		var c = row.insertCell(5);
		var btn = jQuery('<input type=button value="X" />');
		jQuery(btn).click(function () { t.removeRow(row); });
		jQuery(c).append(btn);

		ResetFrameSize('btMain',100,GlobalOptions.btWinSize.x);
	},

	readRows: function () {
		var t = Tabs.Throne;
		var table = ById('btthroneSalvageConditionTable');
		var rowCount = table.rows.length;

		var cType = ById('btthroneSalvageCardType').value;
		var faction = ById('btthroneSalvageFactionType').value;

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

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

				var c = new t.ThroneCondition(s1.value, s2.value, s3.value, s4.value, slots);
				conditions.push(c);
			}
		}
		var rule1 = new t.ThroneRule(cType, faction, conditions, false);
		if (t.EditRuleNumber<0) { t.SalvageAddRule(rule1); }
		else { t.SalvageReplaceRule(rule1); }
	},

	SaveSimpleRule : function (copy) {
		var t = Tabs.Throne;
		if (copy) t.EditRuleNumber = -1;
		t.readRows();
		ById('btthroneSalvageMessages').innerHTML = tx("Simple rule saved")+"!";
		t.SalvageItems = []; // force reset of items to salvage
		t.paint_salvage_rules();
	},

	readAdvancedRows: function () {
		var t = Tabs.Throne;
		var cType = ById('btthroneSalvageCardType').value;
		var faction = ById('btthroneSalvageFactionType').value;
		var conditions = [];
		for (var i=1;i<=5;i++) {
			var row = ById("btthroneSalvageRow"+i+"Advanced");
			if (row.selectedIndex == 0) continue;
			var slots = [];
			for (var slotChecker = 1; slotChecker<=5;slotChecker++) {
				slots.push(slotChecker==i);
			}
			var buffDebuff = "b";
			var effect = row.options[row.selectedIndex].value;
			if (effect=="Infantry" || effect=="Ranged" || effect=="Horsed" || effect=="Siege" || effect=="Spellcaster" || effect=="Tower") {
				var buffDebuff = "e";
			}
			else {
				if (DebuffEffects.indexOf(parseInt(effect))!=-1) buffDebuff = "d";
			}
			var c = new t.ThroneCondition(true, 1, effect, buffDebuff, slots);
			conditions.push(c);
		}
		if (conditions.length > 0) {
			var rule1 = new t.ThroneRule(cType, faction, conditions, true);
			if (t.EditRuleNumber<0) { t.SalvageAddRule(rule1); }
			else { t.SalvageReplaceRule(rule1); }
		}
	},

	SaveAdvancedRule : function (copy) {
		var t = Tabs.Throne;

		var rulesOK = false;
		for (var i=1;i<=5;i++) {
			var row = ById("btthroneSalvageRow"+i+"Advanced");
			if (row.selectedIndex != 0) {
				rulesOK = true;
				break;
			}
		}
		if (!rulesOK) {
			ById('btthroneSalvageMessages').innerHTML = tx("No effects selected - Cannot save advanced rule")+"!";
			return;
		}

		if (copy) t.EditRuleNumber = -1;
		t.readAdvancedRows();
		ById('btthroneSalvageMessages').innerHTML = tx("Advanced rule saved")+"!";
		t.SalvageItems = []; // force reset of items to salvage
		t.paint_salvage_rules();
	},

	pickAetherUpgradeCity : function(citynum,StonesRequired) {
		var t = Tabs.Throne;
		if (Options.ThroneOptions.UpgradeMinAether > StonesRequired) { StonesRequired = Options.ThroneOptions.UpgradeMinAether; }
		if (!Options.ThroneOptions.UpgradeAnyCity || parseInt(Seed.resources["city"+Seed.cities[citynum][0]]["rec5"][0]) >= StonesRequired) return citynum;
		var ind = citynum;
		var highest = 0;

		for (var i=1;i<=Seed.cities.length; i++) {
			var ii=citynum+i;
			if (ii>=Seed.cities.length) ii-=Seed.cities.length;
			cityId = Seed.cities[ii][0];
			if (Options.ThroneOptions.UpgradeOverflow == "highest") {
				if (parseInt(Seed.resources["city"+cityId]["rec5"][0]) > highest) {
					highest = +Seed.resources["city"+cityId]["rec5"][0];
					ind = ii;
				}
			}
			else {
				if (parseInt(Seed.resources["city"+cityId]["rec5"][0]) >= StonesRequired) {
					return ii;
				}
			}
		}
		return ind;
	},

	// JEWEL FUNCTIONS

	BuildJewelList: function () {
		var t = Tabs.Throne;
		t.JewelInventoryList = {};
		for (var jwl=0;jwl<uW.kocJewelItems.length;jwl++) {
			var jewel_item = uW.kocJewelItems[jwl];
			if (t.JewelEffects.indexOf(jewel_item.id) < 0) t.JewelEffects.push(jewel_item.id);
			JewelKey = jewel_item.id+','+jewel_item.quality;
			t.JewelInventoryList[JewelKey] = jewel_item;
		}

		if (ById('btthroneJewelEffectFilter')) {
			var n = '';
			for (k=0;k<t.JewelEffects.length;k++) {
				var effect = t.JewelEffects[k];
				var checked = false;
				if (ById('btthroneJewelEffect_'+effect)) {
					checked = ById('btthroneJewelEffect_'+effect).checked;
				}
				n += '<INPUT id=btthroneJewelEffect_'+effect+' type=checkbox '+(checked?'CHECKED':'')+' />'+CM.ThroneController.getEffectName(t.JewelEffects[k])+'<br />';
			}
			ById('btthroneJewelEffectFilter').innerHTML = n;
		}
	},

	SelectAllJewelEffect : function () {
		var t = Tabs.Throne;
		for (k=0;k<t.JewelEffects.length;k++) {
			var effect = t.JewelEffects[k];
			ById("btthroneJewelEffect_"+effect).checked = true;
		}
		t.display_jewels();
	},

	SelectNoneJewelEffect : function () {
		var t = Tabs.Throne;
		for (k=0;k<t.JewelEffects.length;k++) {
			var effect = t.JewelEffects[k];
			ById("btthroneJewelEffect_"+effect).checked = false;
		}
		t.display_jewels();
	},

	SelectAllJewelQuality : function () {
		var t = Tabs.Throne;
		for (k=0;k<t.JewelQuality.length;k++) {
			ById("btthroneJewelQuality_"+(k+1)).checked = true;
		}
		t.display_jewels();
	},

	SelectNoneJewelQuality : function () {
		var t = Tabs.Throne;
		for (k=0;k<t.JewelQuality.length;k++) {
			ById("btthroneJewelQuality_"+(k+1)).checked = false;
		}
		t.display_jewels();
	},

	RepaintJewelStock : function(JewelKey) {
		var t = Tabs.Throne;

		var Effect = JewelKey.split(",")[0];
		var Quality = JewelKey.split(",")[1];
		var Amount = t.JewelInventoryList[JewelKey].quantity||0;
		if (ById('btthroneJewelStock_'+JewelKey)) {
			JewelLimit = 150;
			if (t.JewelCaps[JewelKey]) {
				JewelLimit = t.JewelCaps[JewelKey].Cap||JewelLimit;
			}
			if (!Options.ThroneOptions.JewelTarget[JewelKey]) { Options.ThroneOptions.JewelTarget[JewelKey] = JewelLimit; }
			JewelStyle = '<span>';
			if (Amount>Options.ThroneOptions.JewelTarget[JewelKey]) JewelStyle = '<span class=boldRed>';
			if (Amount==Options.ThroneOptions.JewelTarget[JewelKey]) JewelStyle = '<span class=boldGreen>';
			ById('btthroneJewelStock_'+JewelKey).innerHTML = JewelStyle+Amount+'</span>';
		}

		if (ById('btthroneJewelTotal')) ById('btthroneJewelTotal').innerHTML = tx('Total Jewels')+': <b>'+t.TotalJewels+'</b><br>&nbsp;';
	},

	JewelClickSort : function (e) {
		var t = Tabs.Throne;
		var newColNum = e.id.substr(8);
		ById('JewelCol' + Options.ThroneOptions.JewelSortColNum).className = 'buttonv2 std blue';
		e.className = 'buttonv2 std green';
		if (newColNum == Options.ThroneOptions.JewelSortColNum) { Options.ThroneOptions.JewelSortDir *= -1; }
		else { Options.ThroneOptions.JewelSortColNum = newColNum; }
		saveOptions();
		t.display_jewels();
	},

	JewelTargetBulkSet : function () {
		var t = Tabs.Throne;

		ById('btthroneJewelSalvageMessage').innerHTML = '';

		var SetQuality = ById('btthroneJewelSalvageQualitySelect').value;
		var SetEffect = ById('btthroneJewelSalvageEffectSelect').value;
		var SetAmount = ById('btthroneJewelSalvageAmount').value;
		if (isNaN(SetAmount)) { return; }
		if (SetAmount>150) {
			SetAmount = 150;
			ById('btthroneJewelSalvageAmount').value = SetAmount;
		}

		for (var JewelKey in Options.ThroneOptions.JewelTarget) {
			var Effect = JewelKey.split(",")[0];
			var Quality = JewelKey.split(",")[1];

			if ((SetEffect==Effect || SetEffect==0) && (SetQuality==Quality || SetQuality==0)) {
				Options.ThroneOptions.JewelTarget[JewelKey] = SetAmount;
				if (ById('btthroneJewelLimit_'+JewelKey)) {
					ById('btthroneJewelLimit_'+JewelKey).value = SetAmount;
					t.RepaintJewelStock(JewelKey);
				}
			}
		}
		saveOptions();
		ById('btthroneJewelSalvageMessage').innerHTML = tx('Selected target amounts changed.');
	},

	toggleAutoJewelState: function(obj){
		var t = Tabs.Throne;
		obj = ById('btAutoJewelState');
		if (Options.ThroneOptions.JewelSalvageRunning == true) {
			Options.ThroneOptions.JewelSalvageRunning = false;
			obj.value = tx("Jewel Salvage = OFF");
			t.JewelSalvageStatus = tx('Powered Off');
			t.PaintJewelSalvageStatus();
			clearTimeout(t.JewelTimer);
		}
		else {
			Options.ThroneOptions.JewelSalvageRunning = true;
			obj.value = tx("Jewel Salvage = ON");
			t.JewelSalvageStatus = tx('Starting')+'...';
			t.PaintJewelSalvageStatus();
			t.JewelTimer = setTimeout(function () { t.doAutoJewelLoop();}, 0);
		}
		saveOptions();
		SetToggleButtonState('JewelSalvage',Options.ThroneOptions.JewelSalvageRunning,'Jewel Salvage');
	},

	doAutoJewelLoop : function() {
		var t = Tabs.Throne;
		clearTimeout(t.JewelTimer);
		if (!Options.ThroneOptions.JewelSalvageRunning) {
			t.JewelSalvageStatus = tx('Powered Off');
			t.PaintJewelSalvageStatus();
			return;
		}

		t.loopjewelaction = false;
		t.autojeweldelay = 0; // no delay if no action taken!

		var num_city = t.pickAetherSalvageCity(Options.ThroneOptions.SalvageCityNum);
		var SalvageCityId = Seed.cities[num_city][0];

		if (Options.ThroneOptions.JewelSalvageItem != 0) {
			var gotJewel = false;
			for (var jwl=0;jwl<uW.kocJewelItems.length;jwl++) {
				var jewel_item = uW.kocJewelItems[jwl];
				JewelKey = jewel_item.id+','+jewel_item.quality;
				if (Options.ThroneOptions.JewelTarget[JewelKey]<jewel_item.quantity) {
					gotJewel = true;
					// check throne item
					var throne_item = uW.kocThroneItems[Options.ThroneOptions.JewelSalvageItem];
					if (throne_item) {
						if (throne_item.isBroken) {
							t.log(tx('Broken throne room item selected for Jewel Salvage - Turning off'),'SALVAGE',true);
							t.toggleAutoJewelState();
						}
						else {
							if (throne_item.jewel.valid) {
								t.RemoveJewel(SalvageCityId,throne_item.jewel.id,throne_item.jewel.quality,throne_item.id,
									function() { t.AddJewel(jewel_item.id,jewel_item.quality,throne_item.id,
										function () { t.RemoveJewel(SalvageCityId,jewel_item.id,jewel_item.quality,throne_item.id); }
									);
								});
							}
							else {
								t.AddJewel(jewel_item.id,jewel_item.quality,throne_item.id,
									function () { t.RemoveJewel(SalvageCityId,jewel_item.id,jewel_item.quality,throne_item.id); }
								);
							}
							t.autojeweldelay = t.intervalJewelSecs;
							t.loopjewelaction = true;
						}
					}
					else {
						t.log(tx('Invalid throne room item selected for Jewel Salvage - Turning off'),'SALVAGE',true);
						t.toggleAutoJewelState();
					}
					break;
				}
			}
			if (!gotJewel) {
				t.JewelSalvageStatus = tx('Waiting for jewels to salvage')+'...';
				t.PaintJewelSalvageStatus();
			}
		}
		else {
			t.log(tx('No throne room item selected for Jewel Salvage - Turning off'),'SALVAGE',true);
			t.toggleAutoJewelState();
		}
		if (!t.loopjewelaction) { t.autojeweldelay = t.intervalJewelLoopSecs; } // if no action this loop, apply delay anyway...
		t.JewelTimer = setTimeout(function () { t.doAutoJewelLoop(); }, (t.autojeweldelay * 1000));
	},

	AddJewel: function (jewel_id, jewel_quality, throne_item_id, notify) {
		var t = Tabs.Throne;

		t.JewelSalvageStatus = tx('Salvaging Jewel')+'...';
		t.PaintJewelSalvageStatus();

		var params = uW.Object.clone(uW.g_ajaxparams);
		params.ctrl = 'throneRoom\\ThroneRoomServiceAjax';
		params.action = 'addJewel';
		params.itemId = throne_item_id;
		params.quality = jewel_quality;
		params.effectId = jewel_id;

		new MyAjaxRequest(uW.g_ajaxpath + "ajax/_dispatch53.php" + uW.g_ajaxsuffix, {
			method: "post",
			parameters: params,
			onSuccess: function (rslt) {
				if (rslt.ok) {
					t.TotalJewels--;
					for (var jwl=0;jwl<uW.kocJewelItems.length;jwl++) {
						var jewel_item = uW.kocJewelItems[jwl];
						if ((rslt.quality==jewel_item.quality) && (rslt.effectId==jewel_item.id)) {
							uW.kocJewelItems[jwl].quantity = uW.kocJewelItems[jwl].quantity-1;
							JewelKey = jewel_item.id+','+jewel_item.quality;
							t.JewelInventoryList[JewelKey].quantity = uW.kocJewelItems[jwl].quantity;
							t.RepaintJewelStock(JewelKey);
							break;
						}
					}
					if ((uW.kocThroneItems[throne_item_id] != null) && (uW.kocThroneItems[throne_item_id].jewel != null)) {
						// there's stuff that should be done here, but as we're going to remove immediately, don't bother!
						uW.kocThroneItems[throne_item_id].jewel.valid = true;
					}
				}
				else {
					t.JewelSalvageStatus = tx('Error Salvaging Jewel')+' - '+rslt.msg;
					t.log(t.JewelSalvageStatus,'GENERAL',true);
					t.PaintJewelSalvageStatus();
				}
				if (notify) notify();
			},
		},true);
	},

	RemoveJewel: function (city_id, jewel_id, jewel_quality, throne_item_id, notify) {
		var t = Tabs.Throne;
		var params = uW.Object.clone(uW.g_ajaxparams);
		params.ctrl = 'throneRoom\\ThroneRoomServiceAjax';
		params.action = 'removeJewel';
		params.cityId = city_id;
		params.itemId = throne_item_id;

		new MyAjaxRequest(uW.g_ajaxpath + "ajax/_dispatch53.php" + uW.g_ajaxsuffix, {
			method: "post",
			parameters: params,
			onSuccess: function (rslt) {
				if (rslt.ok) {
					var astone_gain = rslt.aetherstones * -1;
					Seed.resources["city" + rslt.cityId]["rec5"][0] = parseIntNan(Seed.resources["city" + rslt.cityId]["rec5"][0]) + parseIntNan(astone_gain);
					if ((uW.kocThroneItems[throne_item_id] != null) && (uW.kocThroneItems[throne_item_id].jewel != null)) {
						uW.kocThroneItems[throne_item_id].jewel.valid = false;
						if (uW.kocThroneItems[throne_item_id].effects.slot6 != null) {
							delete uW.kocThroneItems[throne_item_id].effects.slot6;
						}
					}
					t.JewelSalvageStatus = tx('Salvaged')+' '+t.JewelQuality[jewel_quality-1]+' '+CM.ThroneController.getEffectName(jewel_id)+' '+uW.g_js_strings.commonstr.jewel+' - '+tx('Aetherstone gained')+' '+addCommas(astone_gain);
					t.log(t.JewelSalvageStatus,'SALVAGE');
					Options.ThroneOptions.NumJewelSalvaged++;
					Options.ThroneOptions.AetherJewelSalvaged += astone_gain;
					saveOptions();
				} else {
					t.JewelSalvageStatus = tx('Error Removing Jewel')+' - '+rslt.msg;
					t.log(t.JewelSalvageStatus,'GENERAL',true);
				}
				t.PaintJewelSalvageStatus();
				if (notify) notify();
			},
		},true);
	},

	PaintJewelSalvageStatus : function () {
		var t = Tabs.Throne;
		var Stats = '';

		if (Options.ThroneOptions.JewelSalvageRunning) {
			var now = new Date();
			if (!Options.ThroneOptions.JewelSalvageStartDate) Options.ThroneOptions.JewelSalvageStartDate = now.valueOf();
			var StartDate = new Date(Options.ThroneOptions.JewelSalvageStartDate);
			var since = StartDate.toDateString();

			var Stats = addCommas(Options.ThroneOptions.NumJewelSalvaged)+'&nbsp;'+tx('jewels salvaged')+',&nbsp;'+addCommas(Options.ThroneOptions.AetherJewelSalvaged)+'&nbsp;'+tx('aetherstone collected')+'&nbsp;'+tx('since')+'&nbsp;'+since+'<span style="inline-block;float:right;margin-top:4px;">'+strButton8(tx('Reset Stats'),'id=btthronejewelsalvageoverviewreset')+'</span>';
		}
		if (ById('btthroneoverviewjewelsalvagestatusdiv')) ById('btthroneoverviewjewelsalvagestatusdiv').innerHTML = t.JewelSalvageStatus+'<br><i>'+Stats+'</i>';
		if (ById('btthronejewelsalvageoverviewreset')) ById('btthronejewelsalvageoverviewreset').addEventListener('click',t.ResetJewelSalvageStats,false);
	},

	ResetJewelSalvageStats : function() {
		var t = Tabs.Throne;
		Options.ThroneOptions.JewelSalvageStartDate = 0;
		Options.ThroneOptions.NumJewelSalvaged = 0;
		Options.ThroneOptions.AetherJewelSalvaged = 0;
		saveOptions();
		t.PaintJewelSalvageStatus();
	},

	// COMPARE FUNCTIONS

	GetInventory : function (trId,num,div) {
		var t = Tabs.Throne;
		var Presets = [];
		var m = '';
		for (var slot in Seed.throne.slotEquip) {
			var throneItems = Seed.throne.slotEquip[slot];
			for (var i=0;i<throneItems.length;i++) {
				if (trId == throneItems[i]) {
					Presets.push(slot);
				}
			}
		}

		var numrows = Math.ceil(Seed.throne.slotNum/16);
		var perrow = Math.ceil(Seed.throne.slotNum/numrows);

		if (Presets.length > 0) { m = '<br><b>'+tx('Equipped to Presets')+'</b><br><TABLE cellspacing=0 cellpadding=0><TR>'; }

		for (var i=0;i<Presets.length;i++) {
			if ((i % perrow)==0) {
				m+='</tr><TR>';
			}
			m+='<TD id="trthronecm'+num+Presets[i]+'" class="xtab trimg" style="padding-right: 2px;"><a style="text-decoration:none;"><div class="presetBut presetButNon"><center>'+Presets[i]+'</center></div></a></td>';
		}
		m += '</tr></table>';
		ById(div).innerHTML = m;

		for (var i=0;i<Presets.length;i++) {
			ById('trthronecm'+num+Presets[i]).addEventListener ('mouseover', function(){
				var slot = this.id.substring(11);
				var presetname = (Options.DashboardOptions.TRPresets[slot]?Options.DashboardOptions.TRPresets[slot].name:'Preset '+slot);
				var StatEffects = GenerateTRPresetStats(slot);
				var Tiers = GenerateTRPresetTiers(slot);
				createToolTip(presetname,this,StatEffects.slice(),Tiers.slice());
			},false);
		}
	},

	NumberOfPresetsEquipped : function(trId) {
		var t = Tabs.Throne;
		var counter = 0;
		for (var slot in Seed.throne.slotEquip) {
			var throneItems = Seed.throne.slotEquip[slot];
			for (itemIdx = 0; itemIdx < throneItems.length; itemIdx++) {
				if (trId == throneItems[itemIdx]) counter++;
			}
		}
		return counter;
	},

	PresetsEquipped : function(trId,div) {
		var t = Tabs.Throne;
		var Presets = [];
		var m = '';
		for (var slot in Seed.throne.slotEquip) {
			var throneItems = Seed.throne.slotEquip[slot];
			for (var i=0;i<throneItems.length;i++) {
				if (trId == throneItems[i]) {
					Presets.push(slot);
				}
			}
		}

		var perrow = 5;
		if (Presets.length > 0) { m = '<b>'+tx('Presets Equipped')+'</b><br><TABLE cellspacing=0 cellpadding=0><TR>'; }

		for (var i=0;i<Presets.length;i++) {
			if ((i % perrow)==0) {
				m+='</tr><TR>';
			}
			m+='<TD id="trcontextm_'+Presets[i]+'" class="xtab trimg" style="padding-right: 2px;"><div class="presetBut presetButNon"><center>'+Presets[i]+'</center></div></td>';
		}
		m += '</tr></table>';
		div.innerHTML = m;
	},

	// GENERAL FUNCTIONS

	getThroneItemStats : function (trId, sep) {
		var t = Tabs.Throne;
		sep = sep || "	";
		var throne_item = uW.kocThroneItems[trId];
		if (!throne_item) return "";
		var D = [];
		D.push(throne_item.name.replace(/\'/g, "") + (throne_item.unique ? " +" + throne_item.level : ""));
		D.push(uW.g_js_strings.commonstr.faction + ": " + uW.g_js_strings.commonstr[throne_item.faction]);
		D.push(uW.g_js_strings.commonstr.quality + ": " + CardQuality(throne_item.quality,throne_item.unique));
		D.push(uW.g_js_strings.commonstr.type + ": " + uW.g_js_strings.throneRoom[throne_item.type]);
//		D.push(uW.g_js_strings.commonstr.level + ": " + throne_item.level);
		if (Options.ThroneOptions.ChatPostShowMight) {
			D.push(uW.g_js_strings.commonstr.might + ": " + addCommas(CardMight(throne_item)));
		}
		if (throne_item.jewel && throne_item.jewel.valid) { D.push(uW.g_js_strings.commonstr.jewel + ": " + t.JewelQuality[throne_item.jewel.quality-1]); }

		for (var slot in throne_item.effects) {
			try {
				var N = throne_item.effects[slot];
				effectName = uW.g_js_strings.effects["name_" + N.id];
				tier = parseInt(N.tier);
				if (CM.THRONE_ROOM_TYPE_DEBUFF_EFFECTS.indexOf(N.id) != -1) {
					effectName = effectName.replace("%1$s", CM.THRONE_ROOM_TYPE_DEBUFF_EFFECTS_TIER_PERCENTAGE[tier - 1] + "% ");
				}
				p = CM.thronestats.tiers[N.id][tier];
				while (!p && (tier > 0)) { tier--; p = CM.thronestats.tiers[N.id][tier]; }
				if (!p) continue; // can't find stats for tier

				var base = +p.base || 0;
				var level = throne_item.level || 0;
				var growth = +p.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 = Number(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]);
				percent = (percent > 0) ? "+" + percent : percent;
				D.push("Row " + B + ": " + percent + "% " + effectName);
			}
			catch (e) { }
		}
		var cText = D.join(sep);
		if (sep == "||") cText = ":::. |" + cText;
		return cText;
	},

	PostThroneSlot : function(slot) {
		var t = Tabs.Throne;
		var D = [];
		D.push(tx('Throne Room Preset')+' #'+slot);
		if (Options.DashboardOptions.TRPresets[slot] && Options.DashboardOptions.TRPresets[slot].name!='') {
			D.push(Options.DashboardOptions.TRPresets[slot].name);
		}
		if (Options.ThroneOptions.ChatPostShowMight) {
			D.push(tx('Preset Might')+': '+addCommas(t.getPresetMight(slot)));
		}
		D.push(t.GeneratePresetStats(slot, false));
		sendChat(":::. |" + D.join("||"));
	},

	PostPreviewSlot : function() {
		var t = Tabs.Throne;
		var D = [];
		D.push(tx('Throne Room Preview'));
		if (Options.ThroneOptions.ChatPostShowMight) {
			D.push(tx('Preview Might')+': '+addCommas(t.getPreviewMight(t.PreviewCards)));
		}
		D.push(t.GeneratePreviewStats(t.PreviewCards, false));
		sendChat(":::. |" + D.join("||"));
	},

	ConvertToCard : function (trId,div,Links,ScaleFactor,nomenu,FromSearch) {
		var t = Tabs.Throne;
		if (!FromSearch) { FromSearch = false; }
		div.innerHTML = '';
		var TRCard = uW.kocThroneItems[trId];
		if (TRCard) {
			div.innerHTML = Tabs.Reference.DisplayTRCard(TRCard,Links,ScaleFactor);
			div.className = trId;

			if (!nomenu) {
				jQuery(div).click(function () {
					var trId = jQuery(this).attr("class");
					if (uW.kocThroneItems[trId]) {
						CM.ContextualMenuThrone.renderMenu(this, uW.kocThroneItems[trId], true, FromSearch);
					}
				});
			}
			return true;
		}
		return false;
	},

	GeneratePresetStats : function (slot, htmlEffects, Colours ) {
		var t = Tabs.Throne;

		var J = new Array();
		var Effects = GenerateTRPresetStats(slot);
		var Tiers = GenerateTRPresetTiers(slot);

		var SortOrder = [];
		if (Options.AlternateSortOrder) { for (var z in AlternateSortOrder) SortOrder.push(AlternateSortOrder[z]); }
		else { for (var z in Effects) SortOrder.push(z); }

		for (var z=0;z<SortOrder.length;z++) {
			var effect = SortOrder[z];
			if (Effects[effect] && !isNaN(Effects[effect]) && (Effects[effect] != 0) && CM.thronestats["effects"][effect]) {
				var effectName = CM.thronestats["effects"][effect]["1"];
				if (CM.THRONE_ROOM_TYPE_DEBUFF_EFFECTS.indexOf(effect) != -1) {
					effectName = effectName.replace("%1$s", CM.THRONE_ROOM_TYPE_DEBUFF_EFFECTS_TIER_PERCENTAGE[Tiers[effect] - 1] + "% ");
				}
				if (htmlEffects == true) {
					if (Colours) {
						var TRStyles = getTREffectStyle(effect);
						J.push("<div>" + TRStyles.LineStyle + (Math.round(Effects[effect] * 100) / 100) + '% ' + effectName + TRStyles.EndStyle + "</div>");
					}
					else {
						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("||");
		}
	},

	GeneratePreviewStats : function (slotitems, htmlEffects, Colours ) {
		var t = Tabs.Throne;

		var J = new Array();
		var Effects = [];
		var Tiers = [];
		for (var k in CM.thronestats.tiers) { Effects[k] = 0; Tiers[k] = 0; }

		for (var throneType in slotitems) {
			y = uW.kocThroneItems[slotitems[throneType]];
			for (var O in y["effects"]) {
				var i = +(O.split("slot")[1]);
				id = y["effects"]["slot"+i]["id"];
				Current = getTRSlotStat(y,id,i);
				if (i<=parseInt(y.quality)) {
					if (CompositeEffects.hasOwnProperty(id)) {
						var Composite = CompositeEffects[id]
						for (var e=0;e<Composite.length;e++) {
							Effects[Composite[e]] += Current;
						}
					}
					else {
						Effects[id] += Current;
					}
				}
				Tiers[id] = y["effects"]["slot"+i]["tier"];
			}
		}

		var SortOrder = [];
		if (Options.AlternateSortOrder) { for (var z in AlternateSortOrder) SortOrder.push(AlternateSortOrder[z]); }
		else { for (var z in Effects) SortOrder.push(z); }

		for (var z=0;z<SortOrder.length;z++) {
			var effect = SortOrder[z];
			if (Effects[effect] && !isNaN(Effects[effect]) && (Effects[effect] != 0) && CM.thronestats["effects"][effect]) {
				var effectName = CM.thronestats["effects"][effect]["1"];
				if (CM.THRONE_ROOM_TYPE_DEBUFF_EFFECTS.indexOf(effect) != -1) {
					effectName = effectName.replace("%1$s", CM.THRONE_ROOM_TYPE_DEBUFF_EFFECTS_TIER_PERCENTAGE[Tiers[effect] - 1] + "% ");
				}
				if (htmlEffects == true) {
					if (Colours) {
						var TRStyles = getTREffectStyle(effect);
						J.push("<div>" + TRStyles.LineStyle + (Math.round(Effects[effect] * 100) / 100) + '% ' + effectName + TRStyles.EndStyle + "</div>");
					}
					else {
						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("||");
		}
	},

	getPresetMight : function (slot) {
		var t = Tabs.Throne;
		var might = 0;
		for (var i=0;i<Seed.throne.slotEquip[slot].length;i++) {
			var trId = Seed.throne.slotEquip[slot][i];
			var throne_item = uW.kocThroneItems[trId];
			if (throne_item) {
				might += CM.ThroneView.getMightBonus(throne_item);
			}
		}
		return might;
	},

	getPreviewMight : function (slotitems) {
		var t = Tabs.Throne;
		var might = 0;
		for (var throneType in slotitems) {
			var throne_item = uW.kocThroneItems[slotitems[throneType]];
			if (throne_item) {
				might += CM.ThroneView.getMightBonus(throne_item);
			}
		}
		return might;
	},

	showNextThroneLevel: function () {
		var t = Tabs.Throne;
		if (t.SelectedItem < 0) return;
		if (jQuery('.upgrade.selected').length==0) return;

		var X = uW.kocThroneItems[t.SelectedItem];
		if (X.level == CM.MAX_MASTERS_TOKEN_LEVEL) return;

		var V = uW.g_js_strings.commonstr.next;

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

		var bump = t.NextLevel;

		if ((level + bump) > CM.MAX_MASTERS_TOKEN_LEVEL) {
			bump = CM.MAX_MASTERS_TOKEN_LEVEL - level;
		}

		var R = [], Q, Y, S, U, N = {}, T, W;
		level += bump;
		ById('nextStatContainer').firstChild.innerHTML = uW.g_js_strings.commonstr.level+' '+level;

		var ax = 0;
		jQuery.each(X.effects, function (Z, aa) {
			Q = +(Z.split('slot')[1]);
			Y = uW.g_js_strings.effects["name_" + aa.id];
			if (CM.THRONE_ROOM_TYPE_DEBUFF_EFFECTS.indexOf(aa.id) != -1) {
				Y = Y.replace("%1$s", CM.THRONE_ROOM_TYPE_DEBUFF_EFFECTS_TIER_PERCENTAGE[aa.tier - 1] + "% ");
			}
			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;
			if (Z == 'slot6') { //if it has a slot 6, it automatically has a jewel
				JewelQuality = X["effects"]['slot6'].quality;
				GrowthLimit = CM.thronestats.jewelGrowthLimit[JewelQuality];
				if (GrowthLimit <= level) level = GrowthLimit
			}
			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 + ' +' + U + '%</li>')
				} else {
					R.push('<li class="' + T + '">' + Y + ' ' + U + '%</li>')
				}
			} else {
				R.push('<li class="disabled ' + T + '">' + Y + ' + ' + U + '%</li>')
			}
			ax++;
		});
		if (ax < 6) {
			if ((ax & 1) != 0) {
				T = "even"
			} else {
				T = "odd"
			}
			R.push('<li class="disabled ' + T + '">'+uW.g_js_strings.jewel.empty_slot+'</li>')
		}
		level -= bump;
		t.NextLevel++;
		ById('thronePanelStat2').innerHTML = R.join('');

		var lis = ById('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);
		}
	},

	ViewThroneCards : function (uid, name, ThroneCards) {
		var t = Tabs.Throne;

		if (name!="") { var poptitle=name+uW.g_js_strings.throneRoom.title_part; }
		else { var poptitle = uW.g_js_strings.throneRoom.title_throneRoom; }

		t.PopCards = {};
		for (var ii=0;ii<ThroneCards.length;ii++) {
			var TR = ThroneCards[ii];
			var TRCard = {};
			TRCard.id = TR.id;
			TRCard.unique = parseIntNan(TR.unique);
			if (TRCard.unique) { TRCard.name = uW.g_js_strings.throneRoom["unique_"+TR.type+TR.unique]||uW.ksoItems[+TRCard.unique].name; }
			if (!TRCard.name) { TRCard.name = CardQuality(TR.quality)+" "+uW.g_js_strings.throneRoom[TR.type]+" "+uW.g_js_strings.commonstr.of+" "+uW.g_js_strings.effects["suffix_"+TR.effects.slot5.id]+' +'+TR.level; }
			TRCard.faction = TR.faction;
			TRCard.type = TR.type;
			TRCard.level = TR.level;
			TRCard.quality = TR.quality;
			TRCard.createPrefix = function () { return ""; };
			TRCard.createSuffix = function () { return ""; };
			TRCard.effects = {};
			var slot = 0;
			for (var k in TR.effects) {
				slot++
				TRCard.effects["slot"+slot] = {};
				TRCard.effects["slot"+slot].id = TR.effects[k].id;
				TRCard.effects["slot"+slot].tier = TR.effects[k].tier;

				if (slot==6) {
					if (TR.jewel && TR.jewel.valid) {
						TRCard.effects["slot"+slot].quality = TR.jewel.quality;
						TRCard.effects["slot"+slot].fromJewel = true;

						TRCard.jewel = {};
						TRCard.jewel.valid = true;
						TRCard.jewel.id = TR.jewel.id;
						TRCard.jewel.quality = TR.jewel.quality;
						TRCard.jewel.tier = TRCard.effects["slot"+slot].tier;
						TRCard.jewel.fromJewel = true;
						TRCard.jewel.gift = false;
						TRCard.jewel.quantity = 1;
					}
				}
			}
			t.PopCards[ThroneCards[ii].type] = TRCard;
		}

		var m = '';

		m += '<div style="width:100%;display:inline-block;">';
		m += '<table align=left class=xtabBR width=100% style="padding-right:0px;">';
		m += '<tr><td valign=top colspan=2><div class=divHeader><span id=btthronepoptitle style="display:inline-block;"><b>'+tx('Throne Stats')+'</b></span></div><div id=btthronepoppreview>&nbsp;</div><div id=btthronepoppostdiv style="display:none;" align=center><br>'+strButton8('Post to Chat',' id=btthronepoppost')+'</div></td><td style="padding-right:0px;"><div style="max-width:'+(GlobalOptions.btWinSize.x-220)+'px;overflow-x:auto;max-height:1000px;overflow-y:auto;padding-right:0px;"><table cellpadding=0 cellspacing=0 style="padding-right:2px;border:1px solid;border-collapse:collapse;" class=xtab width=100%><tr>';

		var LineBreak = 4;
		if (GlobalOptions.btWinSize.x == 750) {LineBreak = 3;}
		if (GlobalOptions.btWinSize.x == 1250) {LineBreak = 6;}

		for (var type_index = 0; type_index < trTypes.length; ++type_index) {
			if (type_index % LineBreak == 0) m += '</tr><tr>';
			m += '<td valign=top style="padding:2px;overflow:visible;width:180px;height:auto;border:1px solid;">';
			m += '<div id=btthronePopItemHead' + trTypes[type_index] + ' ><div style="text-transform:capitalize;"><b>'+uW.g_js_strings.throneRoom[trTypes[type_index]]+'</b></div></div>';
			m += '<div id=btthronePopItem' + trTypes[type_index] + ' style="min-height:200px;">&nbsp;</div>';
			m += '</td>';
		}

		m += '</tr></table></div></td></tr>';
		m += '</table></div>';
		m += '<div align=center>'+strButton20(tx('Refresh'), 'id=btthronepoprefresh')+'</div>';

		if (t.popThrone) {
			t.popThrone.show(false);
			if (t.popThrone.onClose) t.popThrone.onClose();
			t.popThrone.destroy();
			t.popThrone = null;
		}
		t.popThrone = new CPopup ('PBPThronePopup', t.popuppos.x, t.popuppos.y, GlobalOptions.btWinSize.x, 300, true, function () {
			t.popuppos = t.popThrone.getLocation();
			clearTimeout(1000);
		});
		if ((t.popuppos.x == -999) && (t.popuppos.y == -999)) {
			t.popThrone.centerMe(mainPop.getMainDiv());
		}
		t.popThrone.getMainDiv().innerHTML = m;
		t.popThrone.getTopDiv().innerHTML = '<CENTER><B>'+poptitle+'</b></center>';
		t.popThrone.show (true);

		for (var ii in t.PopCards) {
			ById('btthronePopItem' + t.PopCards[ii].type).innerHTML = Tabs.Reference.DisplayTRCard(t.PopCards[ii],false,t.PreviewCardScale);
		}

		ById('btthronepoppreview').innerHTML = t.GeneratePopStats(t.PopCards,true,true);
		if (jQuery.isEmptyObject(t.PopCards)) { ById('btthronepoppostdiv').style.display='none'; }
		else { ById('btthronepoppostdiv').style.display=''; }

		ById('btthronepoppost').addEventListener('click',function() { t.PostPopSlot(uid,poptitle,t.PopCards); }, false);
		ById('btthronepoprefresh').addEventListener('click',function() {t.FetchThroneRoom(uid,name,t.ViewThroneCards);}, false);

		ResetFrameSize('PBPThronePopup',300,GlobalOptions.btWinSize.x);
	},

	GeneratePopStats : function (slotitems, htmlEffects, Colours ) {
		var t = Tabs.Throne;

		var J = new Array();
		var Effects = [];
		var Tiers = [];
		for (var k in CM.thronestats.tiers) { Effects[k] = 0; Tiers[k] = 0; }

		for (var throneType in slotitems) {
			y = slotitems[throneType];
			for (var O in y["effects"]) {
				var i = +(O.split("slot")[1]);
				id = y["effects"]["slot"+i]["id"];
				Current = getTRSlotStat(y,id,i);
				if (i<=parseInt(y.quality)) {
					if (CompositeEffects.hasOwnProperty(id)) {
						var Composite = CompositeEffects[id]
						for (var e=0;e<Composite.length;e++) {
							Effects[Composite[e]] += Current;
						}
					}
					else {
						Effects[id] += Current;
					}
				}
				Tiers[id] = y["effects"]["slot"+i]["tier"];
			}
		}

		var SortOrder = [];
		if (Options.AlternateSortOrder) { for (var z in AlternateSortOrder) SortOrder.push(AlternateSortOrder[z]); }
		else { for (var z in Effects) SortOrder.push(z); }

		for (var z=0;z<SortOrder.length;z++) {
			var effect = SortOrder[z];
			if (Effects[effect] && !isNaN(Effects[effect]) && (Effects[effect] != 0) && CM.thronestats["effects"][effect]) {
				var effectName = CM.thronestats["effects"][effect]["1"];
				if (CM.THRONE_ROOM_TYPE_DEBUFF_EFFECTS.indexOf(effect) != -1) {
					effectName = effectName.replace("%1$s", CM.THRONE_ROOM_TYPE_DEBUFF_EFFECTS_TIER_PERCENTAGE[Tiers[effect] - 1] + "% ");
				}
				if (htmlEffects == true) {
					if (Colours) {
						var TRStyles = getTREffectStyle(effect);
						J.push("<div>" + TRStyles.LineStyle + (Math.round(Effects[effect] * 100) / 100) + '% ' + effectName + TRStyles.EndStyle + "</div>");
					}
					else {
						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("||");
		}
	},

	getPopMight : function (slotitems) {
		var t = Tabs.Throne;
		var might = 0;
		for (var throneType in slotitems) {
			var throne_item = slotitems[throneType];
			if (throne_item) {
				might += CardMight(throne_item);
			}
		}
		return might;
	},

	PostPopSlot : function(uid,name,slotitems) {
		var t = Tabs.Throne;
		var D = [];
		D.push(name);
		if (Options.ThroneOptions.ChatPostShowMight) {
			D.push(tx('Equipped Might')+': '+addCommas(t.getPopMight(slotitems)));
		}
		D.push(t.GeneratePopStats(slotitems, false));
		sendChat(":::. |" + D.join("||"));
	},

	FetchThroneRoom : function (uid,name,notify) {
		var t = Tabs.Throne;

		if (uid==0) uid = uW.tvuid;

		var params = uW.Object.clone(uW.g_ajaxparams);
		params.ctrl = 'throneRoom\\ThroneRoomServiceAjax';
		params.action = 'getEquipped';
		params.playerId = uid;

		new MyAjaxRequest(uW.g_ajaxpath + "ajax/_dispatch53.php" + uW.g_ajaxsuffix, {
			method: "post",
			parameters: params,
			loading: true,
			onSuccess: function (rslt) {
				if(rslt.ok){
					notify(uid,name,rslt.items);
				}
			},
		},true); // no retry
	},

	autoSpeedup: function (action) {
		var t = Tabs.Throne;
		var now = unixTime();
		var item = 0;
		var totTime = 0;
		if (Seed.queue_throne && Seed.queue_throne.end) {
			totTime = Seed.queue_throne.end - now;
		}

		if (totTime > 0) {
			var trItem = uW.kocThroneItems[Seed.queue_throne.itemId];
			if (trItem) {
				// check applicable level/quality
				var UseSpeedups = true;
				if (trItem.quality<Options.ThroneOptions.RepairSpeedupMinQuality) { UseSpeedups = false; }
				if (trItem.level<Options.ThroneOptions.RepairSpeedupMinLevel) { UseSpeedups = false; }
				if (!UseSpeedups) { return; }
			}
			else { return; } // no item?

			if (Options.ThroneOptions.UseOverride && Options.ThroneOptions.OverrideSpeedup != 0) {
				var THRESHOLD_SECONDS = (parseIntNan(Options.ThroneOptions.OverrideMinutes)*60)+(parseIntNan(Options.ThroneOptions.OverrideHours)*60*60);
				if (totTime >= THRESHOLD_SECONDS && uW.ksoItems[Options.ThroneOptions.OverrideSpeedup].count > 0) { item = Options.ThroneOptions.OverrideSpeedup; }
			}
			if (item==0 && totTime >= HourGlassThreshold[7] && Options.ThroneOptions.UseEH && uW.ksoItems[8].count > 0) { item = 8; }
			if (item==0 && totTime >= HourGlassThreshold[6] && Options.ThroneOptions.UseDH && uW.ksoItems[7].count > 0) { item = 7; }
			if (item==0 && totTime >= HourGlassThreshold[5] && Options.ThroneOptions.UseRH && uW.ksoItems[6].count > 0) { item = 6; }
			if (item==0 && totTime >= HourGlassThreshold[4] && Options.ThroneOptions.UseAH && uW.ksoItems[5].count > 0) { item = 5; }
			if (item==0 && totTime >= HourGlassThreshold[3] && Options.ThroneOptions.UseMH && uW.ksoItems[4].count > 0) { item = 4; }
			if (item==0 && totTime >= HourGlassThreshold[2] && Options.ThroneOptions.UseGH && uW.ksoItems[3].count > 0) { item = 3; }
			if (item==0 && totTime >= HourGlassThreshold[1] && Options.ThroneOptions.UseKH && uW.ksoItems[2].count > 0) { item = 2; }
			if (item==0 && totTime >= HourGlassThreshold[0] && Options.ThroneOptions.UseSH && uW.ksoItems[1].count > 0) { item = 1; }
		}

		if (item != 0) {
			t.SpeedupRepair(item);
		}
	},
}