Greasy Fork

TR

Throne Room Tab

此脚本不应直接安装,它是一个供其他脚本使用的外部库。如果您需要使用该库,请在脚本元属性加入:// @require https://update.greasyfork.icu/scripts/399271/787106/TR.js

/**************************** 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);
		}
	},
}