// ==UserScript==
// @name Darksoul KOC Power Tools
// @namespace darksoul
// @version 20140404a
// @include *.kingdomsofcamelot.com/*main_src.php*
// @description Enhancements and bug fixes for Kingdoms of Camelot
// @icon http://www.gravatar.com/avatar/f9c545f386b902b6fe8ec3c73a62c524?r=PG&s=60&default=identicon
// ==/UserScript==
//Fixed weird bug with koc game
if (window.self.location != window.top.location) {
if (window.self.location.href == window.parent.location.href) {
return; //If iframe source is same as the parent don't load script
}
}
//This value is used for statistics (https://nicodebelder.eu/kocReportView/Stats.html).
//Please change it to your Userscript project name.
var SourceName = "Darksoul Power Tools (SVN)";
var Version = '20140404a';
var Title = 'KOC Power Tools';
var DEBUG_BUTTON = true;
var DEBUG_TRACE = false;
var DEBUG_TRACE_DRAG = false;
var DEBUG_TRACE_AJAX = false;
var MAP_DELAY = 1500;
var DISABLE_POST_KNIGHT_SKILLS = false;
var DISABLE_POST_DEFENSES = false;
var ENABLE_TEST_TAB = false;
var SEND_ALERT_AS_WHISPER = false;
var TEST_WIDE = false;
var TEST_WIDE_CITIES = 7;
var ENABLE_ALERT_TO_CHAT = true;
var History = [];
var throttle = 10;
var FFVersion = getFirefoxVersion();
if (typeof SOUND_FILES == 'undefined') var SOUND_FILES = new Object();
if (typeof SOUND_FILES.whisper == 'undefined') {
SOUND_FILES.whisper = new Object();
SOUND_FILES.whisper.MP3 = 'data:audio/mp3;base64,//uQxAAAAAAAAAAAAAAAAAAAAAAAWGluZwAAAA8AAABKAABYVAAECg4OERQXFxoeISEkJioqLS8yMjU7Pj5BRERHSk1NUFNXV1pdYGBjZmlpbG9zc3Z6fX2BhYWJjZCQlZidnaCmqamusLW1ub7CwsXKys3T1dXZ3uTk5+ru7vP2+Pj7/P39/v8AAAA8TEFNRTMuOThyBK8AAAAAAAAAADQgJAh1QQABzAAAWFT+3AB1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//uAxAAAB/ADU7QQACPUwuY3OUBIICYFuAA++/ANKTmCAJh8uD5///B8HwfD4IHNPggCAIAgAwfB8+kEDmn4IAgCADB8HwfD4IAgCAIAMHwffcCGkAMtGE0qpZzqZmUqAwEIZKPpSmeBqkTLQAvF3gOE5g8Gs6d7vjgiMTAYxIq6AGgVAQXk6ZF6aJgb0uBlVoGBSE8Yl0uzdBgOwsAyEIDLLQOuvMi8XjEukQL5uRMuAYO2Bs1wHwjAnSA3htFSSS0TQiBmbkTMAOStAEZgDVgN8oAxagEVVlJOtFmQW6amAyYkAAOChsDFBAAgQFiAAQdSSdFVJaC3T2w1SHTiCgj4R4LnFhFxkU1a9Jf/5JE4meT05uTCKpkiiYpJGSKJikl//0SQIGfHeOQVBwDlkTGbGcHYMwNdWvV////////ImQMlBwEAI0caDgYHcHcHQHUHo3Hw1GgjDJ9ForceU6ci8q8f9SwughSFQ3//+6DEEYAWhZdv+abBBH5C5n85sEittNcDsA0sAO4KwGyO0THjYHNEiEmGMFWCt8KoBeB1BIx9C8iDE4Rr4HmFsGQIgYMNJWCsiCIBPvx6BdBLQnYEmIIPdIT0lC6O4pfxgA4Bh0jIojzMisomJwvGSZd/4wZUPAZBJnz5omiyX0Vt/9OzfUtJTmKLGSTmJieMjI2//7pqZk6mTN1IGgOkhQf////0AAQSoKCbCjgjicTFyG0FEkSphopIHQGMS44hEpbuzSmHwGZkFyfKptYslTHfaN1Kp/GgdRARR2YCfaNXzgDg8mrOrpYnfjMqiMRpMzaxU4dXMpDwELzU/RRmgrXYKuWjQhQxdhN/QTSxsxIqldNKaC5RwzKbF+XbHggEDBmyEZ0JCQMXElsRmJfTSmYrflVq4adRzAaDg4XLPobsvpH6hmGZZI41MyjW9f+//zLhgwgCDAAxkTMNAX6FhMGACNFmXVced3rO1S///////7iYWN2+7zzlmGtX8auFumq1OWqtWx////v//X//7jEYlnHDdeYfyKOvAbjsTh/uW8OZb//////////////3/6////////////////t26liGHIilmKmWVCYCUQICqtujkD6mTKYJgRIDuKJk0kEmzKgxogYcMYt6Y8iDmkZXOSAC3jdFBycMhpnIJkm1Iry2C4C/BmHGPUf/+4DEIgAcVZll+aeSAhmvLz+0gAGTYdb+otCuBsGQEvFyQs5TqLwpD+hksJwlHFrH8f6BT5uKtugXY6m4j12jss7Iol3JIzzQ8slGpYo1Oe15CJIERWVZmFCVfPtkxaPSKoEMwSx7O8zeU/VCXEvqgOWWZTxqw7/3vSVk96f/+/OWl4e//eJR+2QMTRGBRyw1I6YGzd1HfBc1crCxoY8u2Tau5Pp1cplE5nMqob61e8//3W/1xBoQAACchUgPOiAWCS4YjU3LztHQ4swXI3k1cmIByn4wLnyQN3DsoLmiAIguCtqdMUHZ8ECgjDrq5aLjpFioou6d7dJqHm+KLSrp3uRQsgy6abSDN3vfmEcu0it3bT3p4///////54X4Sj4F7QU1cXgYOFCw/FzFenxpZ9kEJ3RFTI5/M9/8p1MhAJyx60nCyMxDIhmMrbITXibZ3nKlEWxdGHWlMrCgjACeQWZRvxLT0ylIJLpaR//7YMQZgBEdd4XsGQ/J5S1wvYGiPUxi/37qZ4KpNmftD5i3Wbs7lU8GPog2eIor79W5HVMkyQcZI+1hGqCRIWIyBwHoSh4cfrK///////8bqQPKMQbY5jGJRDnG2QSJmOu4GNA331Zy4B4B//jqQCIAtKBJnAwMojCXlUgRKIAF9YAZpXaFE6eLT0HfjLcbjUiKgw6ZVGoBAjLIYkypx55M2tJqvmt/jMV20AjbBrCqh+vO50ikSFlGbGO7pVzSQ0sDwezb1///////w82LB6vNJF8Diy3HZKocyAggXN/2v2+5LSq/tQIAAABuC10lJAgYrNI4vvDSdkpboyF5a8bVTU2a7P/7YMQQARBZd3XMJQ8J1i3uOYYM+IwoiTw82RBcERUiTUmWZIWtZKlSFDlQRFiHi45a3Tpo61eR7UrS0NMV8T0/zE8XHfDXL/TaSjdWNqb+qlxwj3cdf////8SjmjSwnEh9o1xNwPUqhUyyMkZG9km1BUm2r5+3cn6YgCvWwZFqKBM0LfkwhWFQ7hEDgGBJLgFiiD0fnal9hpXaryGtOY3X4mewGCSLds5gnp8MsilJm+iLpIYY+qspSRrPOlSXLzSBMocViHMyPt81MGgvhoX/////4JKWHQetTzPsDqDZQxAxMogANUlJHQgZBqq/lzQAEAAl0TdB7U1xQoUytNDspsnYzP/7YMQLgA6tcXHsGG7Jx6gs+ZSN4dgctfmeo3GlUSoDwq0mbp4lS9MwjRixgYkuZELDits4p3W1lhMVven3YaeX5FnMy1ew/5OEhNpv6X8jJlVRIemoUz/////ptTFhmZrLPzT3MJFCBAw0Eq0Ck53dX/+T3qQAAAAFQAZWTvBEqVY6EBAX2RLXJAUBwWy6CHYSsh7MLojErajRk+VPh4QBgICRcNquMdAjisXnk/UuRZPUtABHlM/iO5HZ5/HOsRQ24DnAnVBQhk3sTL5nSCJCN+f////5b2EgiWI7mCtyEiJ6mn6qr/dAAAAAVI0mjAFigysqHSHAy26lUtlk7cpuEx+PNv/7YMQPgQ41RW/sDPPB7C7tfYSh2FWY2eG/s/vDOqHjOEYnCihQCJyhrk5ESVt7J6XqATKmd68xKtmcKl6+fJPM6RVjRTCqJT+mqb3FIRDpZTlY9v//Q9HIuKCQSi4PNQPfBIGhYV9FfSEICdaUgPg1kCAGrRkZH1W9sLkNtQ5SZn8QaC2AcIsbZ29518WYIGGdcxSuZ3ajVdK7uFlLmkj7VXvebu2tb+PmNkn9Ja+eCKdVazoSoSj772nQSIcYfFOt/////+qnHsaIYcCCKBCRsvPJcIOhKFZVmcYZSYbOQI1Nj4AAAAAABAED0hwJuukqb8l+JpDuXFQbSqR6csQguo3QWf/7cMQRARMdeVvMsREB5q4svYMWMGdhMtW+HbZ3iMaRoJCMmlM/OkI9Ml745DXCYlltlYppa8W3YdJ7kqn/iZlnRpRmtIjnp53iHeF4amyqYXE1zJ4qbNtIhIPe52k9QBXFheVILFn////9xU8yLFxVwXMXa9zY1DbWbKFi7eRgusG4SDRZZoakWT/S38okAnGSmRAxBsgdIt4kGtBpbZWItBhyJxlhTbOxu/Eb+bEx5RSTOLTM5AdcXIXrvqUOzcpvaTGVT3TvMv5s5+zUl3sjqy6n0WSxbuxzKjlRiRd2tV0xYyoFxY9Hf//1KOY4jDSjyiOyvQyKE4gYcJKVxELC5Zl8/rWf5lAAAAJMqRLKzYGIgVSX2dVthULoMldGVUr/RJl1NEhycPh7ClJWeOl5PbdfPc7S7fX/+2DEGYEN9QNr7BhPwgQvrbmGFTjp9+rY5ykd+ptaFqPOIaVJxfL3cilrZbPdbXO6ed2Od1OwzvplBlQ9//WtgdPItYD4nCwnxoXUlqk3vCNM77GJFcuRspQpJOEVUX1dBMunZGPRuZlg5EcCQCCjsMCGf2M8K3wlJGc2Lhw8drLnio4WwEJ1U6Iw0PDi3YdczKqnV3V2zGK+KnkJHvNQYguhUKMU4EHRYOiBlFGEUuTQUDDuiqn///uyuMEORd0EHKKB4RjBAXccZjMNjnRdUWzCz+pEMBAAXG0lAWCowMCFqyUwtw2yD8QZ/A7VkYJEQYAlGXRISHGFc+JwdJUmkq1AopT/+2DEGQAPPWtz7KRrSeaubj2BlnmhwRlD3SyBWYKEocOhclanmhZyu8NUP+GfxeUmyNFBiVHI4c2OQ9DUVMjbP/////+68yVrOkVLJyWAwwEOGI2JPyd2b+wpo61/kIgCQABJok6C8iQhEVAGvsKDY2nK8DoVW5zUbhiD56lpIrT5fjcpA4MgJsIhjkJZTQ+glIHoCjM1ykY1XMKSvCcWr02Z6vx6S6TfpH2KxN281Vq+3uzqEUWen//7T3YGHqxX6Ti4dDwtFGFhYgqgiJIocuejLNu9up/WQwAAAFSRJwXwvYKYEE02AxrZk0k6k0KZdUkZStps7tcleVvobIVAVAshUs7/+1DEFwAPGWlp7A0Rybat7L2UjWiTERqhRpqX4Z1jObQm6zs9JyPLL3UpU+lKi+11xXNRamxVXVLXXpMqJRQeiaf////+yQhAlFA21j0+PbSRjUUxY6WpQqKy3/8fZ/K+2MAABAFtxEsJwWuGlk1z4GIKytTGcWEayy2AVAo4BS0RCzNpPOnsJsq2pSbAAKAWpMxZiDqVDyvZCKXpFz4x+WxSzP0vbC4u1JhMQ9M4sX+ls0VTIyYyP/////5VllZur/+xMV06hBgkBS39Fb/Z//twxAEADmVtaeywaSooLer5liHgcRITAFWsEs8hXBGBB5gwQEr6YRFJgIaeLk5dMNEabVXXfrVNdzKsI1InETCQhDzzY+my2uSGTu1Jkgx0nrEXnmWfVzWPD0IpTUewj97f9yOkFMILMTSYv////nDDUGIoqHY/8N3MrCMGCq1BkyzfH36l+ogAAAAMgJRY08v2SrmBElM/CKCfK4XfVKuxF5ZZiDIhIki4lH6587fgTvUVJCaTh9F6NEYEZvlq1iMcMofPy0PlLdb28KekDfPSFOSpXjuuYp7i1ZOa7yyW3JONH0tzNf71LBUJCTCivuv////ia1NIOCghLe//HatA0ok66U4/SUEzVkLKa/Wqj/hRAAQCvwMXJPiOjAkESkGkIDVzNxeGvlFn9anIJXOX8srONnEglv/7YMQUAA4Zc2XMDPPh1q7seZGWNRy9bYIBAiJiLKWQz9srx6vrqZ5ntEZ75tczK1NDLy0JYtgruqaN76nD7AtGSLI///+tB4Tg+Qua/8g5hK8dZzmOKHBWJKbX0lZ/6RQAQEP4HD5XvTlER7ChpVSS/FYIMdhVWbvNwoZ6klc1jTH7I4kbgRXM8J0S/X4QXBIIYzap9LUqd68MjjU3SllWlr2rqYqkazuTMhbalkGjBwuAhJkIn//sRhGKAQTGDh5FM+kzFkIqo6Ecwi7L7Xs5ezu1nPthADICpGyVAlBNZAm24UEIBmkFlV4KpvbhTwTGKWWSaYxpNDOl7ymnvrASj1MDSv/7UMQYgA4VcWXsjLHh3yvsfZGWfc/DdG5ZrzeF8nPhXIzyvlKpTWxVR9m1dWV2vopqMiBBQ4dXEm//+iCpXOAjgjMjSuzz0E3R1fQYTJJM3G3Ry1TvQ5GCEJTjZSgmpThgIGAJT1iLbfFRZTJs1/CdhqBbVFcp5blr7G3OaAokZHsUnhVNlJidWIUiCEMjhZ/2u55LH0TUyczrdOT9nLeXRUil10ZmSQ4Cg4KZ1MQn//ohXUokFh5SPREY7uhhwEYsXhm2Un63XScAeqpM9lD/+2DEAYAOXX1b7Azzyfgt7D2BmjkgAQITbZdIkeIepCAwIBXmwFeLJ26QxTN9dXdKpRFb++bq4Wj0IgYoGmTPNi21MzaHf3IGudOyBmnopf7l79PvUK3OFstSl+6h7z70znYieqyDf//nDhjlzwsPONdu+1yY8ex9HHHONlDLrwHvnz+G/46GIEQhO7W7lJa5vQmYKBVxAC2XdX24MfmoItwHOVpZUvVc3ZDJob1i8GDbuRafaftNM3ootsLrfgtVOKj5snYZiw7HCaqvxS2zVLs90WxsftrQUecFnxj+23///////zf1oJgNFaox8+thmHanZYEW2FgmYphkHr96G44Znuz/+2DEAQAO6XFn7DEHKd6sbD6wUACGMEVG7bW5humYQNON5QxawSO4Pg+Iol4JyY4YeSXS8qZtGrtBjJm5PVvfN+zcFdrRFzE9RvBC8WiTpU8WNSNYqLn6p/eWgfDPW3XDXfHErRKBwo5Nrr/////3XQYUEBAsMZ6661mI1iB5uJRwstnR72EXidbjMlWIjMxLbrNiej0CAQEEMGLiPgnrGVjQAuWrDUmsQ7dAcRRxrnMawDlRL5A8pHMUpWKxBaxmkIfOdz2ZSKRJJrKsTdBrEmZGKiUd30lllOKkMJvZt6ONSKsOvb//7GqUKGBI5RdWc90SouUgkDxYsiLogJkom96O+9T/+6DEAYAdvZdluZwSA10zL38y8ABbN+1JsMmJxuyVs3CElzCTXQYQjKkPzogAhI90ajhlqJII8iwoqAhIZQiwFUmIqiQkeLrviUbZG1IWG44QNI9+JI8kAPvTy592TrfjFNe1Qx+bed+YxH4zFKtuKVZRGJZIakYm6WWXa8xL5XDcXuxuHJJlN7pOR3OVZXK0tfunpqS3QRik+9STfbMjzdu7T2bu/yv01JYXXPYOPn134xRYb5ru5iMQPTw73We+VYar1n8sYb/9VLkMQ3OR/O/bsa/DtS7f5bpccfzt278voL1jGlpO7zpJmL3JZhFL2csDQIf/lygfOf/B8Dg+sohoCGQoRiTnrPffnJHLq6YISMoEyUoqAo0mBGCZ5JREElA45Y8oL4Pqk67RznmdCdMY4yeTxYQYB6nHuUzFMpbijNEQI8jrY3OMPs/YiHn1LFoyrhnYlt6pj8s/bmBpU0F9FwyLcA6XS4YmppVz2R83ocu4ieW1Uh2lKlFewvN9nUkloEKsbMGfTO2ObtuiUhxZ0S9hvWxducSn9Oxrc7d2HP93bk4xH7Yys+8sbFZ+yN8JQTVPxkY8x6xbRcppMsx4K98/jRoMHcXER9Hfq6XMelL0nvJVpTE1UwACXIyUwIUCmWFEVlOiEC7mKNhbnVZjKn2lc3M1jGmUnlpfLY1I1UTBaGKiHdD/+2DEGQAQpXd9/YMAKeYt7/2Blj3zM/2cao7C/RM7Zm7LxoZN/TEUTca/lWp72qble2MKYq22CtxcOx8RW4lfbN2/utd0R+x//+g/Bpu8Lfbt2zbNZ5VKeeC2dHHy1YrEevZr5ja+4UsxmZGQgC82QoAJoKKDgZoCMPLQ5NlYu02TwBB8SvxLCjnsqbZoUVnIoeVgQvpKxV/CRsOEcMLDiiEwWA0jc1MvYzWtkdKpX9CS3dlWhGyUcylt3KpW1Zd1E2Vv6mMMA48uPR0UxnMvRRYeVWkuYQbZaM5JA+cyW+OSp3JTQyAwVYyFDYsh+c1NfDvgQ7dh5a5l0AoGm1gCaiQFFG7/+2DEEYAPeZN97CUI6eou73WDDZ027uLkFHHzK7kVTENMxFdLVVamJXbi4ui7U5t3UFcVbU73d6EM8ftDVDyurkmPt8z88zdzx1x8/Al4//97qg3VU3FXFVj1m7u/H3625Bzts71C6/1amV2sP0qkiARLUYKkuKrUGCqJiwUXBqLUDq/bRreVNBIcaYQpKSuhgxq3aoAaQ2FmKI6DJkZHsVVczMzJPWCSU4ZHeEbPXdj5rrrM81t6ssn64KM6GtCNFfj6lijyn9SYMLMUTkzsMQAwao4khMY8lGMZhzFGGqfRxxzou09eqt8pWiESbUAGrkYmYWI+hCCyCiraW2yLpZ88kWr/+2DEDgAOWWV5rCRtIeAvL32EjVGIRCgt0a7UnIV8c2wqbxdifCN2L3bV/r0UxJn1kBJgYN6NCdQvJmx8MxRE+bfeTzfBvFPd8Sr7RZ+UQ5hh/y/5/RP6F/ll7s276sMHHE51Bx5WFhVrl6ZlUNiMgAN7xuZFc5fQkgK4FAWQWuNIhbNlh3ZkHD4bWEh87S4oXcc2rlDbRnEKg4kUCm5oT6gDDOLBmcnegmBmQikeRf024bbITnU2X5aRl8zLX6T76Jdi9bCy//+RhjY+KZohvvD9sE7ElYOhmI6KChDZYBDZsZ64lUZEMDKV0KUBAgYAzCECiaJlKpisSAFKyoKFwpQSSYn/+2DEEIAOQXOB7DBo4cswL/2Blf3cTaRYujxRIAsJYaw3RsmbNrpzI5vepk5GS3OLAY9jw3PXRMITlSIvWXndsjk47YpE2rNveOSHf//86kcs31Uy0K6uWRVKtHpY5HhjFXDErauHpTNVIgKlrKUlRJYkMR/FCggSXzU21Zy5UNP9a5yX0yqFesKauhGRxjNUfipgYCL9lEcQxmZYyT4U730N8qPosjozO5x52JaqIzLUxZFy3K+70qVgZCskv5tDMIoZ7VXmzVHkixTXMZmeSQxxp66HGLfqlHQjJCAiVa2nS1oaZoYUOX/RSR5LTxNdTZZe92DkN3bhErYgC5EGkttsy0r/+2DEFgAOzXF37Bhvifcx7z2HoNSVcod8z846KrJmpKKPQpWRT7ro0uSz9xuZS6eeZExIvCzkrEVk7CFyQ5+mmualTLP/+8pxn2iGn5UiJ5TYleRTIZ8HQINF56tsa48qSIRIBIqtkqQ4MNAXzTZk5VGkI74yyFmkZ7RGRgSg7YmENTRqucjjEV5Mht1ezZih1W/bMPlCzp8cRCoqxHXM7cXCcy9OlisrN6og+HavqFdre+o1eLiu+31Kuptxn///2Jnm0k1txtzcVNO2qQ7ytnU28K9SYjfbZzgNlVWFZjISARFuB0iAUwkCYTgTC6IHCo5OxwGBXcEA/PCE2xix1zTB5JT/+2DEE4AP2YN3zDBpqe2uL32UjV29uXU9deHxgMgiQSQV/bM1KtM7ndQLZ1WiRROr1TRDY1G6ZmPP0mG9w41gxkQJFBcZCJ0gVJxo95//6ZvqVJBRI6RFLGZBEigiMELdcSYyTIgd6+WvDwteWhSUUMwKVrJMe0ZiTLCMTJMAUjJiYeJtkVXhgHHNBWbxxyyaBdXCtQkERQiBoJpGa++2CMsEKARKCmQMpkTM6tVJgxOI+8NSjBRGTPaaqbMSAod0iHn9lX/PoiAxjc8m//WdNwRkEP/9jI/+oqZ0hkBKChU6c3BL5Vz+KqRERSUgEl2QEM4CBQmdBokOM9AaYytbMx1A82P/+2DEDgANPLd57DBo6dqvbz2EjSnjEJwi/YHy6jrWBvB9lJVjMJenn3kCCAZjBzdoV0nnXcp7oVjwhdACNempydL78fHLxHwTBdmBVN3hv/5Xu9Qv//14muG85u0Ro19//DswyIaGIkE7Y26zgxpCrzAZHoqFZ0jwrY8IsJCYfB0QicfQZcXRad11M18k2p4hyVRg5maGRsAIAKDFwo7ohOPOgb6WyJnZoNTrZI5m8WEVIkn+l4Rz+XPpTNEI+f/l2Ilyh9zL/sLMRbkQiMchMTgwczXWrOuZuqKEIyMiAJSOOUoAI/uGJIGlAFE+WtAFWFoOQwSOlWEwOL1XngJ0l79JDlv/+2DEFYAOcWl57DBnCfav736wgAUBxodVSzaanEEKTu+RmOx6W3ztzhEXEJ+Mz1FjpxCEdkd3M9kKnSYzNAWWZ/z/8Y+W8xktUkOnEX1d3IjwhRwGiEhorOB9El15ekVWNDBmWNGVjBnmZDF5zGcBQEAnxX8pNvWkuTNwFa+bFRxg8aENJwzW7sLiDM1WtcsIyPdQ6tYijpIOeL/j1Vob/v5Wphq/vWYW5pmSG3pf5VVf2++f+e4WnT5/5QfaCgfscpfbXu+r4rSuUULX3nb60irFycqMN5BVhP7VaafjmYqbhzO2scSacjDBQGEDUQioSRMYQaSBoCAc5TDsQO5ccEQhTST/+4DEFIAcUZVtuZwACg0xb/+wYAWqTYmQOsSek6oDBL+Dwl+JMMoUUcFqEdhhrKRcvhdAy+A3ajMQknr2YhDEVlUAwu3ajLsUs1zknnasdjcvgmSQVGp2ixgas/NqK0dicxvzFJV1PUUblMDXs+1pq1GI72DYxNZV7Et1RxqcrxStKqaH8Kmf1a0o7bxqRmr3dqNWssaWQUvO71qJVrdSao7mWNjU7eq1tWuTsZhf01bneahqZh2QOxL45E5nVDa7Uq54xTHLudJhbhzdITp3ZUQzBFHrG3mSmcSmwVis0wAbdBI4CmroYQbMyqIyqs8IPmPpHFfa1bK1AbZxjMxpbO+ZjPDDkWXty3e27P8fL1213fdnt9SZu6Fn1r5nrJrDbz+n1V00tjeFobbxSzJZn///3MpB5Q2/Dw3jKx7Z+i/ZNKppjXZt7nuZvzm4uK7XmXlkVTMwIJWMhSHCwt9ROrog0Q4l9FDFiCaYA//7YMQNgA4Bj3vsMGjh7a6vfYYM/SLo+Ek5928CyerpaicT28JymLe/8HogWg7GLexzaIRSkudKvfsswutzHNyyVJSi6fPuxZZfmc730cv//LgdIR1sRb05IyLsZF6bFGRGnHtuZ4ozJmu3ZjMzICSUbJLMwDtFJ0GIBXU10o1AkAMhmseHoDsA5QsMLNrjPQ3rDZexK5tPwBCDBXo5gjkiGaqQBXIFqjw0a6xd4yI1MERmpalQafueIYjdxNQHmYN2fO5E5QxHqWXsn/6X043hKUs87utOvjoYZ3WKE4/4P3xu7OtKlGQkFSICla0VIOJZJjjiQtBItuLHZhsbBKMRmeBlc//7YMQPgA8hiXvsJGrhxq9vfYYM5eYgiNYiW5yPuERQSAgSq7RskY6GUsEBUslcHKzQqrPqW6C/l6XGo3V4ytL4yAoxBOX1yIwq/7YKkGHROx//N0chCAxLGMa/7CrJt5liIpDIC8yWEWx4ICyNy6djNDRAIqawkwHUCDLnNvCcapJtYoYFQdi6B1ZdtNE9dYmLlRpRrvxUOiXEDpDad+BEAwVBCUWzshZ1zRDNHORKloQizyWzCttbn9zYy45eUyP9GtaQtZ/+TeRUzVP75T45SOJuPm8Y1qitUp34C9rd1ZR1UzIhIF3RtxiBtGzgmiIig7aJCeqh7PjcGYlmJJbLas8rfv/7YMQSAA6JW3nsMGjJuicvPZSNIaYgfQDZs+bPIszYcI7uCyNgDUfAFeoRoAEPMGLCIpgrTQqfjU9K4eERZGRUiSb3BzsX/lpnvcnc85/+X7vMz7TMv/I8h9noONU2oOH89r55KWDMxMhANORuREUdpFQDYJAywChlRepQK2Cp0GmkBhGQEGqvUQVkOIh6kjIUQCEkDJGb858kBuc55Zs+tv3ktekSxFfK6R2yyiEkP4iF5Qs1KZwiM8l/Mv+XLadC0MzAVQg7gA7qApzmI4z/KfbNpHJFUzMEVW0VQYgytXARWCFLVUXaE01VjbOhOu7EK0WbhFzibn95n+0jzb6sa39Yjv/7YMQYgA8lf3nsGK3p1KYufYQN+fdmefSMhV204398pk9Wuhjl2urTyuOuo2iMchyn3cxMa16vs6IxjML6/u8JoUVRmKiTvWg+6DVU7nMLxczEj3WIFODJarZBrMMZqZIRkAd43INIEfQ8pIggAXlSeWDV5A7y5ubI593aWXA2gfAKQTPMNQ+GfZFaEr5fV/7r6qxojKr33byYMDmWHmFdrPufnfP1nKbO/oSqyFL9hn59y5FrKysYI0n/qQQONQaMDjHWffsx+2AEpJ4fWt53/1WUU0UwMgBdiILdcqzCgiICWpfBJewzeEW3meV3o3hRYUkMU8uEuYuo+/zf7koNtmrUCf/7UMQZAA8ZcXfsGHFhzyvuvYSNVMtKXxu6cMaIw5eXiVhCSCXCJWItPmfsRHJWvoYshjtp130tjGWkkTJi+x5f/5mTkfxYaKSIcqkZpu50zOgoHKQKaWKOonBSEZWQjIQCUbAKSsNUIeHrFljSMcImCi4os3WCg4d2Dkc0K7sdkBOiDgQMwTqEo7rtAzkjEFnnQEWIC4hXwZTiZfDM2hUEo/TpCmWQOWXPqHU3IGaEmVNvty/J9DS9/8xzNKmHlvIZnrTmkSjiMoPDN0jt2uX/+3DEAAAOWXFz7TBpKfmurj2RmrmTRTBhIQJUiIMQGEMBWIrJrKEYUkApyVVfB8uJyUWp4ocVRQXed91VmBtFkoea5IQS5sXJEaCMYiOVLKk04fnz04Sea3qSJD47+eT9Zl2JyO5znSE0i36f+4++kMMx5ZXOx4uaqZPCvu43UCgnIrUQcI13GhEMTEhQd1jmOBEiyTrOkYyzEWx4WXQKsRYsShdNIYFh371Nh3CmzrYdw1x0NkcX5v+PkXm7IQ1VouxQpSVkkcsoRYxHYSFVm2qlcO5ggYsiUFckKJShZHyQguPMm/P/37dFvhfSKyZd67Y2xjQz2qmg8OqU09hRxuTRB1VuKoZWQjUCICaslNBUZeh3NxGoCAZcpCQ1iu1KWZS2DRWJSZtv2rJeKNWQ4byfydZdKQva//tgxBkAEL11dewkbenFq675hI0dLMvjOK69wEgpEzJtCRpLMZEg4IGIDVHl4AI50xItFY3PNTCITwAERuxKwNiF03Q3tpe/sFPyfn/0sPPcCX3yhmb1HpvFHU0I9SQAKoAjfXXhVPOxjMiohCIL/I4HADjBURnKIIOApOAoHUkBACGyADYeIcdA53JHIgMEQ6VXbCg0s0Oe5C0uYQOCz6R+VYnpkZlqZ9NA8WnK3/p9THq52K4gGbP/SjZo/ea2mV//NK5sZZ7pdSjn5rRwgcrc64nzP+dnJGRqo3JEISAAZtY5R/hYYFQCVxG8zkRWRSR9ZXEm1lUch8QUeQZIKaNqa12d//tgxBUADxV5b+wYbYndra19kxW4ql/bd43ZELiKrcazHCOwL+kbOjZhUcqzKawuBcyN7wlR1CzNFUcdYZbUxqRKqkdSwssxJff/x+QNdOIaNYzNIcprykwMHGS5CmDGv7VcZSmIGZCJEu2NShJIMbVvE1lDygFMxr9lmrqtu+sOxkLQIwNHrkZsdIqa9nRSKOV2vSgPcjGqnamQnKvWxvvNdUn0nYlCUVi7UftKhnuzrdmaqWV1MyvdkM6iSf1dRQFHqHSmVVMimU6IV6GRZ1Q8oqAlRWwsyQQRp3UwJBJUr7UFUfCR8CaiQYYsukBGSh72vYvizqQwE/t+KRyVxylPxGOb//twxBUAFvmdcey9MenWIK55hI0d9EFuG6M4vDtw25v/uBEtVtns9jsUOBduWH78nBhmccIm5BFeuIzyO3P8wFfJAY5MN9M+jxvOxfW3BD2prgwnC8CrjHadht8ZMOTidm0qsSj7iSKckE1F4b/mubneeGf7//caSY8GpiNS0rhbBtBMgi+SAiB8iQmlWzWvSQRkuI6SVtaUNSi97idRc+YeQtWRCMiEBvhY6VMWkUTNAtwUVIiN6mKwYEg8Ji4NCypa2mEThHQKPEZALO1VDEza47gycyZjBQWMHEOZXZeA34xZ+rUMDVFQsnh2nISmN9PdWVteOQVfNOCTwkGwEGf+EBwM3sZy+RQcHYhIX1/J9Mvma+WyVar7epRIAy5EmKRKrE9TRMt+SxQPUBZqiqDwWFjEqw0hOv/7YMQQAA3FYW+sMGkp7K0tvrJgBJaegbmAgvxHPKWcOlTeICgWyqJjGPb7VdAh1C4Yx3+//55SM9hKVmUO3JUHNMH26FE/GRj1q//+xtCVAX6Fzzz0oVGBa8WysKTMUx3//dqiCYkYEUrGCWbFZzslZ5lihgrutHRRlbM4w57yZWY/SXdDEsWuJMrP6fVpJCaIZEuqIlsf3HtmSZlPHVnzfDZLdmyL3+f31v7+a2V+3iNyX3f+0fYl9zZ8PrsRYnlbVO//+7M+eTwlmvua3Z9qHaJ/p3XQVBBEFBrKOupTRgaDUwIwVQnHabn4XG1UGQk3QELIeCBkBQAZMskCThCUCpQYSv/7gMQTABzxl2/5nAICESwtv7BgBRECQRUNPhi6oVqREcK5kegKD3Up4bQkt0gOLNdhU6+L9rqlNBAzdWXsqbJOy+bdyhpK8txg5+7U3GnVg+EW/zuyl/YxRy2XQxSWpurVt17dj5mV0NNHozcz+pNUb20PMYbh+o78juU8uvXcr9LMQ3apobw5/aaU0s5UjczUledHQ5z+rUkrwxeqd3Yjkot5WaepKP+Wbp62cspcpyvbvV7f93huGYbjMByWERqhpb/M5TWnb1ipXrVd/rDv/cb//K64N0QhMQAJuMlMDRLgoZleDPE2RUYavLS8zzQZnUeF+KW24TPUufzi46Dfai0UkStmcLn75SuyJxZBOPPf1rGxTlLyXay6yDSi0Epd6/Y7W3z6VTtj7h3KPQz6al2qc0pOHycyWbDp//obWI0xSTbB6r9TnNSfGKTV0aUypI06aK7u2xKKg0MzITAUZbYnQyCbRdoWqiKg//tgxAkADMTPaewwaoHZMy69h4zlqj437+sHZpbCM9Y95aqUahBMyKHp2NXc6jfAYIPf0Nget7pH2YtJz1Lea+/DJWnDeHMhiAnD8Shi9KIs5IuuKXVTE0baWM2H6RAHYnD6BRBIL0KJXLuyKqGEltjcwfBIwL2YkCjuok67hKBtk3oolE7fysKbjsERx8Rp+BukUSBRyIOeEpmblE7Qghzc6cJ9EyQqctZ32CJnIXf9H7/oOZZvohaYOoT2nqWYOF6W//DHTKY943XHFxDH0wBE3vKFT9HzT/Pid0ELmtWGdDNgEzLdsIMLBzNYRMOZh1bxl+S6z+MlZhEpLOQC6fWcFExK//twxBKAFS2ja+w9LeG5oO01h6CgFUocz3JSeqhUKldyWzfWI7KolTF2+rf/O30uIiH0Zh2oxyyuFlsW2EwGlFTKypkSio+ApwRJadAYDYlSI0XXZluynv2WstRy/afm9EkdNRvJayzK8l6+KLTyX2///9vxrWWK+dmtZWLXGtkVPsoSs8anfqRVEmrcr3PdrT8W8WIyXbgzn+ySjAAktccF2ocjP5/RJ6boZZVCTJ0wUSdKJV6n2z0EIKTYNi7mvZm5uaZv7ZEe1jZkWsOjr9E4fuuZn4SeRBHHMzLVw3MJr6rTXO6r3x8s1e0zvI88ODZO6rLOKk3zqg08kssDaRKIjxZCe5ZFkjIUMSEQXtGnRMKY40mgVkhYQtN+lApG2VnLYoy5T+WpPg4owwcKK2eMh+141i60lf/7gMQYgA2om2P1oYALqbMrdzWCAOe3XQ6K1HCmJUsGChqQQfx09+7za+msa4SS2a/H1d319zmhs2ZR38BT5Q1nGd1pb84c3ldEGRK9rfbf/0FBtSpEQBpUzNxBkNCkksG6EiIkYoQYRst8wIAMdGNJFUMnkRIwYCb5cheEsqAhYMjG1jdCEObt92JuxBLEWXzrK407ctg5l0ql9hb710dM57r5RJc8Vl0fmnbwsXlSMsa1B0sely6arFpyGsa0mh+V33Lh/rwMDlUgicAztSN57wpu0jsOpJ6mFzWd/PLK1F7+6DcPZYZ0Xfn67vxeQUlJOcjFPG4TJJfWuaxsxCr9FQfErFa3hRVaG9co7VNh2J483n++We91nbsxLPC6+sevd7LcN/K85ZY7G43fz/XMNw5SHC7////5kPp625MBNxzX3ffbt66y9HYBJJnGi8DFVCgAMUDjw5gAiCMOXWFsMvWFbLcl7gw80BkM//uAxBiAHLGZabmcAAIMK6z/tIAFnZm3RfzKYIVM/cC5QE7EzGHqeKEtAcCy+85clsCukIhyKtEpiA4zel9h9IfiDZFbpTUdCijWdWMwJdtV6u5VmytMGRZ4YNKfupdvWL8ulE3emJdc+pfm69JIozc5ezs1cpVYrTNymjFPH5TJ38l0o+l39NUqSmtYhUVou7oItE7kkkdDRcv71Vo4/Oy6O0uc/q997/qzVPO0EViOprKY1Y1rLleQSWmi9mMVL09hje72xV/+6nVDVSMgLkrSUOEXM8TL6mDMKFAIMhJWasLG423r9RSdwndhQYUaOIsmdTcn6RRAGqh9GUcbvmqq1lMPa4aIhrmEMZE1HRQxdVJWuWuGriK4iWZ0aIqLgWkVYfw11EW0NGdEn7m6X/ymU6jbyelpZqola5lrDlljQIGi1OO4pF+EFHDK+lQjRZSaZJgdY7xmqmBGOBtYT6CDnSc2igqkhMhnqOb/+4DEEAAOrW9htZGAK4MzbH808gCDhRyAiJB6Lze0AdATZHpAdLB0puD8jc3Lv2uxe/v7u7txwekjm0lyz6RUIX/bzITkdRVPohmxKxj//qkbQSoQ+sxHZhvLc6fwQLQE2PIVzT0G74px5QiwZOQIAoJGTqvijVZreY0oG4BplhqfajAoUMPHO5EDTxhjSgQORAIAvUkDl91mIUPUCTRJDdLGnzKeKBITJQXBCU0n4hzWqsRE+WJcwVMj0zKo/DjEvR+oJ2LJlDyUDEiVHqIf6jVyfVcFCy2LTCemas7leVuzMr3NV2+XSBOZHbzqA9tqjC+wwNllRM8wyZs/cVl2yI5hR9JmVzYtYZW9gkjtrLdX6wr38KMkqOpsf6gMVK5evn2Kwojdqe+YdVAwPGCmGdwcPXwVeypl9FQhrwro9fmAoWr2////5p4J1ZRmIhEAElpsgwTYKZVQD9kyRZaRKQi54BeiN5yGRxaOxv/7YMQQgBDdl2n9gwAp0y3r9YMN6Ve0kajzoezYJM5bNS5/z3c5es1Eg1Fmzrkcntzcvm7jtc4ckUk+EkicnPvzuzS+t/s+s25RZzTaaq2dZ9dF6x4t/30v//ut9+LuNadOuax6LmYfUrw6reM6T58fazN/+0j0zZ2KFYOllAkuKSJ0PiXJlIkIygCoC7hatdsmZTuH41Wm4tLhJH0SX2bLl5+1LlBDWf9+F5eXRJOWbL8sukr84Zz5NIwY1V3W2Gdz+3DJZLmbMGBl28YyzMq3RVyIj/7GmYD1Ti3lUsz4YlVt3JTQTt/f65oPOiqW0vbcXEQio0QYV8EZDbUIQQDDHp+Q+//7kMQKgA+xj121goAryTMrfzOAAA17K7Y3mgGtZicqBiChR5FMhSzCCoRg+6GMWyNMZSIseLuKHERpaKzEI7KqTEQyqRLqjSkolm0RBYqlY7Z7TeivyO90Fzq9iuZ/OKqZJXOJsqKpNlduojRjsiCaGMYRYrNRLNILcVu6VTJmHCFkAwEzGNXTRZmJVs2gQ5wOUHzSyAZABmwYcZVaOQoQVQieIIVBpZsixkaTUAZEHcVVTKVSkcCP2rtYj2q1OS/Ujnqale9nzq2nSbaHpdLZyQSDtHKEJaZLNqSjfF6X8gV+Ltipiz9NSK0tbJyon8Ul3LMaqRx3L9eMsvkCEtdtqzVlcPO/LMbk9IZqWymmmfsV5fLJW/U6yNp7/16WkxmYLu3orhnleuf97W84Jd/dvLmsbvvvOxaMaw5rCURiU/rtHjarX7l3n4XvdendN138iN+pX7lt/3/qYwFcf+Xxagmqa1eyiL7xn//Bz/++00JRCBbGkkoOQKuRWDwgZLW1iNST3pmS5uS7tuQUmwYtWQuC5LKKqszfKEL+MxUbOf/7YMQYgBBhm2W9gwAJyS2r/rRQAaxsuc1VrV///+ck7m/tm1EmhMGkZ8P7zK8t+296Orzvk2DLp8n9i1co5kqxIiTds/n/+v2yiZKWc3Ec5y8/r+bQiq715Rnf/2yvPZ57eiSWEgqkNEJDIATblimAcUxpxC8eFugFgajKGrSFzwJOuI/0ZpfwDBgeFhMmWyWdyLQiI+6qqsxqEkZWdE3WS+ykR1oUhUdyFIZyuju9ddmnSWpUvoq/6WKZ2ev3NGoIipiM3Na5jk1kM81jxlkXDq5srgTMwQMqTbDk+jZcilr9ttlctsMRE20DQLFZDWDJmQdkGMKBImgI9MtWgrETwfhF1f/7kMQVgBvNmVG5l4ADLrMtfzLwAAtVhOHUhBP7mQnkutJdxT6kRpto6qocS3N9kOY0S5qpiR9GBZYE/RSo89FEc5LnGisdYUiKLudIt5MZVS+b3NwOtwVTIfql7yG4McFTxn0aQxNvZm+SDFVLCsPm57bKsnYqKnERZMd8subU2xtwojYn8Ty6VSogZbE/tgjSskdtcMxjnQ2F/FZ1HBVuIs0jk+Zo0Snc30CFJpXKpl0wbxXL/Ee19T0lfP13ufFrtl3/9P/9sQzuyIYgREapMs3uuk10moipCBzcTNxAQDgggDDmYIFjg8UEkpAuAuhNJvVhnmQtSSHMaaPVCvQ9dqI6iZNj0safcsi5GCjZC9LlTE7gfBpubEwNsdmj3llTzIvKzOoDItIt65LtVwIrdhyZLVVaMrSat1E4zTWOlUreZdbp2ND48TW6MTlXMJJqlugwLYfJCI2rbzXf//3iYU6pfvpN5mq9YoMWHWn9L7hUj/v1fHpT69H/ZopvJalmJcqmkLFm+7k/nXpq09N23eHCqXpYIyME65GnTYBMCf/7YMQGgBDFZ239kwApxCnrMrJQBMyiz8FL+mMEFRxEah+02DFH7U3DkDc0aElAx6FJPRrc0jlPbotL7Wv89Ev+/rWqZmtrc7X9fvzZmap0eXlbnmf69Pn3crv8OSuSCaLzzrw4lv5pz++6eu3b//+fmufvvbGpfuRRa0fWnHkErNRbeNN4VzcvZJPGgoVvrGagRFQIopWFN6IFGhAI0urElApct2gZ9FrsNSKrMnHC4GAYhSBqqVnkIzB0huX7OVSuc10MdVJoaxmMpd0V1LKdjrdyutN0MpUMlE+pTOUcVfUV8RMYpat6PMYoj8Sf5hh4Nj9yCQdJURZpkLSw9FW2/VxtC//7oMQCgBodmVW5l4ADuTMsvzWAAERi06G1xiSWAakC6wPVM6sJdNsUUlLoBQhOERuDQ7EWcF2o0Bg2LwjlP5HEMAnyboxqMA0jBBji4GQjzMUi6Uqo7gwhGFjq6C0paMrEar0lTUtDr3uqvmVZ/ucB8qoOMqxQRFZRvveE0TvKNt2CK+eMZoKCsDc2tRGXW5X8losGBfTyDSMwOFmCIh7nSFHg3iaxAlxDgvdxp/5axXzO/gMl95uwXjxKsbvWH0LEmM4j7tiNEtd7i2qVxj95DZ3jyqseap/PT////zJAQRBo7qkiMgSEL2RzS5S26XGgDAYSO1TSjQMBUCMGDSNMcnJrRjC5hxSDjNYaR8LXBAFbaoX0fRZY0Rp1NBLbRmIM9eBrr8wCzW5Wez9swhLb07w5Q0s+U5YR937Fumv0ksis1RxnUZitmVzkq3JodlMa5D0VklJMQdq3T00QjUZtZRu1GHqm8d6lURl1Peuu9Xxu2pPMWrNSIYYvrPS+U3qKW1piNzuX/jbl85lZpZZ+efaWRVo3dqXqS1dpMK1+rTsNpqCnhm5GeXeUFHhSRSxLq85nAt/v42rdiXzVBQxqVymplzuVNepBgVFXf/Qql1UzACAWpI0lDuNAwjqGAsy4YRQCpet+zaHWk9uP9Lsul1lmoy2HEqrDvzgs0023neU+yzQdUAR+bv/7YMQdABERk2P9kwAp3C1rMrBgBEZtVubpuiDISzdeZfcycNVG+u1fW/r6luzlfHRIkUPFEtn5ryRG0y9NVVXMf//xVzLJOXkiiVa+enRmOUSJHa3xqeTX8/5/mfPuGJQqPoutTUYN3QMRVUwDZBaIQdLgtmjyu1xppzpNKIzV1Ky1JrfdiNh5gnkwae4c7mRGO+RfoycQLtTV5zTriZdqqHx9q5lvdYzZ3Zv//+3qks/f/tnx33u2//YZ3lqend//6vZuUa2si/++b3qm7f/7+xoTR6VSDXHhemlHdHUmEIMFQLFidHqtpmgVIMagPgAMyyEioc+Ap9VEQDmlqsBpJHV0bP/7kMQVACAeF1n5qIACFbNsv7CABatqXLEw/ciQ4RZYNaARA+KISHx3itAy2KGG+WiIEOLQpQWAWeRMfyHjALx02L44DxTK5fIYQQhhUJoXMOaO8eyeJ1IkZUMzci58bA5I8DLIjlLICby+s+TBwihOk+mfHWI6RFgJsvExKhNHzA4gZF8iZgSBFDEnx5Img4rxDTo6TQUKH4Dnk5OlNB1oF9KV1JIGr0lGaBiPY4CLmLrNnIAR5qXzU5QmphW5uaLRKhmbk+kyFNa01GBfIuKINspESMzIdqjRFRQV////7ILf///81RNTIxOO7QgwYiBBptkmD9SYwuEP2iiD1prMqsOYyRlsHP00qL1NQUHIetbSQNIPSfJgmQ5B1lWIXuV2tiR2oqxZrU673VjZVudpbFhtHVRQ+p7uZ+49B9wPgf7wqcSq010yoTW3jB9Vdzf/NzLRI714HpFRKw0XUmNT8EjhtSNT/ru59mlYgmB5ourzURp1JKJlOD8WUqCGEDTxCJ10jQcLBKCMbJh+NB1Bw6hVjRpdKocptA2ZJZyUrP/7UMQXgA8xbV2sMQaptbJqsrAwBInto4sbdFjVge0Iynz9q08NN/1LNvrz9VtpWjXTXvpw2320NVfbLsKyKFfD1/6w6+IgeDxZco2YqIWl/WiTNIfkmkEYMvb23vmfqa2xoEiqq5RXpOwFXLPDECsCfCsDIYPy1A0Fy2YoUQKBg8WWaolKBkcz7fqxdCd4elc88uZWHOzmVzv5gsiNzLOG65mfnCKWQy5wwYtacmv58xBX/84EymfnkV8Od8uUiMpEf+3N6V0r1JjNjzOSYtr/+5DEAYAd3ZlTuawAAhOr7H+yYAUECMWBINxsMi0NgIakhIIeIRmUADyoygUHCGSGPDjIQ4oHFsZIEAgRy2KNvLRhAzEtxZCByx2DKJoqUTvL3hDNKFzmbq2sjUUm3LarCe4XJing2OwQ1+w8lLRRHTsSKVUtJKtNOgh9Ziai8OSqBJ+zWkEvg+pOfi/kdZ1Xaa/l29g/kVt1s6HOmlmOcXrV84hjyltSRY7sbmo3RTWFJPztPlcryDvzF+xuGliROKUv/asMnYZljWvb/+3LeVefs52NYbzv6/XaF9GuIS34lMq3WhyvyWUc9DPKSbsX7OdPZ7vG7UpFI//BgW//GQsQaEZAJUciKp1Egg0KpBC4XEEhC6cENKh5r0KlUaiMO3MUkwjd18rhy871KNVdW9sxkQ8Mk9kUSJGZGz+7SzNL2nOfYfskcj0rYutnt8zGj6+XkfzrHWaSRby7wbLNVz+x09/3//frb7zp/51znolG1XxgUKPGswSUMTdQhZwXOTNCRW3RwuNEFJppxlJqWppmEyag4qAupUC0oIlrEYP/+4DEDYAO9VNVtZQAA2YzKf828ACp3wtTMMoIISEWaKi7FWtcSMZVoaO5lb1reIJ4s8WmZS6kWi7tl5nrjjmam5JO4njpfu2ttpr+G4qWbkd3f1w2IBrTXNfyz4xlEIzWuL5nGXqSDjg1UPiVcKcnHUKbqtTBIYoxKgSOxWvWbWxGoBQICQMICMLOOHzDAcECwsEmDAUIMcIzAw8HBJfRgqO0NMMNJhXCaUBsvnA729IsAIMsZuH8pnh1PUkm4SEZZ/EY4axdcRYqWZWB+u1YuNIhxhYVbmzRmdla3jp247lUlo0fDfZlbVpDVBeI5JxCHjHD1DZ4DxTsMKG0dS0nkzHjPKP4CeZUen4Sg+HyuhQqxWBZ7nuq6hxcR1jWWqC/YJN+aZ/GpJuuI8D3jaj5rnDyt/rVI3pmaNLqlY7PCiRL/7u8ef///+NHqoU0WiMQIyEzNY45LK447JTdFitYZwMx8wyYiFIwAJOPH//7gMQQgBuJmVv5p4ACEa1sP7CABQxMZmOJblKl6QAu1kb+GwISc5XGQLKF0SIk6m0f+kPLijBXVdKiE28y8J+5JxldzoFZi7hJ803LMFsnVsFqvBeRmxlY29nbmZqZmuqLfNkNbu/eXRaneeOsKRTJ6Dea8BbZkSwPS1Rl2qAuI8JdQV/1jSM2ZGZqwsXif/6c1xuJCe5/3C3AYmOzpriQHeJ2eIiB7rqAjoKliXzu82pXKM4RYbJ5r1+n7myLKlcLJ2jfamL2rFaxH/7f/3JZmk2QzUG7LGnRrIzIG6WFLWo3KOJFsNoJ5ucHRmYpr8pLFRUVAFBUorzSwsD2HszFLZ9XrZ5EFVLWOU0maVFXFtjqyaoRIFjkuIZuDa8dpNtrC9jq4FaXcw4p9tDmvJueGb5tdLmq+CrVIYa15q1DTfKkpz2OJIfuBb5Tlljsy3BmN2SNS1ZWdkIL978mSQgE9CF8gJTpM0TyM4lz//uQxAwADqFZWdWCgCP7tGs/NYRAAYEgiXRCAokJGHgOZnLLSzylK4jU4ipZTvVCEZ1WRqlI5SrnXmdai0yNVjOzH3eiCzn2cxkWVosximQ60K1mR1Y0YepW0M846UjqyJRGudmMqCKnxKq1sXqueg6TBIRmRzBABUJGk0uTwcN5lFkAMGnMBmSHjUwBUTPmBoQYkkBo4wIHqQiBCQRCMYEtkQoZWsA8KgjiMPWbA8ywWGkZEKoZbkxB02RsfSYVvcaLLpji/YLRiZ1Wf0WW9L7x1yGzRF2GlsmgNhc8utPVukretr8slsLjzOpingCmmYLg5yXWikssXX7i2MUtz0FS1/3dbWAK+Mnv1N1bkMZSyUW4xOVHH5P5yqxuQWsGl016z9NPWcpnl65P0va0u18pwl9MuqEQxy1zVWIU0cuZw5LbXbF2S/lUuV5dzeE/FJi9G6SpXr17czSvyweguxztSzv7HZdT7v9pe//Lo//UdpdIRhA043GniMqqJklElMETSgTMGJOvBDjSGw80Wz5WsSs1qPSNjD2c2y+WNM9///tgxBgAEPmjYf2DACG9qGo1hg0gHd5yaksk7t3ir3u2uqvmJeW3HLk7XjdVM5rb/2Z3g6YP1N4e21F5OHPOvLeZ7Y2o99/j/+N71zrxsyqb1rnLEotpK1WnCxbk4oJQ3Yx+7y7fTrfNdGk0mk2diRIKbbcYnERRBSBIgO84KXwkNSD3LghDE7Elkk1XJlz7EfvGasKImOUiiTu1OjyKo1ZjAIBOdyeNQrOqbTWrglWGwrTr5/mRCeND4y5+vyqRZ7f7Is1y/wm1JhF/NSBqERqeWWRGuFNa7CUs59VGWTZRESH/vxLkUXPgsOMX+IyR5REVSMXdJucpfp+8I1TGm2QIQTuN//uAxBQADbDDS9WTAAPOs6q/NYIA3a152563v5mweBbmIzaszerdd1Kv+DMuP+fVO2PkdmlPd9cwcTicm9JXOHwQoGVhBAjsokmKfGMggXKZ5q0pkxrnNbUmhIOYUjUBABcEQTOw2h6/icFuY4RYRGILskwcwIwyJ8DDTSIiEgBhCxXjVTSLU1epXiW7Ox4FlWxS9H+LJ9TDEjjCH2aQJKtTy2XqXrBj8ujCLefLVDG45WkDywU7zL3KeyORN+4CmqKKv+3bstvyndPFJ+lmJXRRuX7z7Dj6yiLQqlmIzX3XvyXHPC9LJXPxujsapp2ZgWGoLYdGasogGmmLjopiORLItTWMst8oLcpd1x5Q6/N/qnfh94090gkUzfrz1x+I79JXn6e3zuH//7zuw8xFxpbAVuPUuHMty2xOP4io17csiNqcypoP7Rd3bFP/xyq3dyMAiqrYLVMJs35AUE8w4GpshWweu2aGbdWGrUr/+2DEDwAQ4ZtPnZMAKdUwabqwUAUtPgk2wkjFEje8FFlxHRdUz2Lpez5LjESqOTbtm4zzGI7kd5rDndRqLxuEqpt7slnqisbOVz1RsaqY3hMl5nb58fDfrb5zfy2rvn2m1u1RvZdA3eKKuHgpPq7YynnsXm8vJdGJjTkikxJGpUk2MwHlVyhCtoLcGBRYMNkSW1aTTwTDcdhmknbMSCxAXYRV3RWs7nleUpXK5xogKjyMVSCrOiWZysjm0RWWysZ9NleZ3ozo5btNYropVNSzbmdHbQz1UxjNs+qaFKV+VtFqX0tK5nZTJLRbqw1FKxU9tfFqRleqaVcgUwMwcUhkcptjYIz/+6DECIAbrY1D+awAA28zKvcw8EhgNAHeHFmwd9do1hVdpmAI09Bg0Guy8SJoQBeICgUFwUsOHSP0Xwf2U6Zi7cEQUydKyHKDKcmIad6XWLadEs5GqsQsP9eikCxOhpK+LlzcB3pyju0ETzgGtlF5x++2qeXzMRgWtMYyCO2KCvQUmqeUO/C6e7zC1hakfcK9vKGZRKeWY/jKqSkpKz+TkviEUxvZ7ossaDPdzmv/Hmst85nlezz7+88Ofnn/a/P3hc7Yxrax7nh9bVr/wx7z4xYzlkowlmDjYPv//2//gMP4nOUQgNFpaPt9OJZvOE4CJYgSPLBaSJ6riEYImmmZInQLmqHqKNeS9YC2iazjwRJyn2TkkI3iTvzaVCRIhCVS9PQqfCTKGrtGot+fxcjmXyCPEc0RlWkFSvoNTHUomtli0fnIpoa7eeeHc/jlVJgLM7fl5Rgu1Rpcx2KMw6tCYTmjt744lbEeP4FILAinCFtz8duffLOzR3DP+8P3r1OQ4mY8O0GdWfEeNmNBtBi6U6mJCuYMpcXCLBvlqtChNSNaI9IEN5AldQoGr28zK3w1/Ljh9I9h//8o7/7U1XpI1AiCmnLaLhTIH5ovJFK0tNZ+sxhri0tqnhFNS43RpA0myWW5xWZldvplX8ZppHSNUZqUl1sW++YqpxKa3Jbu7du29FozpZWbGVj/+1DEJgAQaZNJvYMACauVaXqygATyZL42HV1IeddrTEWhcbzsyqcG2qzv//faZdHZnsj3yzLQvcr/mHeSMY16g2s7Y7SxvaOd5tYjWeZWGRCCuorF3BVIpjCCyicKzLFJQWEvbXbHAcMxrC/GQ5B009j1iNa2rVtta4i3gfZJ3OQtcp9R0rzcXMVcj7XiMZNisyud6KBYdBsXDptrjaXkhraVEV2qSLiU2aUNMnirH2lrxaBBe4qqZoh3U0MAQSICrrdj0EkyNPkuB0Y9R8wY//uAxAwAG0GbT/mnkgIpNGo/sIAEM4gV0F8o5GfKhiFlo8wg9VZBOg+7pVAsJlCkDAUhBi9H8a4lDyEkIwfsqZZndxYCXoXDHLRnx0PU+y7uEd0jEgp4RQ2RTDSOtXjqkva7Ui6WzujRGeC+b3jGuaXncTr7OaFbmc9WUixsl4rbBq9xFxG3DjlwUDIo7x4D9VvXSufmS203B1r/530IvHzvec3rdD2nbvH+pXFfxX49s7t8/O75hx46sTiEIXHzr6v0XgnyeVrUxs7/V6N9oWf/5dYY/+pWmWUzAyTcebdGopKGrqmEECpBpcYeZrLiztyGn6l0atTlMHQ8y2rQkhSRWziBY47lqOqvX8cyXGKDUNg+WTppb6uWKFgfFDTBUgcLD+GyhhFLVyrrBudeQPj1mg5NFRNcusk1tqzT8XXxNff9Lw1tcqMKKFoZl0LM1DmiqZ2uYhqqua5WKaIQ+jVqW2MsSBSSabhWYkH/+4DEBYANILVDtYQAAzAlZz828AAeNgUICKmSoW0d5ZSxGAIfj8EP9Go4odUDqMK6Fcc1PBJtRbRbTSq/Tb+68NHx/CMsUvt9KOppmiUHiaBDXFE7hkYHjKFLEQmvS5TVzrXuqFRkYrOgrAyT0nvNhIRMRUeHMzJDJkFCTTrbbkbYABUwEAhzDGYOJmvATQjGzUHAiCUxYWLXJprkRgUGQCqCy5ZK0HSZCPaCxoQaIkIS0g5/FyYD2kZ5BijHLAF4on1VM1m86UzAehkIAtjYxNrZCbV9knXLIwrzAjxumOiUljJ3Uj3Y+8ojHKrmyqhaZDkgSMapo1skaC1KyNWC+0hy4evpV3Gw2suUgy5jQ9vYES+bVxW+4EdZ1vc+c1o3cGS06VcGxU48SKXaVNAgcBKqeLEVAcs3/8yT/+qQeBd1MRAwAwBhWprfQqlRqPhFMuRPAcAAQwwgWQgZebteMpkmxVEk+YMGp0+LrP/7oMQXAB31n035rBBDZLBnvzTwANydNTIzKpWSsDVRFgA4ii6kHSdJ+H7dhe7pwvj1sRe9+YJgCf2pm+eN2niNE7svj7dnwe1leNSLO5u9ELMH7mcaW9a1AsWpHkfyzTw5OQ/GIcv17kFOVHu1rUvnLFjGXy1y6CHmcQJc+T5YtdlTyzmd2rNxicoN1Z+N9l+eeedvOnvSeay1r+VMZL9qmw1eucuXauEEMQpXtcu/L8uU+uZ/WmoKlseyqzP8q3se7u2uyytSU+r/1LnceYZWP///9TjqKjOpmQGgySqcmbUtlrcaRpl5qhJzhJji5nATWTGEzGkgsBAKIMADwxDZT7V2xMxaCkScmCaaCgn4cp9AL4PAQs8EewGkSYR8mTx+TdQpRxbFYX01RZk4wolyRygUBOWAbhzoxib5T4kuqX7F3+s4kcm3DkyRjOhsW3a8rHSf0/YkXFZU83OS8h7C9SR/IonSiZobNR7Li7S+YITkwRUhbbXB9MVtrW40CtPv/OsWUm8PvrHrNmNBQ1keuOLP4lYrdNmkv/tjO65+6Um35gIhwacppD/6L//pvjdImEdjhldmdt/vt/LZIwDBDVcn0AlAswxJYQHCw4UacATMAhOhavFlLFXKVG0pdPxmiIlOTxUpVeRkx9NR4LtmcVBHMVpeIS5McR0c0JFPlEm2aC0rWlK1w//7cMQtABV9WT/5p4ADQbNo/zTyAaIpcvocPTlHaVVFhrLZBY4bk5beoplezOTi9s4OMV4xME7g5votM1mhetKai2xW1vHpjWfnWt7rm1819s73bO7ZzvWdZzf6x7/fxbGsb/tbcJKQ7w7yyKCoRo81dz/dq2Mpmh4shJ1AKSGgOCAWIDwkBQSggCXoNWxXUn2katQgLK0GWGGSVD0OGIGGLYMTZ3QpCDEJRif0zKueagLoIcTccK4Ym1cLF2RwgIlcNsZHr7I3sbk/Z2NnbIVIBtnVEZWeC/TjJNmaj96q3UZ5VOISa0VZV6xmTEaPLmWzzdocVwxi21y2MCCJIiyfG18fGP/rWsWv6Y9M/KydD9kzrG5lGhmPu/z/rHx8UzXXxi3+t6+LvDuOFmPRMvLuVYF8RpdF6mf/+2DEAIAPAW9L/YGAKbweZ3WTDeGqaUMwIptNJQeqlqDLQW5gsxp6YFO0ZeUO4xKZlsVq1AMAgEGaBVE1DCewEBGzkh7oDkBbjkQ0SzKQy4ULL1JD0eQNGq0uC+9aUgYkoSpZtnQEBAVELPbUuRlL/T/T/2L+N34yMBBgJrrkaHOBmnq7zdKNmFMmRLfa20WEkk5GNoCM0mcaoAkhkRhigLPnSed7aN3ZZLYa2DkSJGDkuhWGoN5h6BcZnjJ8MZT9mmjEanKpfqarzUlyNSUl/Iuk1PTLhlYpc+eFTQVc0xEK2o4z8OUXhG4ZbBbIv/Xv5N+u/Lz/oOK0lFWYeFRAFrpnHyn/+4DEBQAO0V891YKAKz0vaP808ggjRMDZk/C4aYKg9KiywWExqI7s0FQTDgfAQUZA4xFcUY6KchSqgmdI5aKqu7Ch3UaLociuzIIMSpGox0VCi7qJm7ztcz1Pu9TsrjGchyMYQFGIi99zddPb9v+0hKEch0HTw398f1nh/+D9Dto1kWVTICAiJDVX88rmpHkKDjKWjCWxCsECUzmErxkhQPBAQaPsebI3WmXjLR5hIFMm0UN8cBCyDmI8OoDCZzYea0vYLEp3qvFgJqOEUUdqiqtTKuBMTZVIo/CUlxHi4RGNyY2NYhRFxJaVXyP3sSqmcFOrGSC4QFl46pmG6amJneQKUisaHu3k262tBivm5DYCyhzcrpnrku7QJs/7z83kZHc03/9HzW3OTdrW84k7bi+KQ398a//v3mDqcHsJ9673jFpHPYYCSkGEv////xxu1v3VdTVqmTzsrjjSRBPdFNKSN8mHjQslEgAcZP/7gMQOABd1FTe5p4ACgJ8m9zTwAMCXBgULgRwgWvZY267s7zKQwjLThdjeYUOJ0py2HkiQMKmMhCD1ft4syiSSlJIW8vouMFtamWI3nQh1JF2P0sBVlxbWNvYZLEkTuDEUUDC4amqV0qnqksay22szE4UquILzMmX1otJ36qbWSLH8RgXUS8jI6xv2gU1usWsK2tbzjF4ujPUUI5AMgcUAou1piKWOQwVEQs61CJX/8aj/+Ke77bz3+y663zW1uJogn+bhzs2C5GcyRdRUy5YRk2SEQMWDDAAvilinejwplFzXGIa5fyfHc8PAtp/Js0y7L75F4WlE+TyLiHFAexE+2JhvSsBrbJ7sryzMtTNDCttq7gRn+I7+PqAczg3QXJibvEtTEOTF5IUODCri+s2zn7+sbpu/vfEmMZs+4GFA4mKuCxEYSLhpmQIadSP+K/////+qZ4ppNDAm03E3DcFAKNwYu2Jg4VOuV/mA//tgxAwAEFFzPf2DACnDK+c9hIkprehy/AvZu5M8oUiZBUthCIN1M1aoJ6ROzUY9dmKU3QMgh21rh4mIuKtjNMeLiyuZhAqGpHIfP6zoJZhjfXtP9u2hEEGVD779T/vr/9v/8//zv/U++/5WEIEPnz8+9fwgzGmQXWMk4gw00OJ5aVMyEQWk3ZHMgtAGPUQIpfpwv63RNAYDoiXCoiEw5uCtXE1cxRZugRjWKJCsRbMpbsgYliM7rM5jF2sjI2pykLSUtsolpTur9ATvNZWYGUmcOyA8wWOrLoiaf9vo6zd8/IYdJbG1qf1vfBv2CtZEKnvp2iSgClJI1Bo4WKw4CEApXrjL//tAxAoADQjLNbWBgAkpFDP/IN9AHGyNPmbsQjUStWichJCm9G6zV4bH0ucYzLzLypX2UmhlUez1JT84zHqUWllV6Ny8ylYLlf0KYqEiqvmO7///v1L7oQzRr/38LcttulyayTVHRRV8SoFsFwFAFAHAOBAGAgCAAA+EUMp8CWALIrxAcPqysJ6UPOj6Mn8CbCyB3DF/5OFmMMFt/8kC6cdaH/7mQOhpv8JFmr/4qAdT//6qAyP/+2DEAQAQdOkz+PkAASGRs7cEv8BmRkRlWCaD312kYiCAI/OC7xz+14HcNgfVOJKSfKrZMUGDaA54uS6AtIBYCxlZEvMaJuHMC+gfULllA0LZgboMaLIIKsQYOUHgIcTJPG5MJpqQNFj0RQnh1lEoklLy6Lp/SMyeKheLrrWzM7f86fY+dUXzAJNNC7vzXFf/8yZQTjDpAZCQkEg+HokCQQAAAAQniDGXCCS8d8ImvsHeSzXR/BONwBwTwQUl0f8NB3ghgGAmJE42g2//QNDi6BtMJArwTg+8qdK+D7kOTEFNRTMuOTguMqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/+xDEEwPAAAGkHAAAIAAANIAAAASqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqv/7EMQ8g8AAAaQAAAAgAAA0gAAABKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//sQxGYDwAABpAAAACAAADSAAAAEqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/+xDEj4PAAAGkAAAAIAAANIAAAASqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq';
SOUND_FILES.whisper.OGG = 'data:audio/ogg;base64,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4Rg6v/Djqaqvm64rDKcsC7/t68az+76yjK7r+6osC78q28Kx677z/L6wLKPs+sJqy8Kw2rYx3L5uLL9wHMtr68ox675RtnV8X3gKw/N0dV15Zl3H9nV040c4fsoAAIABBwCAABPKQKEhKwKAOAEAjySJomRZoihZliiKpui6omi6rqRppqlpnmlammeapmmqsimarixpmmlanmaamqeZpmiarmuapqyKpinLpmrKsmmasuy6sm27rmzbomnKsmmasmyapiy7sqvbruzquqRZpql5nmlqnmeapmrKsmmarqt5nmp6nmiqniiqqmqqqq2qqixbnmeamuippieKqmqqpq2aqirLpqrasmmqtmyqqm27quz6sm3rummqsm2qpi2bqmrbruzqsizbui9pmmlqnmeamueZpmmasmyaqitbnqeaniiqquaJpmqqqiybpqrKlueZqieKquqJnmuaqirLpmraqmmatmyqqi2bpirLrm37vuvKsm6qqmybqmrrpmrKsmzLvu/Kqu6KpinLpqrasmmqsi3bsu/Lsqz7omnKsmmqsm2qqi7Lsm0bs2z7umiasm2qpi2bqirbsi37uizbuu/Krm+rqqzrsi37uu76rnDrujC8smz7qqz6uivbum/rMtv2fUTTlGVTNW3bVFVZdmXZ9mXb9n3RNG1bVVVbNk3VtmVZ9n1Ztm1hNE3ZNlVV1k3VtG1Zlm1htmXhdmXZt2Vb9nXXlXVf133j12Xd5rqy7cuyrfuqq/q27vvCcOuu8AoAABhwAAAIMKEMFBqyEgCIAgAAjGGMMQiNUs45B6FRyjnnIGTOQQghlcw5CCGUkjkHoZSUMucglJJSCKGUlFoLIZSUUmsFAAAUOAAABNigKbE4QKEhKwGAVAAAg+NYlueZomrasmNJnieKqqmqtu1IlueJommqqm1bnieKpqmqruvrmueJommqquvqumiapqmqruu6ui6aoqmqquu6sq6bpqqqriu7suzrpqqqquvKriz7wqq6rivLsm3rwrCqruvKsmzbtm/cuq7rvu/7wpGt67ou/MIxDEcBAOAJDgBABTasjnBSNBZYaMhKACADAIAwBiGDEEIGIYSQUkohpZQSAAAw4AAAEGBCGSg0ZCUAEAMAABABIYMQQgghhBBCCCGEEEIIIYQQQuecc84555xzzgkA2I9wAJB6MDExhYWGrAQA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';
SOUND_FILES.whisper.DEFAULT = '<span><object type="application/x-shockwave-flash" data="http://koc.god-like.org/power/swf/pdxminiplayer.swf" width="160" height="20"><param name="wmode" value="transparent" /><param name="movie" value="http://koc.god-like.org/power/swf/pdxminiplayer.swf" /><param name="flashvars" value="mp3=http://koc-power-tools.googlecode.com/svn/trunk/sounds/arrow.mp3&autostart=1&showtime=1&volume=100" /></object></span>';
}
if (typeof SOUND_FILES.whisper2 == 'undefined') {
SOUND_FILES.whisper2 = new Object();
SOUND_FILES.whisper2.MP3 = 'data:audio/mp3;base64,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';
SOUND_FILES.whisper2.OGG = 'data:audio/ogg;base64,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';
SOUND_FILES.whisper2.DEFAULT = '<span><object type="application/x-shockwave-flash" data="http://koc.god-like.org/power/swf/pdxminiplayer.swf" width="160" height="20"><param name="wmode" value="transparent" /><param name="movie" value="http://koc.god-like.org/power/swf/pdxminiplayer.swf" /><param name="flashvars" value="mp3=http://koc-power-tools.googlecode.com/svn/trunk/sounds/DoorBell.mp3&autostart=1&showtime=1&volume=100" /></object></span>';
}
if (typeof SOUND_FILES.allianceattack == 'undefined') {
SOUND_FILES.allianceattack = new Object();
SOUND_FILES.allianceattack.MP3 = 'data:audio/mp3;base64,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DDjAkinqvrffaHptCYupuacokAazVds3epLqkh+Yl28+////////y/uv////////l21E1GqZ0gqAMaaNW8ObYO/mOFBNYbMcFLWs1RCMaaNSyNy+NQpM4RAQ1S2UMqXc6y+QaA0uOdj3w+6PNDigFGb5pSYygzjTbWVhV2tdl0y/r+w7elUNP9GbNyGn+f6XZwy/z/Q9Ls5TDLsuS/0PU2WWWf/zgsRxKlImaAPawAFlljjj+sqaVRqU0tLS481lTUuOqaVRqm7jWpqaXU2WMpjMal1ruNLS2ebq0tLjzWVNVxNyCgn4Q1UwWCoiGQ8NlQzIgiiEHIqE0aBWOAlmbl83PdPhKHEchSJhDBQLhgWJiEsdKFyh0ZEQhGg+MEYoHxMKREMh4bGCMgUXSTSTg2ZFIWEI0HxgRkArRu3/+MkSEsVOHSiNAJ//BQmmGBn//pgaqoMt/+hCaYYGf/+FA1VQY7/8FCaYYGt/9hA1VQYrVVVF//OCxIsnAY0wCEsSOaaaQNammmiqqocrVVVXTTSJTEFNRTMuOTdVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTEFNRTMuOTdVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/84LEswAAA0gAAAAAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy45N1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/zgsT/AAADSAAAAABVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUxBTUUzLjk3VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//OCxP8AAANIAAAAAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTEFNRTMuOTdVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/84LE/wAAA0gAAAAAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy45N1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/zgsT/AAADSAAAAABVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUxBTUUzLjk3VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//OCxP8AAANIAAAAAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUQUdzdWJtYXJpbmVfZGl2ZV9ob3JuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/w==';
SOUND_FILES.allianceattack.OGG = 'data:audio/ogg;base64,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';
SOUND_FILES.allianceattack.DEFAULT = '<span><object type="application/x-shockwave-flash" data="http://koc.god-like.org/power/swf/pdxminiplayer.swf" width="160" height="20"><param name="wmode" value="transparent" /><param name="movie" value="http://koc.god-like.org/power/swf/pdxminiplayer.swf" /><param name="flashvars" value="mp3=http://koc-power-tools.googlecode.com/svn/trunk/sounds/AllianceAttack.mp3&autostart=1&showtime=1&volume=100" /></object></span>';
}
if (typeof SOUND_FILES.alert == 'undefined') {
SOUND_FILES.alert = new Object();
SOUND_FILES.alert.OGG = 'data:audio/ogg;base64,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';
SOUND_FILES.alert.DEFAULT = '<span><object type="application/x-shockwave-flash" data="http://koc.god-like.org/power/swf/pdxminiplayer.swf" width="160" height="20"><param name="wmode" value="transparent" /><param name="movie" value="http://koc.god-like.org/power/swf/pdxminiplayer.swf" /><param name="flashvars" value="mp3=http://sfx.god-like.info/alert.mp3&autostart=1&showtime=1&volume=100" /></object></span>';
}
var URL_CASTLE_WARN = "data:image/png;base64,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";
var URL_CASTLE_BUT = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAXCAYAAADk3wSdAAAACXBIWXMAAAsSAAALEgHS3X78AAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAA+NJREFUeNqclc9uFEcQxn9d3TuzeG3DLiaIOAcT2wdjgeESKeIQ5ZIokXmPXCLlTSLllEeBByCEIBMrlyzkAFxZC7P2zt/+Uznseo0NkZKUNFOlUvXXX898VW2++uaeLvR6ZFkHKxZjDP/VVJWYIm3rKYsC9/G1a/zw/XdYew5QlaSzkGlgZm9jeG9zVSWlyI8//Yzb2Fin9R6J6UyhqqKq8xjOAhljPlAf2dhYx93Y2iLGSErKgwcPMMagquzu7s7yifv3788Bdnd3SSmdyZ/Up6Tc2NrCbW6u09QlqrC4uIiIAZRLl5aoqgrvPRcvLiEipJTo95epqooQAktLixhjiDGxtLRE01Rsbq7jrly5wsHoNQCDwQDnLKqRXq+HCHjvWFkZYK0lxtN8CIHLlweIOEIILCwsAMryxT6uKAoWFhYQEfr9PnneIaVAnneAnCyzrKxMNwshzvJdYowMBgOsdbStJ89zVCNFUeB+3/+Du59/hjGG5eVlut0MSOzv7xFjwFphMFjGuSmj/f0nhKBY26Hf72OMpWkasmy67vGTX3EPf3nEl1/cxRjhwoUL9Hrd2bEzYmzpdIQ8z+ag3W6O94q1GVmWE6MiIlhrca7Dw18e4YbDZ3N5iAhZluGcpdvNUPVYq2SZxVohhA6dTk6MBmM6GCN4H6nrBmMM1sJw+Az34uUrYowYo6SUAHDO4ZwDHNYmrAVjmDGClASwhKB4H+cSC0F58fIV7vDwDW3rMcYQQiDGBCjGCCJ21j1p5hVjLCKGlGbtGSMhBEIIeN9yePgGZ8VSliUiQtM01HVDltnZ4oRIQlVnJxFSOvEJ7yNN09I0DW3bUlU1VixudXWVsixQhaqq6HY7OAcpOUQUa6eA01Y0pGSIceqbJlCWBVVV0TQNZVmwurqK297eYjweI2IpioIsc4hAShnWKnDynI6UlIQQlKYJFEVBURTUdc1kMmF7ewt35/YOR0dHiFjK8hQ0xhYRUD0dGO8OkBihrj2TyRS0qiqOjyfcub2D27l1k7+e/4mIZTR6TdPUlGWPTse9w/C8TcHrumUyKRiPj3n79i2j0YidWzdxa9fX+O3xIwDG4zGqibZtEJH5yHsPcqZr7wNFUXJ8PKEsCyaTY9aur+G6eT7XZwhhJi/5V6AxRrwPM51Odd7Nc9zo4ICUprLxPlDXDarM5+SHhvQJaEqJtm3x3qM6bYDRwQFuOHyOs1NWG59e56OrV+n1FqeXiCrnyZ78K2PkTL4oS1KMDIfPcXt7T/nk2mVSShgRjo6OKMvilKHqWUGdu0ZOLISIiGFv7ynm62/v/dOn+19mDPw9AD29Ua4OIbBVAAAAAElFTkSuQmCC";
var URL_CASTLE_BUT_SEL = "data:image/png;base64,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";
var URL_PROVINCE_MAP = "data:image/gif;base64,R0lGODlhxgLEAvcAAP%2F%2F%2F%2Ff%2F%2F%2Fv%2F8%2Ff3%2F%2Ff39%2Ff37%2F%2F%2Fpe%2F39%2F%2F%2FnO%2F37%2F%2F%2FlPf%2FnPf%2FlPHv9%2B%2Fv7%2F%2F3lO%2Fv5ubv7%2Ff3lPf3jO%2Fm7%2B%2F3jO%2F0lPfvlObm7%2Bb3jObm5u%2FvjN7m5ubvlObvjN7e5t3whN7e3ubmjObmhNbe1tbb3t7mjN7mhNbmhNbW1t7ehM7W1tTfe9TchM7O1s7OztbWe8XOzsXOxc7We8XWesXFzsXFxc7Oe73FxcXOe8XOc73Oc7XFtb69xdHYAL29vbW9vb3Fc7bGa7XFc7W1vbW1tbXSALW9a6rCY629a6yurq3KALXFAJjCWq21Y6uza6W1Y7W9AJy1Y6Okpa29AJ%2BtY621CJytWq21AJq9AKWwG5ucnJylWpSlWo2oUoylWpytAJSUlHyrSoyUlI%2BcWoycUoyUc4SeUoStAIyMlIyMjIyUUoSMjI2gAYSUUoSUSoSEjHuUSoSEhICEe3OhAHuEhHuMSoSUAHKOQnOMSmKYNHuUAHl7fHOEQmuSAGuEQnOMAHJzc3OEAGt7Omh7Qnt8AGN7Ompralp7Omt7AGNzOlpzOltzMVJ3MmN3AF9rOmFiY2trAEp6AFJrMUpsMSx%2BG1JrGVlbWmdjACh%2FAkprCEpjMUprAEpjKUJjKUJdQkpjCFBRU0hjAEJbOkJjCEJaKUdSRTpaOkJaGTpaKUJSOjpaIUpKSjpSOkJKSjFfBUJKQgB3ADpSITFSMR9eGDFSIQhrCAhrAEBBQzFQGTFSCClSGQBrADFSADFKIRlbBAhjAClKISlKGTg8OQBjAAhdCClKCCBLGAhaAEI6AClCGQBaABtKCCFCIQhSCCFCGSlBBwhSACFCEBlCISFCCCFCAC8xMgBSABlCEAhKCCA5GSE6EANKABk6EAhCCCkxABE7CBA6ECcpKQBCCAFAAAg6CBIwEAA6CBAxCCEhKQgxCB4hIQAxCAIxAAgpCAgpABkZIQApCBkZGQApABAZGQAhCAAhABAQGRAQEAAZAAgQEAgIEAgICAAICAAACAAAACwAAAAAxgLEAgAI%2FgABCBxIsKDBgwBCHAqlhgDChxAhFglEkY8DACkWhnEYsSNBG6xeCCSwJdShFCNLnvTIUuAhOQOnUAw0x%2BELSKG2tOyoQU4oSD9GjjFZQijRnRGLXArF5iKALTPlOLSBcwrSg0qWWhVINdRWAF2%2FXjXIgU%2BoQBoEpph5SKQDn2jHQpwSqiiAH5cuKRmIV6%2FchxouqRH4YmYglA7M8onw16AaiofCCFR6KejkvJb%2FEngc6JBOAmwg6wSQtXLjggTC%2FBQJQEOgUHKcuobt9DRXnBsBEJADeStdSDZsC1RyyLBIhQw5Im%2FYmLhhlBMrXswYKrfwgQ6GyWPFj8%2F1iJf4%2Fq2DJ06DA2vwuMO8%2FsIaP8th%2BLlaVx5A%2FPn1hRMI5C%2FUQFfiyWONAxqIkw4u%2FEhmGwGs6BOKOPj0AIAc%2FLACzzAXUciKPBgKpwQ%2F1nAHiUDD7LMOhwSEQB%2BCYl314TAsYkQeLvvslcKM%2FOxlW3b0hHIPLg085Y88J%2B51iD6s3MMKR8LdiI9IL9BjzTD4BPXCPVNW%2BR0Ah%2FwzIgBsDHliUJfgwwo%2Bl1ynATz4nJjmD%2FgMYw0%2BwcEpJ52NaSBPm%2FSMqCefIxahj5z0sGYbJA6us44GDNLDyj6H6OaKo5BeZ4OUrvwzWAr40LMOPYEAMAU%2FuIizDkq28eHpOvi8R4B2%2F9x5l9123TUWyKqtBhfeeOWdlx4%2F631XRD%2BSsbJObVsSRIA1oTjQwEVK9KNTqcj%2BFQY9ewa17DCk9WPVlN2OdloIVKIpkAPpQNLAs0%2F1s9eUTP5VQjqh2tAdAeLg0m4R%2BOq7hbvCHSJOCACEIk8Eegay7kVquJpvYyURoAE9aVJogwPrsDIhPxdnLFwIXgEQCD8oHbJOCM9KLE%2BadXB8HYP6yCNSIPikoGeaNNu88ndK4KNPpABcUl7KnEZ6SM3C2aDPFgQ4cBEk9GhQNABQS40P0HL1sM8Uz16k9RRNX3SJPFLrE6ptL5gNViAh2AvT2A64HTTZwo2dVh1WFcFPEf4pA8BKOgTIvaDTL6wT6bDFrkMA4n6nU%2B1OYb8AT6jLNstutNOK83hjDQcViD6GJjtQCBxewjYAfLh8NKqnvURhUKSnuQI%2BaO38Au1Js1JEOv4BMDsul%2FCR1upzp7WjQ0TwM0YIV4PFjxrMRyr4aQ0wBkCpgZt5SWxB00OwsZvvpAEc9%2Bhk9%2FXiEHA%2Btd%2F1AONF80EC3F3AhnudGutA8mTjF1ljDYOOA4D%2F4vUXDaQrf7oZhjjkJ5JoSeZfOjrNFvYRikvkRk66yder%2FtevxoSBghYMgH0cZEHdgAtjGrPNFp6nhtxAcGMveKHFbNOAfCmBD8GZEJouoRMHPOxmW%2F4SWFrY8B6R1axzIgPdoTSXkNKdrmXBId53Uhec1ElIdASBE7Pi5IDPzYwfodOMfYo4tRJczYyR4tSXTuMQjPVOCfsYRijwgQsCQOIeRdEf62wTAmss6gX78A4g%2BfCCWsVAbd%2BRQz9gskJchIKCBAjFogpGt8bI4R%2FDSAv4%2FLYoY2kSHsbj4zqWBgAfruNBhWKc3gaDNnpMIQz7U6BDqCWnICkwSLa5xDBU5Kd18G48KZiCt0QlLeF8jhUICgS%2BuLWt8zBzgH85EjJrJU0E8aGDNeSWbdRgIlzQo44NKwIA1NCPH4yBH0AY595sUyApzWkvZQrFMJ7nAHj4RwMeY%2F8PPhTEh31UEYxURJ3LGqO00WhxjhjyYhLDeJqABhSL2LnYOP1RBD4oMRD7YKi1yIiPERWNeR7t6HcwcMpzSZQP%2FejB0fKID7vwcU7iVFqoYhBIQNYLkcJR5CXaaAOHHAKMlwAlJUMpFw38QBxL2iT4PMlJ6y1oLVUKwAsIprRDAEF5AFglDXGBi55U6VXpA4ACsyMOW4b1NFPAhxJCAI9LOIAAU6VfHaJlFWGKK0%2BsmU8fn4khcG2LgDsJgUgIgItjCVY3hQ3Bw3yozdOowR%2BhEqYS4iNOcv6AsuoU52kMeLIGgOuwnrWGijS2phQas5IOBSMUUefP1k2ylBJ97A3%2BL6rE74ShH%2BmUIkRLSbCs%2BmMKDQsO1HornPgEBYiArIMDbBfIkZaUtwKZgj9mKxJJErWA2kknANBIvzBooHk%2FeN79%2BLFGB3xAIGko59EIxj65HJZq%2BNAAJOiGwfmmRU6AvYoDYnCRQl5TA0G6WSFhIswWjaWQ9ICHPOhBjx9Isn%2Fc2iS4bBOKfpyIHmhKkUOiF17J3FazmzWeHrGHQvQ1LZ9FFbH3NGC8S9CjBBisZ%2B%2FQ6g%2FJFDIM0dpLP4MJsH5qFCnLsoZAHkQg4xmrj%2FoKwT3WyEZmDeScQVmvcbmEtL%2F4ME3n6m0R%2FLGF%2BEjojsRNGj%2FQAs3dPmUfYXDAT1%2F%2B0IPuFGgY%2BZXLlK%2BXjhCQU5y4qPOdnds7NehjCg4oUwiiBT0UNyaS%2FDiEDX6QgiBrIKD%2Be%2FRAT1MEfIijCD%2F4AQH4gI8iOGBDGvjXFlKws7%2B42AZ9TN9tpxClEa261WI%2BRE9%2BSzpIOGBUasBYV%2FXITjXIAQ5zPEQIKFQEG%2BCO2MY%2B22mUIAc58IFDSjD2IRxw2y3oKRQaMFiY%2FyLJqQ7wcz3QG0zALe7G%2FC0Fih1GA0KRDnSLA85Hs8GHWHmaEjhKA3dOgT4goQHs6Zvf7W2dPoqg2CXhQrQp8JiLeXzXxnCK3vYis5AjroEyyyVtCnqKPtK8ZnsJD15bsmPM8GH%2FYNH1Wx%2Bj9I76Rh5B4ajhH5Ypgjzk4SCHyJzmoYjzWK4tEHK1CR8wWXfM5JGZxoRXH%2Frgxz8ilVZ57AMSDmn603W%2BE1z0o1X9iFoKIMQqyTgAF51aRw7lYoN04GPBVuk3Pu6xDpGone0%2FBvIh9gEPCl4Eo6xixUVg6XRl368fKOkjPiwd%2BDkRfksO6JNuICEeB2UoZvoI1ml%2BMPOZi3PrgxctRiCED83%2F5ebygEdQQC%2F6zQ8%2Bk%2FeD%2FE6TuCcFfW5PDf9LCuYU%2BqBM4R4zFztYPkXH8F2lCP%2BIoMj3ZJXhk3zZwR%2FIyVOum0uwXHQEUIIaxm7mUgI3M9FXQwySVQIl%2FoTyBWMA9EDAL%2F7vLG7sGgDu2G89hrgjZdBKiL8SWBMDNSiBSfW%2F%2F3WAIH8l8Ks1W5AG6%2FdKe%2BReXcY6DnCA2KGAwmJ%2FTPIDalB%2BANADagBi35ECSiAbXUZcoRYG27YgRcAai%2BOAfFGBW5ICYRAGrPMBYWBto9OC1zUWKKiCAzGDrBMCMLglFKh%2Fk6EGRVcEPrglHcg6L9CCxIWCW%2BB7V6EB3qcs0jd22Ud97tWE2HF9AxGF1ZeFWriFXNiFXviFYBiGYjiGZFiGZniGaJiGariGbNiGbviGcBiHcjiHdIhFXQSGKSB5XKgG7rdbwvOFd%2FiFU9Bye9iHEPWHXvgC%2F%2FTWhfEHhnz4hY8GhoMGhjYghVsYCEoIUZiohRpgWl1oA1jmhUABhqwQg1nYiY6YcV04il%2FICh%2BYhUXAZHu4iFzIil0YAp7IhT8gi1uoBrSohQySiVhUigsyBZERPqj4hVQBhrbYhdgGiLnYi6rIhYdQdFwYCq9YfT%2BANV2YgmBYjV8IMmC4jWDojV4YjK1oikiROtagD6tnEMnohcv4hc14jepoZp%2BWit9ojVuIjV9Ijl9ojl4Ijl4ojv%2FIjVwokFyIjl5IjHkiDzk3MpbYGtGohfMoivyohc%2Fohfn4hS20j2Doj14IkF4YBmogAAIwkBlZfQY5kgi5hQq5hQzZhf8O%2BRfhBROYcxAdmYi8qIWKRor3uFs72Y3TuIWHcEVeuJFdSJJE%2BY1IyYXZBoYqVY5FqYWsgEs0GZQeoQQ1llX1UwJFEJZhOQXDIANmeZZomZZquZZsuZZb8AltGZdyOZcywEN0eZd4KQOPwAN52ZdtyQOt4JeCqZaBwAeDeZhmSQhbgJiHeQpFwJiCGQaXAJmCaQZmQJl%2BaUGYmZdKcAqbmZeS%2BZl4SRGieZetwJelKZewoJUdwZWSUW5FcAiyOZvdoA62eZu4mZu6uZu8uZvecAvu0JvCOZzD6Q7A4A3EmZzKiZtMYAzBuZzQ2ZvlwAvRWZ276Q7I4AzPaZ3cGQ%2F%2FYAAK8cCd4qkOvFAO48md2UAM23meyxkPgAAI4cme0Gmc2SCf0Tmd9gmd8UAKbRCf%2BUmc7uAM2vmfykmdBJqczSCMEXGT3VKVABAM6oAOEjqhFFqhFnqhGGqh3mALGdqhHvqh6AAM2QCiJEqiERoFxhChJbqiGVoOt8CiMIqhxeAMMVqjE%2BqdmuAONmqjt1AOO1qj2QAMPxqj7gmfQwqjInqkLOqiSrqi7qAJYBAPTVqixVAMU1qiPXqlH6oOCTouELlpk0YQCdAMKqqlHbqhZvqhSZqmHYqiZcqmFcqkcCqjNDqnFuoOYJCjdmqhWbqnFBqkfkqhRSqlgSqha1qo%2F3JaqE8KBjpaqOggoI4qoX0aqFyqoBExMu34jgUxpm%2Fqp2gaqYdaqG7qqIlaqDMaqXiqp446qYEKqI46qKA6oqT6oo66qI1aqJAaqay6p5W6IFsACbmGEJwaqZ%2FqqKEaqKOKqLTqqKdaq3l6q4G6q3vqqoUKq8Yqq8qKqlAKrX6aq6vqo4Xaq1k4rI5arIV6rH6arIFaqoHarIr6rLoKroVKrYFqreeKreu6rIFqq5HqrYUqrXMqrtVHroVqroGKrnuqrn7Krn7qrvsKr98aqfTqp%2FZ6sPi6sPrqp%2FzqqP4arfLqpwJrZgQbqAbrpwhrpwq7pwy7pw6rsRD7rx%2Frp%2F8Tu6cVa7IXq7IZu6cbi6t1GrHh2qXjSqbEyqGxGqnokLJ2urJ22rI6%2B7IeK7FC%2BqrvSaj3GqlKC6c7G6gd66cAC6chu1sj66lEe61Gi7RzerVwyrR2mqrcuqddC6cza6c1u6cnC6dom6ZZ2609C7OO%2BrUQFbZ7WrJ0e7MJm6KzarRqO6dsG69QG6lza6d1y6Z3a6Z5u6db67Yxa6d%2Bi0WAa6eCC7mEi7KGm62RmrhY67Rcm7l2Grdz%2BrhzGrlpOrlaWrl2erl2%2BrZpurmi07lz%2BrmvG7pzarZ2m7Msu7cuq6p866isC6euC6ewa6aye6W0O6e2O6e4a6a6myy8C6f%2Fvuu8wAunwiu5xLu0xtu0yPu0yhu11Tq1RXu4tbqt%2FVq%2BmNu3QDuwQluuY1u1kRq%2BsTu%2Bc2q6bLq4Pjuv6luv7Eu27quo8Mux8nu7quu19Suy91uw%2BWuxZTu6%2BYq4DXy655u6jSu1RorApKvAjBq%2FRnu9Wpq9W7K9bNq9bPq8Zsq%2F0Ou%2FabvBAYy685u%2BjnvA%2BjvC%2B7rAPHvCD8ymKvwdLJymLpymMKylMqyl0XulAIy3OOzAH7y%2BIdzDGfy%2BJczAQky%2FlnoaR2ymSWymS3ylTXylTzylUUy5U2y9Q8ymy8umzfvC39u%2F2rrFQcy44RoMCaCFYaylY6ylZTylZzyl%2F2ncpGs8u20MpyispXGcpnOsxHU8w3fctrVrw2zayFOqDnzsxxNMshVssxfcqUlLw2yayNK7yJn8xmn6yGYayWQ8yU5sypQLxFqLyWmqyU3KyV%2FcGH98pYF8pYPcpIXcpIespKg8pQKcvAS8w1dswQn8w3h8y138s738F788pcE8pcOspMWspMd8pMncpMuMvs0MwlQLzT6ssbast9VMqREMtp8stkbbzUf6zUcazkM6zkpazh6sw%2Bjcvuuss%2B1subhsprqspEV8HdncpNvcpPY8pPg8pPr8o%2Fx8pP6cw%2BdsxeksytHMztPsznoMz9csFw2tpA%2BtpBH9oxP9oxW9o%2F8XPaQZTcUAzdECncUkbMnUe9BamtBHutDCcdJHmtJHutI72tI7%2BtI2GtM%2FOtNuXMUG%2FMwePdBrW9CX%2FM4gG89%2FO8%2BBG8qDO8of3bA8rcyqnMusbKaurKWwLMiyjMa0PLtWvdNYzatazblc7bleDbpgTdXki6pljdBn7cgFTLE8rM44Lc06DafVy8iBvcnBUNJjIdRDStRDatQ2itQ2qtQ1ytQ76tSMDdWELdVfHdZVHdIGPdeaW9e7e9e9m9e%2Fu9eH3a5jTc5%2F3dONPaVpfaVrLcxtbchvLb1xrdiz3aQ%2BPaRAbRuS%2FaOU%2FaOWXaOYXaOaHaOcbaOevcqgTbOFPdX%2FsU3Qpn3VI53VkH0Vyb2jy72jzR2jzx2j0Q2j012j1W3W1y232T3afI21wc2mi23d1uzJpIzX9dzbhIzBGKvBft3BGt2qg43doq3XpK24952m%2BQ3f%2Bx20%2Fd3a%2Fw3bA166w43RtX2lxT2kuT2lu83NAA7Ov63MD26mEQ7YXszfQ3vh%2ByvgOEvgzmrgNL3RUd3R9L3dpZ3Y%2BL3hR%2FrhO8rJfUzhL37TyCrjpUzj72rjT13TOY7kM67FPg7hQD6kQm6jxw3GrM29ru29GD7lzHrlnd3hU5rlNhriTTriEF3i%2BXzi5JziWrritt3iRo6%2FMO6o6Q2j682i7R2j783iUB7a%2FzrO4PUdwHJ%2BpXTu4bet0J0MZAQQ6QTBKA8x3jZa3jZ63jC650sK54hM5tRt5sTd6Eqq5krK5irt5hTt6Rid6FO66GdO6sat2g8BY%2F4jDlYBMgJigWLa5S385XQc5kuu4QVe5YKO44Qu5cOe0yb83XR9zR%2FiSK4AT%2FjABtaQDqZo6TWK6TWq6SzK6Sva5yv65zAa6HU%2B6Ape6K%2Fd4Pbd3XLt7Kl9zXJAD40mEEAkWQdBAL6OxMAuycJ%2BtqwuzqDu3qKupGgOpAku3wu%2B7oeOt67epLA%2B6nbeEmUiDuJwTWnjHeE1GGHjNAQCoeUQ8iI%2F8iRf8iZ%2F8iSPDtnAoSjf8v8u7%2FLoYAsj%2BvI0X%2FMi35zqYPM67%2FI9uvM%2BX%2FLoUKXo8PNEH%2FLqkKc5X%2FREfwveoPQ%2Fr%2FIs7%2FQ7zw7vyQ5Sv%2FMxP%2FNXb%2FO%2FufU6rw5QmvRe%2F%2FJBb6VjX%2FM9f%2FYuv%2BW6IU9hAAnE4l%2FOMweiwgp2f%2Fe2wAu3sPd83%2Fd%2B%2F%2FeAH%2Fh%2FHwuxIPiGf%2FiIfwuEn%2FiMz%2Fh6bwSZoPeNP%2FmCzwuFT%2FmYD%2FiLn%2Fmcv%2Fe8kAWSIPmdn%2FmbP%2FqYX%2FqmP%2Fm8QAd0IPqp3%2Fio%2F%2FqJH%2Fuyf%2Fi8IAlZ4Pq1f%2Fi0v%2FuCHwu67%2FuAzwuVUOSQU0oZUwP6oPH1E%2BnOLzEQKrH9HstGi%2FPsnrb%2BVtq3SK%2Br3hDfc0r1gMAOyt67Af%2BjYA8GFY79kQoOBw%2BjvLwTDRBtGeSKikdXB6HtMcrtMertKwruJQoQ5W6hI1jQ4EGECRUmLOZs4UOIEd2B0eQu4kWMBW%2BVy9gRYjZgHkUmjAcIULyRKQsCy6ZSpUCXKd1pAmMxpkhnDm%2BK3Lizo7pmDgAMJVrUKAAH4tL9UMNPDQBc64qEkhfiKIAEzdT57OjNFteOLMFmjGJs61iIMNFGbLgW4sSKbh%2F2lKsQZF2FJU%2FiTSiW70G1fwvOrCnYYE7DBukaBir06mMARcThuwepAYAa1vTJC%2FM469nEXhOvbDkaXVnQggMnbjv%2BGq7NxIsN3x2tF%2BVov4lXCyYM2zBi07L%2FNoYM2YGNFEWPW%2FWs1bRo07kTox69W3DrxK%2BDcxxNO7Ht6KV1D3RN07dg4KOF8yVe3P17op%2Bffw1v%2BrTZ6uRHYzesXT33xLwzDDzcxDPMOr56My292AAUrD34ImwuNcGgK9A%2B6sazjz%2FeKDrvr%2FX4ElAwAhOTTjX9%2BjNvQZ3%2BGw1CCWOMz7nRLDTRQMMyPDBFwzj8y78GTRvxrxINO%2FEvBPFScDQGDQuxLhhljFG%2BGum70DQdUdywxf483E7IkGoz6bYbTUuyriUTa1KwJ%2BWKUsoIqQzNyjKxxE9D03xM0EsXuwvzuzH%2F68vPtDR%2F49JJB4cLCk4p5TTMRiNxFCxLl9RxJx5M4%2FmQoDPr0vOgS%2BM5K1QKMwISUTBNKxIjUlM6kq9O3SoUvUPZTJS9RRmdksY57XuVL0plEiaPKq64goxN1Ck1Vrc%2BLUgdO6qoohR3uumiWGFKvejUtTKFrc2EtF2oVYOGfNatVSPqpgxsxYXo17qYRWvWkdTJVFN3CVozIXJvEq7fsd7UtThHb1L2YIQRRscbYtzJN9yY4D1I4ZuCFckdQ0RAYGOOg1jlPHnRcpYgdWYwwIA%2F4nlGAgMQkOVhhbgdqxs3yCBjkbPANcjSbjJSxxCbJ0nNXHTcCSecbgP1uZsN%2Flr2BOa%2BJIWVxx9XVMnSWuKwmYw%2BglF2oX13ppmMM7CBOiLZfra5lLM9EnjgCblyp48cgrD77rtzICOcJGgIIluMlK0lYqkRcmeTHHK4YieLO3LnD44RkCDyE55JLeSxRkZHnRw2JkTlDRBQoJa2DZJZ7k02NkCEbrbSmWSagzCH1SNOLoNMdIZU1pAZAB8r3YfU6UZjBNgeyS%2Bo81X%2BLOu%2BXqh0fq2uFx03Jo%2Fcgi7CETfsZ6WxoOVUoFco7RxOTnmtt%2BE%2BqmCX4rmi5cgjNyCHcDzY2JNNEVInmCNmIHxbQ5xsBuJDSOMClwrriaBrmzgCx64AG3WwgxfuoGBq%2Fi7lMAo6zF6islQGSYYpCGIKNBS8hk4ueMFndQ4Bn3tG6EZHwNP5xB1ViNwiLPI6ddSiBQZogamcsDE34G5EwmugBHwHFuA9b3gbM97OPPisJwLDGyhpnahMV0EK9sxhOxNVFVNjL%2BF1g4KBuVQ4uhGOCnJReJYiYNGkNxIacsx6CDBAFfLHPZJhw34ICN9OyGc%2B3HElfeorCvtUEo8uiE4BCuCYAhjAyCCEo2kIwF9E1LGJ7%2FnPJRIbjCE2NsCK3UkmUNiYCGoxDzYGoWUt6FnRuoEIMTzBDZvQHkHCsYg%2FEEIYf4DCH7CxiT%2F48hmEgEIZNrG5ZwRzESTzRDCb%2FohLPdDCYZuwwxN6SYnNbU6FLHQh6UYSQ4O1MHJBcB2ALAVC0MxjEp%2Bk4BU1tUWCuOOHCAgiydxBjmWksWjC2JgFnmFFJCotcEssngUXkYQncAFpm%2FPEE56QPXQQgxZu0IEJgtAFWdhEHWdwaCkmkYQT5MANrSPZM8gQhBMEIQ7P0KgwTnqCExwhDtjgRTw3UYUZnKAFUEBELZFJ0Zi6wXLffGNH4pEHjt1gEbX4wwk4RgkIXvAa1wAVFjGlx42lQlP4mhgFuQpFDaqDF%2B2A58%2B60IWnQRGdlcoVIQnGq3DWQq6TsF4f5FoLYZgDEXowhOU26DAOAnQei%2Fgkpuxp%2F5OvHrZolloGOaK6FX1i7JNtNIgBLSlOes5jMKWYpTBItokWxG8GtXCYMBjQshmobhNJaBkZRAA%2FBNhRGAowgBGVpUoDkDOHdGQALcyRhPgh4Aja45znQCc6b16MT2iJRx82xkjJka4nypJFH6T1B09sTh2pSCQCTGCItG5lE8SapU%2FlCUSUqAMbk%2FBCE8qwiFw4LBh5YIDk%2BrAIswV0L0sjXhPj6QmOUQsd8ajCyZJAQT3sUY5u2ErJWqYC2nJMB0hzxyqcGjkTpMJhviAebFlQid0tgI6whUKDa6GC%2BKkguY4r6kAvPIRwiGoetbDAxrpgE3c8YxFkqEI0tyi8Rf4YYhPPsAOypLHHVKTCDV1YBElJFo5JxKELhhCGRmthCEPU4pZN%2BMIkfOqJRSzCd%2B4QBiKuZYhg5O8ig3QrVuBqMGXFIxjWmwQqlRWOOHihDFUWxlkJgY0%2BJEFvGf3ZEDbmgS64QXvhIAROZ8CFPEjjLOoIhyGgMIM9K6IJXRDa5roR6BlUgRC1lCwCQBkTy0JEHbmw3iZ808EGI5BjClYBn2tMOXTMs5S35qM7grAxQ6hsjx6QRjwIsbEdcKPAhw7dxmxY3BUe94XfXC5aUouAMlz7dhuhdBUmd7KNQSHGUICtAY7gsFoYOnIt0HDR5hnEHIaWjoc2xDz6ANusUv%2BWJAJdM0H9SzIdbOx2wrvwJOIhawRsIAgKDja0E34EeSPAhuFQoQeOAINPxjiOOciDa%2BmIhHhgQ2PY6wMp6TgJo11bBUe48Ax8aqoWb4uwTISNO%2FLQ2Qb%2FgXgbk0AXtFsLOopA3h4QhsYUcO2NtUDAOUR6wvuwFQKfLAgB59hwlVU%2BlN0mDwpGgAXi0EY2u9WQBquF9WwIu0l64uB0bAHWN7aBUsyDtRwzwAbMqELYtsCv3fi16jzwWgMMXBjyBncOLFfqU7sk1Q85XD%2BPqL%2B%2BV0AP3VhEjesYD2HcWgKE6EMe5M7zRYRDFnu0gz0gF1t7pI5jm%2Fg8AvRwDShYQAL%2BhjhaA2Mrqm1Ke8WOq7bcAIwABtSiDBs7QTd4UY7HtUwCiWOkAbpgD3LT%2FQjxkEbEeW1KS707Ht1AseQqYD27%2FwHffNQ3QpKoEOH1l0LGTjoa14mAFqARuKau8jPmH39oe0AW83iGCTZW%2BpkzJXtABxrYGJTru6%2Bzh1Q4gjNoBHdIBeILH3twgypwg1qIh5lTgWewh2e4NlfzCHq5iOYiPif7oC1yh2PjOV6rAsGZIzq6gm5QMAVoNvgzm26QNwagwTy4lDjqpzkiBIehupR5HI6xAF5DuXppqza7irGLiRwyO40iKLWDQI5pAaQLgnmoAhHjuR56H8mZgRloPjv%2FEJW5g7%2BmKwP%2BG7ocCJ06uhRPMrXyuw%2FKKjULeLydKbuNQQRiUId5SEEPwIZnuDU0xKD5mz57mScumIfMQ4ATQIfu2pg4QAeN2QBacIhuWAV0eIZN6LsqwD3jEqdpU664YK4r2JggcAdZMDtiQD6TKz17IAQLwLQcGj5GnAStKkXJibRJ2KMhOEQgUkARkAAVoAVbGD3JWYVkmpzNm4QS3InzCxd%2FoxB1EIZmKwV7iKMu4L9mWwSUcAdfsB5qUSEo0Cx3sL08uEZTrIVSkAVcPAN7sD1GTII%2F8IV22MNFTLoq6Ct7sJc4cgJZKIVaiCMyCCSJiDmJoEVyeh5q%2FKRU%2F3gGXEQAg8NDBFCBReACT4jBpEuFbiAE6zlHN9gYFdDIPmCk4iMwjiGDZ6gEFgg3URHC7SOeKhAGYWAtA9AkkQg7QmrCSpHIs%2FM04plCjjmDzemuHBAe54I%2FmVQHN5iBDViEebCH7kqCGbMeO7CUPtjCMrAHpGJEYZgHY5SAU3rDxFOJxXseifxAg0Ajh6HCDaCpzVnE0QlEYMOx%2BauneOACG%2FPEBUiFgPOAGjsC1TuCEnrALsgBXrs9aOMm5IKh3tsJ9SIeQrCHeOi7IDg%2BdzC5DTiCPEiFKrMIdWKnaiGeOEClz4yuedA%2BdMCGYPAFb6iERSCeRbAHYZgcfyLIm%2F94Rv2JRsMxuTJAB6eSAK2iwjo8C%2B7bmJRRoTEsGiHYmHPsu%2BBCgCCIB0yKHwnYARBTBzIIrg0gg24wyec0ACiwTcYzyLeYv1Mcl9MTAWHQFG7YgY1xgnjAQwlgPYfBKgSoN3t5go05N6qrJ3TwQHScyM0hhjNgSXUQQnv4PdahoGCogjw4piR0jCVkwjfziSd0tij8ybVLOEmLhzcUAWwYrMmCrBzrhlTog2tLAnughFIiLnSQt6ycvyt4hlqwv43pA3sQyzgsS%2FSbzRslE3eYhBbogk5Qh1U4NLdUB1Cs0VszBLpErwHDxS7QlI%2BMLfupAlI6gVacKjv4Nvjrvk7%2FTEzdY8xRBItSk4A8MISD4rlKQL6Z4xgGaAFFs5SZ6yElrbFpIzgDtAftU5ZJqIIWYBmOMbhv7Do7dEZ%2BsyTdBJX3m4H3K8oKY6Th9LTu%2BxwVclLlZE576DsPUAGYaoEWUIESc4da4IKd%2ByTtmoQhoEE6coMA3QBPPQEVUAETKAM1ixnyfIh4sAOQbMY4s5c42JgkuI1r0IPJwkN%2FajD7XAXIOsoJuzARmNUW2MYABSVi8AIDRdCtVIFaspd2itAJjRu0uFCJy9D72dA%2FVJZVUMb1nDmbRIdFQKl5E1Z7CFZGJLV3e4e%2BW6RFUh0uyNHJCiV9O9CNoQExOpjaWR3R%2F%2BO5Vagpd%2FAEdpVLBECEJ6UnlHCfvDTSydkARsIynpMcWbgGWqixBbBAdaDFMM29JSXTW00Jgn3OjWkCdigaQug%2B6RuwOkWmbmowdOg%2BSuBT9OqGBjqZ5bs1QqXNQ73NRFU1glqFecigNAqH0JIAjEOAPnAYgiIEVIoHT9hCDbtUi3CH5USAc8TFJKA0dEiFGkWaZxCGTsAGT4gDFSqeTFTHZ5iEMpC3GcBYBCixo5GrM7qYXF2IeDg92xqMMgiCPlhPez0wgijWY0VaZUUyyHrDZ4VZbAtQJ7CIa81W47SHAp3Ibn0nl1XCcJ2ROAwXnjRXSkJXs1k1pMVAVN0cWv9EAIujOhWt0hOopXjQT3pSB3mTgA0YXg%2Fwy6zUUYF1CRTsGGEIB2yo3U4kKCSwhWrpuwFaRLAclbq8WCm9DaQLvlqor4JFB8i13W6QTNtL2U%2FcWWorUwtFOJg9AbO5FGHgrByYI9bL2TvdGEpIr4VEgE0AWnrK0ZYRAT0AsWs7WkNN3YPAzYkhqAedBAmW4FIYMHt9O8Bxh%2Fk7gVLohlpQIRjQHrDNVLK1h5mzALXrhhmwABXoqxOYnEmwB3ugsY1hKtkzgQ20h6OcAXeYuQ3Yv2dQAQtogT9oWcMZXPSTSHgrmmewnzqq1xFFB24Qg43JAVKV3M2xzw%2BMhyqVne7%2Fi4NU8ARP2IRS4EzvHMiIwta%2BbcnPfT%2FWUZZnKANC6ISFchvTPV03Y%2BCJWV3Y0VAqTNcLrUPZhcMcqzEJ%2BIPz5VUEUNH32wCWqhb%2Fy9z5K4NweAZsqIVgeAYxQl5UEyWXNbmuawEFE4HDu2AWkFcDxDxDTi4NhlK%2BnVIL5hj%2FCYcLQ4A4iIdrqIQH2M9F8F3EVFn2FUUjBsHu8oAyOOZj7sEmg4IcEAFPyIcZIx5EMOGk%2B5priyRRwUUQjYd3C1AyaIdlCIY9ikhlVAZ1mB39Ek%2F0I6jnHCByFS6NQjgJ8ADrsQBXgzZMFVvmRIlrk4AgCF7Smj8LCAKQQlUaZkS7%2F2m2MQyHa1O47tuA3dsWJEY%2FeIyDnhEGdZO40ty8S1mFDBC4qYQ%2Fc5hcYeVDbIBRe5i%2FcbQHvhuCPcvCjUHjzl3jl%2F2DeVhXYJuHeRC%2FhGvGwLnj09XJq%2BFjnzzXP35dZF3PN2SlZygF2gyGfbS9Yf3fI3gG%2FuGYrKzSGTjfZ2gBEQiCVJgHTlY8T54eUI4cERCwzcFL1eG5r5vGCGPlhL2dASswA7iC9JIF1cHrGYIf0sqJ2lGduqMj%2F3GwrFuZlnmZ9h1m%2FrIxycwU4DXF%2F3ywNC0Ddh1kf04CdEhBU0sCpLMDCurm7jJgPYg4g7tHHdCBiI4JBxYbVpUfUFIHeP%2FsyaJBBK5DABEwuM0xGQMAwqLBrTHcLsIr4GfDhr4DN0YEsR7eI%2BROAuIKBsLrJyQEwYkOl2CIZNxmyqq7MxVSgCA4gj0i5StGgKLMIwUTqe5jgLB%2BUyjoA%2FdMuGeAaQSQaTUOz5pGib6zgCM4AuuxI3DF40KqUMck6vQzaiRtQUOVTo4xgRkIhluT07k9sHgoA%2FjZABdEw2BoNlGVN0f20IDt5DjcikUYgllVAUyrsmdRB0pIAhSY1SeoJHWQBiytgqHanJKDgrNDQSiAAkwVni7Y8WQ5nB3vTXRoiG6oAmklg1r4cRpXyh3Hn27gAiiISZY10wDaGLQkiHg4A7%2F%2FroUOm9cyUJZ7rDsxql3YqoJ4okkMp0Hla1VRKUCO6SOuaO20XARCwDI8xzJCmASCmAdafGODkKgbhwI3QHGCmARCIASv2ZxNSHRvMsodLyZDFx5DwNId%2F7OaYuI8iPQqWKZJS6ZIt0DGBpXq5pdaqOXIMbwGG7zgsgCU262anDTvkRwPwLeqXGu64zmUiwdycz6UIIYuOBn7xrqUmcaIk%2BUat2MJBfA8Rh%2Bgo6OeFJ60WzsDsABJg3UEqDKRU50N6IbQPRkeCrrWCQeTOxkd6LvbcQdE6ADB7jobwpiTaYEdLWuVcJijobBScRhbOBp4iidNmRgRepaAH4yB%2FyuC%2F2iIOwsHc8Cgfy%2Bagb%2BgNgKnbwq0JPC5iRGGJxCCJHBKYaiCExABkD%2BCTtucRfBqEbC6S3oCEwD5IMCZBsuDJNh4CvKEGQD5GciDj0oCBtuuZhaB3tHjAVtaiYBaorcI4bm2GzsIKQqVxCoafXL6fj%2BntVIrbwkMqQehrvKWiC91fnmGM%2FDqERABjitB4bGDmhcBFJAC0kImJ0iCMIedKqj4VUgCmzeESUOHPOj5k%2F9AdfiDmPdtXjCEmH86pYz5ZNknLlABkB%2FSZFd2Zkdd9CGyOIiDFTMHPBADO8iWZ5j8PkAa9bKDOMiD1tmuJ7CbLrCcPLCbI%2FiDZJr8Z0AHMf8arzgwBHSII98m1cQ1%2FbXPocmn%2FeQVJOdRiHLgheC%2FDp0ofjRpTCd8oq7iBXZosGrpBum3FNMxo1aKpzBqnVfTp63oBmagXlgjGdg%2FI6AP%2Bv2SoZOyWbUmDTOhmgTh%2BnAxGunXImm0COkvhmvwjaePpwoKIzQCCHQCBbpD1%2B2guoICE7pTJ%2FAWQ4foIg5MGO5guIYDN3LsWLGZAwAiR5IsafIkSgAJmkn06PKlx3gyWwokRyyeQ3UyFQqUGa9iw4QOg7pr6G7msxY5jniyZ69bCwQINikUqk5oxZ0wt26MYowm17Bcy90Sa1ZsMWdn1750B0YTT7ZyH5bbePWqx7v%2BHfWGVZcN2Eu8c2HGAwTo5%2BCO7oIYkIqgClh0wLIlnku2slx3msDETcw3MDpnatcKzlva5a26fT%2FPVQcyJezYJ1dGxszVmy3bLtV189B4gxs7M6RuEFZbt0uvx5F3vMwc7ejnW93Clc41tfWtf7MTNoxYtzs3M2bkyBMu8mTuL52rV7y5c3uBouN7xE7%2FY0jZ%2BmPTvr8Rt3ru9OGYAY1JhQd88Snnn0DsMZgWgwS9lWB79jG4XYSFHfZcSxp1lF6EDt6nGWcRhhYdgxbe51p%2B%2B7loUn8RAqieOps8cQKOJxyhhzcmorMggyLeB2GE1FGonor3Ycight%2F5B2KQZRX%2B%2BZ6J85mYZHwsvrglSTEyOGOA7hx0kDvEUGYikP4JSR%2BRDBp5pWoXApahdyZCqaaUblIZoZURYtmellxy6aV%2FYAKq153%2BpXnfmvG16d%2Bbfsbp35L%2BNWnnmVGaSOKR3PWZ4qT0BSroi4TeZ%2BiTmTK4KH2NtvfoiBPCaWKl910aYaKt5gnpngx%2B6t%2BfNL5GaqksmYjqfbnSx2p8rqoHK32RgkrrnEzWiauqjO46Yq%2F%2B%2FXpfsNyNSqx%2BptKHLH3KKvhViNsOiWKs1UlKrYm3Mqiues5mx2mV8IIbapbDkluusTLmhqmPzLanb3bQxictsADHVyt99qZqIsPS8cunv%2FT%2BhZvduCgVEUoIIhEQRih8aGAyyiqjZG586MaHr3oK5%2Bsumx23B%2FG%2F9NK5IbYY47xzt%2Fd967HEwraIkg3p4JOCSHXwg8s9rhAAAB9T48PK1TAW%2FOXBQaPJrqYmOryzrPNGSHF8Fiebra6bFk3f0fF9bF3IJalBDz3yQO3AOqwAoAY%2FPwAuuByFz%2FZ1oWHfC%2FeyZOPp49kBpj3t2tVaeu3jQstdIsc%2B3i1d3iSFIschTwPwwj6BAABEP2GksA8fABTBTxgnBdBMp9l5o%2FmTPY7du3QZS1e35aAQL93o0rHdntvpQr7w0AGCArqvOle4qcAnhcSH6j%2FwIwcANoxvPvn%2B4pP%2Fwhbttx8GLaLJPz%2F99dt%2F%2F%2F3FxII%2F%2F%2F3770ws0vK%2FARKQCb8gIAL9t78EMtB%2BtrBFAyMov2xkQRLZkKAEA4jBCOpvgw3MBh3ocEEPJlCDJERgB09IwGxIIgsjVOH%2FHghDAi5whv6jRQJkAz6oqQ8APeAHHNAHgB7%2BQA5GNCIfioGMYjCxiU58IhSjKEUoAiOAU7wiFrMYC2BksYtedKIRMvHFMWqRjGaU4i1uccY1NtEZFVwGG9loxTie0RZzpOMYnRFCZ%2BDRjLGwRR%2F9GMgxLqOFfBykF9OIyC%2FecZFTRAYOdai6F%2BjDdUXoxxZSUEnbYRIlvDsW8JIlvAj%2BeWV5z6meepDHHbcob1aZqxfngue5Il3PlMxRJXdQua%2FuoWSHAHCAOIbhgEDw4wUECOYw9%2FGCxS2HOzJrD824YzPuGO85lVvl5SLmM2sBrXPt%2BpwtkYPL7DSPOaUrSSD6ATUAhAEf69gHJEQSBn28M57MPJbjLja2Zlqnmsy55r6y2bNX%2FsxJb5ulnrDnLe0hKWni4uVJXjCFFv2gDlPo2hDncNGXMe5U%2BTzoPr9pNoYGVF6YkxMsu6nPsiU0nLoZp3XKiZxzDsxr%2FLTOM9UTzexMMzv%2BRA5ArcMzpG1zcyoFKUt5pVCjkZScDgUZRGt6T4P5aKfW6Wk%2Fddmwpmr%2FTKBEJSg3DSo9hCrVpbaBKfOeireoSrUkMGtPTrljVelgtXhatU5Qu2pSbYLVqGKd2fRuBs5%2BiU6tpGNrW0fyVvXENTtzfU5dn%2FNT3eT1OUO1m2GdF8q2xRKpk5vSUunG1bRGiKaJVUlHz%2FXRsYY0qf6pLHMuW6HMPud56okeYMnKrdDGB62npO1MEXvaxTpztblt7WcjBFvkyLahRbVVZ1nr2mjNrbej%2FW1phZtY4vrOuNAMbM0kpy3KXZe5XsXscysW3eNO92HVbY9vmSNT3Zh2u6mNmXd1Cl5pijduI93UeWebXs4eVbrJLSthXemf%2BraVuzjNr1z3y9P%2BNuuu%2FtJZLngC7Ny%2BQrfA7D3wbs2KmfgiZ762YbBUHSydxlrnscyJLHMmaxsM26a5uQQucmzLHdx%2BV7fU5S18y1tiHJ9Yuw2%2BL1wh7FgJX5XC1CMvgPc6UJQWFGEibWmC1bZgI6cYyYxVcouZTFcnC%2Fa%2FRdLwjQcMvfX2%2BMoIDp2CV8Tlmqr4OSyWjouRA2PkyBgzNMaMjZ2q5tuyWb8%2Bdi%2BQUylk3ZgYMyims5eLW1UxQ5bM1LSwNRcNaDQLmsPq9XCb20u0RHtK05hpdGUePbA6M%2BfOz8mzbvasmz5X5s%2BVCXRMiWwbHWeHx4Z2c4izfFI5L%2B20bo10dyedMEv7FNP%2F%2FjR1YnBNWk8T%2BK%2BhBvGPRVwZEjNa16me86qR%2FWBlI3e8ZnYTp3M96B0XOsKHHrW2E8Nt26DaM%2BAmF6uR42rmwNo2srYNrRNj62ine9pUDquVRR2g9yq6sNkttrEVK%2B4VgxnPlH4xs7MK5TNL%2BasH92vCsY3oeA9m3qf2tr0hHnHU3pTi5CZlxu26cXR3HL3UXjOof63wVTK81A5nkKrxPXE7V%2FzVF9dzzCXrbKBCezDSxu7NCZ1zdwM728Lm65ZVHvF862bfyOk3Zv6NmYAPZuBOLzjUP95ha%2Btc5PC%2B%2BpSJvXKb4vPlq0p6jJdO2abP5enyRXlieG0dX1N95%2Fvq%2Fnl2TF6Zeg8m6MTium28rhuwV0bslSH7XMzed7T%2Ffd29bveS371wUiee73NhfGvu%2Ffiht7ro%2FD56rPHOZ73P2PRs8fuQPT940IdZ9DwnvXUUnxjUy8XxpII8ZiRvG8onxvKJwbxcNJ8Zzuc%2B6uyeeuirPnK4e1zuc%2B8S6%2FXt%2Bq%2FD3t%2BynzXt%2FWz7teC%2B27qXDuGzb3ihIj74618L8dlifEEhvzLKxwzzDYbzDQb0sYX03R71uZ%2F1fR729Z72vR2caZn3fZ9I9F9i%2FF9lBOBcDKBlpF%2Bt3Z9ZtB%2B9Ad5gCB788Z7F%2Bd7hAd%2FxgKBZ5B9pqN7xhV%2FXjd%2FklV%2FYnR%2FA%2F3mgwLlgWIjgyb3fc8SfA86fxtRfC%2F5c1lGgxLUc0dmdoujg2PFg2fkgVwDh4pHgXJjgEKKg0akg%2FbHgcwjfYMDgWezfoNBg5Nng8uFg5Unh5VFh5lnhdCTgCAohcxBhCj7g6JHcXJDh6Wmh%2Fskg%2F6lh8rEhALph88Hh88lh9NEhTGDh8AkiW3BhHnrh64HhEYrhLUEiTJihWaDhlljgYGBgYmigXHCgXBTgWhwg%2B9lhEC7g7jXgHhqhZSHhGHriS4CiWIhisThh60HhfagiW7DiWbjiWUhiGVLiWlgicujhF%2FLh7%2FmhXACiXPBiXxgZAYQARhGANzZA12yj1rFc3f%2BFXBQCI%2FrNHKTAYhbi4TNiIvlp4i1yojjpImowYygaGR%2F4jUjYgDWIgziswxQAQArgAj2IgxJwFDrWoDBGzkJOoTrGCzWyBTaGhTPqBjRmojSu4ESuhTVSJD72onA5AB%2FoAz2s0xbwQyhAQij8AACEgjyEwTCsw8rQHVWZ4zAyIgE6ogHao2Kw4yS6I0bC4w3KY2zhYicq4QSeBExaw0mKxCGsQwg0gEiEwD3E0xT0Q0KaBAGwxF18JViGpViOJVl6AzGQJVqmpVqqAzF4w1q%2BJVyqg3LEJV2OZTnwQl3mZViKhl72pU6AASjghF%2FmJS%2BUw2DmZTac5WHSZZMsJl3%2FmoljxuVdRiZcxsP1CCZlqiVfZuZaFiZnqqVwqcEL%2BBIA4AI%2BpMM68AEBmE8dDBE%2FqAEAEIAGzOZshkAtUANu5qZu7iZv9qZv9uYvZMJvDidxFic1ZMIvGKdyLic1MIEuMCd0%2FiYzCGd0Vudu%2FkJyWqd2doMVOIJ2fmcmMMN3Wucv2MJ4Vmc33MEddMN5RqctZGd7Lud0xid0OoIVsCd9Kid25udyhid%2FGmctjONI%2BFIDsAIrTAEkYJIQic8cAMAUGCiEhoIVMAGFVqiFXiiGZqiGaqgRbKiHfiiIMkGHhiiJligT%2BICJpuiHjqiKtqiFGgGLumiLRoEP%2BEAUyKiM%2F8Yojqqoju4oidKojfoojwppi%2FYokXookN7okZIojC5piRqpk2poAUjSOo2EBshDKCwoP7CB9wSDj2QDIlaGLSjiYDCBMZgIOPBkKxaDiajDWzzkqYEDrYRp4xkGnIopmcpFmrbpZtypwLHplchphOij6jjAFtjAL8EDyeDDIThoPwykTX7JZn2YqPyITloGL%2FjIR55FPABmR55FYQqlbWRkPIZIpoIW2%2FmciYQq0BlZIOgD1GgAPIhDERDTFpSmQOKCPJRMpDZOQ66Ln3ZgREYLUC6jqGIGqRblRobhp5rFpp5FRW4Fg8nBOqxTEVgDPsiDaq7OMLgTpPaqR%2F1qe%2F8Q41oYo1kgYwgWayAea2UkaxsaJXMhZT0qpaho49I4QArUpMnka0qQ4lyY4mCgIluQ61mYK3REWbOKRbRqx6RKXarKn9v1IffZ3BIyITnepNjAXLCuopoeo09yhDKuqyyeIC1Goy0eJT2%2B1MdyxMIGBiGm4cbKBcDOhcCuBcGahcGGBbqKRcheY0iKxUWOKlG%2B67JuYsKGxbO%2B4M9yhS%2B6iL%2FKLJ0GbJ6m4qVy7LA%2BjLr6LLsmhrsmIryCh7yqLL0GjIDaV8yyxczKRc2exc2KRc5yxc7%2BYNaC5NYORtdm4NSWa8fybNie1cpuRMvuxsuOoiH6X9TSbN7abNUW497%2FHizHHe11LC1XBC2yDq3XFu08Qu5WJK3CSi5MNO1%2BPC3aHq7aJi7bLq7eXi3a1JyAjWwXlqxGnmy8pqzfji2gDO4vlmPG3t3ZFmzj6uzfSgjrbpjafdrDFmHETuPEtm7FMqHorkXassXamkXbhsXbbkXcXuHc4p%2FnwgTltqvl4u3X1ljfjljw0sXDWezFgo24hlfv4uzvwu359izduu4lwm6pyi7Y0q752q7SqO%2FznkX0rsX0ikX1jkX8Yu%2F8bi%2B0du9LfC%2FXhu8pmq7bJnBblO%2B2nS86BG5e4K7TFu4Fkq70UrABo67vqq7lDG%2Ba2e874q%2By6i%2F58m8G%2B%2B9Dle2R%2F72vWQzwWRRwWBzwVlwvTGRvHapwpxVvteFkhQ1WBA5bvdpwl%2BGwWOiwWfAwV%2FgwTADxSwhxJDKw0tbtXNztBI8voGGwvGkwB%2B%2BFB4cuCJeiCBMwCfewCcMvCmMTEasbCw%2BlCxMtDI%2BxDJcxDYNMMOSQxQZwDrfxDr9xFcdxBc9xSWnuJzqwS0Cw3Uqw1IrxrZFxyZkxJO9FMDgxpEFxWEixWFDxVljxelhwFi9wHRscpTTs9R1vLSYvRy4v8S7l9xFyFBvyFCNyKSuy9aKyS2hxW3Bx53qxXIBxJWMuyjryS3BuWJwxR4AuwYDybejyKPMyTJiyS2BxMKsyM9%2BjMf%2BzBTIjriVHGyb%2FoSan7yCv8b9ac1iQcjb7MgIzslAR8zNvckdI8hdTMjkr8%2Bx%2Bs0c4c%2BSqs%2FOyM9S2L39R8xUDs0cIs0vQL%2FeG81qMc%2BmWs9OdczWmc6t6crgpNEyI8jtj80tos0dwc0N7c5wpiSszICybrCwzKy2vcPNSIC6HsjtzBTyPtDz%2FMEN3hEN7BEQ3sERzKj9XtD%2FvL0B3hEBvBTTbRRpPs%2B56k8Ye9d4hbErThz4fc1GPsEX3HUazxVI%2Fcml1MgAb9Ogi9IR59Db3NEf89E%2Buctq1ckq1dOy%2BtNHGdBHb8tzVdDWjdZOpdUmz9Ua4Ncja80DfsdDm8eX%2F7vEl93Em%2F%2FFacbTQAbZHgDROi3Ry7PRC07NeJTXL4jNHZLU4b7Ubd3VmfLVHavRM37JZQ%2B9Nb0VOZzZlc4RJ%2BzRKS6BKzzUSPxloefZGhPUugjZ%2BlPVsc4RlwzZmewRJN4dgDwRhb0RQdzFiV65iiy9V87FvDwRwg%2FNGE3dUrxTvXrf6WTVuY%2FVKzyJd569dZy5e2%2FFq73VrC%2FBrw0RsK7dmnzJnW5ZhM7VwD4RoTzRpH7Jp3x5qn8V210d%2FT0QgezfGSnV4M%2FYHkjcTm7du7665YdkSY51erxxfb8Vx03dyd8Ry03ZzC8RzD0R0F%2FN0g291h7F4m7NjozNkH5Zk%2F69ecf%2FHfL9EfYv4fa91fsfWfov1ikdwiyczhF90jGf0jHPIgq%2FzjQ%2FEh%2Bt4iHPEiG9Ebbf1bU%2F4xJw3yab3C6%2F3Mrc3KzcxbGgAH7jCJbgkADSAHLjCIfAqm7s5r4Kravn1mD05Olz5YGe5hud2lVm4f2F49iy5OSEWAZhmKIgDPSBq1rCCPOACVRKTo%2BMCRoEfnqNDlLvEjlN5jwf2j5sXXHfekE9ykffzkXt1koO1am%2B4SKRAarqmHBzO4BQO4ITCrKv5sV16pnvEpndFpzP3p2dYqFefEeOcl%2BsxmP%2BzmMc1maeEA1yNEmDS7NTOD8TOtNsO7pxEV2a3QPxOVf%2BN0t1xu55r9wK3UnlveYU7%2BIVDSi0tu6hDipGlAEBqgBChj5aSjxJcgr7vuy3wwgP9O8AHvMAPPMEP%2FC38UcEnvMIvfCzcwsI%2FPMQDfBgBQ8RXvMIjvMVnvMDHAsZrvMcTQwURg8ePvB2R%2FMhzvMlrPDGEkMinvMU3vMtnfMfH%2FMITQwu1PM0%2FPMrnPMTPPM8TPDBUgiCnRAo4pUuKT2v%2BEBvcOwBowAs8%2FdPjwDF4A9VXvdVfPdZnvdZnvTPcwtZ%2FPdiHvTfcgjOIvdmfvTc4J9qv%2FdZnQyywPdxjPRPFPd17wzmAgSTUPd3HQjboPdw7gy34Pdufwx7swTkI%2Ftr%2BQxDio73bLz7aSwIYHL7ji%2F3cT77Y873lh%2F0uDP1JhIA1rIOaa5IlSfsmRfutcmV85zCXx%2FI5vrgfn5m5a3l7%2FDdRl7pRn%2Fppp3pqE3pwjSMBsAI%2FBEIPFEEJANMwaMCrGlMwacAh6MMy0Tl%2B2Xml4fm4mzifx52fIxygJ3Fvuzuxszq264M%2B8MM%2FuM4UZOs%2BNCoAbAH6qz%2F0J5n0Yxz1lzg6nLjwcvsGJzg60L5ZUDRXAwQ6gQMJFjR4EGHBcrcSNnT40J0mMO4eVrQ40Jmzixsf3irHEaRBdc0cADB58mQIJUVYKklh0oYaJQROxpyJEmWCZupC9hzozZZPocD%2Bsgn1GcUYT6McFy4NWUyj043uwGiiKPWiR6wXswHbajEeIEDxvlYkWvZhU7QNI05c2zDj24Za5YokiRNvXr17TepUWrcgUMAHzw4uiPSvYbWGB0JlPJCq1ccC6T7uOhld2LGYCz9ezLjt1cdxMVc2PLIkX9WrT%2FrFLJhzUcyIJ39m7HhyZNGMTRu%2BPFkz2cmdGdseHBoz6cm9AaNm%2FZyv68mwh8ueTNszQ8y4H%2Bsu%2FXHy78fBY2M2Dhj5ZOWPmdd1Dh0%2BTumPqT8mzhh7ce2TuYOuutuw9uoSjzHyqjNvP9AkAnCw9XgDj7H34ptwPsbqY%2Bw%2Bw%2FJTLMHbouruv%2B%2F%2FMCPQMAPts04%2FzNIb7UP2IDztrgkp3Om1oMqbLanaOjSsP8O8W%2B5F37wCTizhTkRQxQWTa%2FHBySSUEboKDbvQsAwH23Cw8wDr8bgQgRxxyPGKvDG7JN1Sj8kAg2wuRiijpHE6Gw%2FEMbGN1HEHT3fqbEhLoe7UU6A%2F%2F%2BISJEEt%2BtFFMDEzca0%2F8eTJyrrOM7SsFRlzUE0n23STNSkHo3KwSOvC8tBuPNkEVWEATWtHo9TBBtVS0FHnGVRrUYpQO4NJdc%2BDEH1LnWCFFVAuEgdj9Ks7a0XVE2ncIQZFDkVaNhW0LG1UWJ4w7SnbiohtdFNOVfP0InfiOTeebh2CTZ1z%2F3stS1S5SHUoWEJUQABfBDaoQph3CeqzJ3c2wfeEcOKJwwAEkrgq13KPwDcPI9nyslF3nikF41KE4WVNwIwFDFms1AnHDRHyRUCELmzxBsmC3PkD3xz89elatLpJBeNu0Nk2JFlynpmyjuV6Utzo4ASpG0P%2BWPqPVGqpJZhgGxJMnVSWpgRop%2BKll0GL5m1InS5OPlmEVLr%2Bt1WhBCbYYDcMMGBhgRq2SJ0gIJY4oV%2BT7aYMk%2FPdAIljsv7q47pCdkqdboYYO18UBNfRIHcIwVeHwTmq%2Bat48sg3Dnd45iicFvCd5GyCvkWL6KL1IvehqhlXAAELqujGX8HicduAI%2F5Kx2rrvEnuHKSvEXLHjXxTtiOHfGcI5y9BlVpI2EBXnfVRke6UWqC1ESg4HkNMMKELhp3JE%2FtApb5%2BoGD1rPvuivT%2B6mHGEVDhGculKlyuw5dSJ4l8W3DjDKLDVxUS4zyCRI965Ttg9Q5SDl5MDx2So5z9yqWkoenAf%2Bb43EZCN7rdBU1TqVGd0SiYvlTID18GEALzEGI73OkOML07iDo2MQMDXAFvFRGeSISxAXwF4RnuEhsCDEC6WalDGJNYRC3qp46FYEMYwpiVLyZxqzthYxKbwMZu3BGOVSyxG1fRXsES5wtfPGMg1%2FhFLRaxiWeEQzTPEEb9qCjFCIYjFf6TCGL8IuY%2Bin3FHYvI1w7skAe74St8C1zfAc8HqOihL32P%2Bstl1KfAtehPbQNDpMHi0Y1DIsAXPOEJGycRjC0OBIpSpNUkSkE7Rj6DEpMQBhxdho1KLEKKYpwcAipXKQuuxR2pgF2%2BJnGNqCAwfeVTHwQ7iAAjRhKCHkEgJFEXrhHihXX0OiG%2BoOAGN3TBbwgwxFXudC48CcYdhghCENwgSkeaq3nxgCD6KOUyYpADgtR75%2FTscYWEdcEeJdxhQeJhB3xZIBjk7MYM2CmLO9ViBxbAlwQ68IVulIMYVbCABf5wBAkgQAJOeIYdTIAvEYwze4uYwUcl0AJCUGSMBv6zw0ahQBF1xAEEH41dCxahp260wAItiINELUCJeCyiBR%2Fd1wzaB5E%2FbuV2MUMXOoLwNhVABh3CQNUbRdONZ9QPG55Ao1fHuolaZA8dy%2BKqQLJBDHdI41SrCGMJOYJJmkEBXy1gYQRX0QIkxKF%2B7pjESicqgj5krwsb%2FYMTJDo%2FrGVPGFDwwEFzMAml8MQOJ4CdBXLQ0wjuspeA%2FCVa4sGFsT3BmOggq84IIo2vmuOOWhVrBAXSzGfeSRpbxd4twvHVMIZDFp6YazVFeM28ZBNs20SAJ%2BwRj3nUwocIqAJMTZWHOExCFt4gxqyekYpU5GJkODMbNgyRh2pRpBR2wP%2FlVbqBsVvVghB%2FsGIkn9GIOBhCFrMK1MVKUb9aLG2%2BteifwpxGwYESxB1OmOABaZcuJJ6AcQbogjqIMWAinuxeCZvoKu5kCPnZAU%2Ba5J7bFIYnDzNOAqVwRzfCSUQPdIMSKERAH50qGdIaFGWbyMw8StGEL9ghUJPIQXQ30AJDiDIJHRBBHCC8gU2UoQMeyANTJWCHeVBiyPgq8h944o1KPGGyIDVBGVx5yTGVRYBdwJs57hksTzR2bC%2BNRxUOqmEt90sdtSgp44CnjiugmHQS5CVdITLaZD3DZAqowmYrcQ139MECG9ABZAzRgQ3MgHaEACq%2BPFBZntgWpqtIgt%2F%2BNjAEs6GDF5TYQAe6UMOPioDMhKaXNY3bmqPZSbmbuEo8MIiAmgbyXvlagBAq0a7iKSwe2PChCv6wZ1%2Bn4pMbWESwagG7HMRBpxJIQv1mZQ47hBkBC5hBJ8iiOXyVwQnZLsPIIHyyuF3kwJCJXxnw9hd3IMwAPJ3EE35IYQUjct%2FG%2B0MedPqHeTwjulWYxBAlIIx4iLht%2BEoCWWzo60kYot1x6GS7ERCEIVzBHUxFmSEWsYN80dgh75NKIE82AzdsIhzEaAdMO6HTsZGOfWOrxZ8RMExnpsLmJ9M1M1CQL5sfAbZm3sxWEhdszxbkLO5IQsKOsIhF9Brkc84XFBb%2Bni9DkKXXHjgDIUQugVQ8PF9emAReEbC8eIBW1mwx9FYELQJhtFsMjvaFTnU9q0MC9MRjk4AnuihAnKeixRMdZ6o5rQA7G6AMHwxJ6mrdl1tfxHX4Yq5zZeG3KjwXzvkyQE2jimxsTJYBKB7bBp7hjlqkPuhETIKwoGDnfFmgE%2BbaHEgZZ9kW507yBIn3rLrRbjfkMH3CWIQdVtHcSZgUG8T4t%2B7soUkELKK58auCPfrww3nYwx4D%2FkP12Vb6uKVCD2JQhz2kji%2BNFx9fuhtZLXSK%2FXkII8won5iN18J2DDdhFWzqCBJmBgzBXgZITz5JB3RAd%2BiMYJIA0waQlwz%2BUIA%2BT5NaQGP6APYcSumQz0%2Foz4MMojBqwRDiABuaa%2FdkRus6rl3UQeQIwR5KYaIoYR7iIRxEDgrswQGhYBmaK3kQoBPsAe586UxQ5wcBigzwBQQ0gn8GKF1AUAIcquKGQGnajd5sq5OCzQPKwA60UBiIIcYOKg80La%2FCoSwor%2FKQKyEyDwGOoAu4oAqi6%2FrsAccwsBaGaMQkLtnCTASqaHHwZQdkwRB0ahKeS6c2wBBWwf9KYR4ECV%2BEwBMmod30ytwGSBYWIbrIwB0Q4Qd14A8sayOGz%2B%2FwBeRcZlXcYR58gRCqgLD05RikD1%2BOTx2C4aMsoF%2FiIQmlyx5Mq%2B3%2FuuAKuuAHn4D8tifiSiwznKES7AAKVGCY3q%2FdPOuoCMaV3OGQ9C9vnorpuiGxGMcCjEgW%2FqALngH8cvEJEhBflidxVvAEgggb0OG%2FukAY7GEeyiD%2B5uH5UKYPoiaL7KgDD81vXsqeZIPz8mAZh0kFHZAMyEIdeg0Gj01mBCIeYGZ%2BwqHXdKAJuKALBCgPhHDBRKsIkwUEEaAUYnAB8KUR8OQeReAZ5uEM%2Bg0dSiEPuiAc5NEBr9Dw7OHEBq8GhcFvygAM8wX77MERPQAb4g4h0LDW1PAolSvCnGBWwoGNcmEewkEi89D0wswNwE8ibZEsgq0QQ3IR5kFPRK4Mwu%2BH%2F%2B4pHlahsSbBHnavBSJoHthOzexhiAAq%2BIQvR8Di3x6SIMawibABCj4qYQ7xFf9NFkHQFttliLZviIjobRImd4bRKhcmmETnbXgPAZxR82DKEWfgsqrRA10GG0UGFYPhD5bxZPQqguJBGAyBFXWqpnLODhRyBXFIv1CRBKsgqepxFVJvolqg1fSrH9GMFI0kcdxAD5iB2h7mMhvrIBFJIX8QBhdTOARLy2oh0RxTwySMIweNCO8SJOKBHrdHGKRBGIJt9kZGgI4MBvAFGl3vD66gFW1ydHQw%2FnZtiITgJxHAA5pom0SgzESG1tLw8uiGKfNFAWCNhdzMDbKs%2FI5t4v9OD190rRJPgHZsyxBjh9vEE1%2BcIB5ecBmKghpjsS1%2FiCLiYYhUkOfULHjysiIK6qASKnt8IfUsABHoMmE2oNU2AXY2oDBj8Qlr8RYXcxfP0Q3KoAy8yQ0WAe2I0fzi4Rn2bAbyYBWOTTMRoO9Ybnum8Q%2BtcXhG0ynCARtKwRMMZsU2QQjyxaiewaMuzDdj85D%2BQDhWkN4CpRbiJ2F8U3e8QQxir%2BMCNHPOjOnYTq%2BUIh7u0QQCsKrmxw2sJmbaxQFZVB2k0x4c0lC7b3ueIdh2QAyQVEkLcQg9EjztBP5AagNONdtu5WA6tBOkkdpygAEuU6fo05nsge2ODyKP7QT%2FGA8BVFMdZBBlABVxBjQpC7Qi2NANlGgRUsFZRMmTHBNlHlQPJRQBUqFddi8IggVDEXNDjw0KXBBfFCFEM8MwS5QFI%2BjEPDMeVjQ0E0IU80ynciCIbDB%2Blgsd2o0t7SEMfRQWEeAwhVQxB8gexvMIwA8n%2F0CsYsr85kGTiBL8%2Fm02S7Xv1GEVdIoGk63dvNRXwNRVnkGAmHRWoLSx%2FsAd0rRXyWAThghO8aUP5hQhhcMcek0FumASCNYdxmEZhAF55HDGRnUj7CpgHNHXOMljtQwbEDMe7SEOHnUFJZVSNckCGNEGfzAH%2F80LenAelqYUDCZU6W7unEJLZYzekMiH%2F0QgfhIycdqz7dzAE46NVtmS7aYLIsczCPZTBczwV01KWPeHWI1LKWdIuTxBLBcpe6qAAOXrHidzD%2FHFWisxW9VzdDK04XgCFzv0Q%2FGFEMYVHUTODsw1W9H1HNuFXVuUgojHf66gDEQOAZ4gcfyGDG5GgIiyX%2F81doZ0gDLUX4NhESTgbcYP4hYWaicBG%2F6gsY5PYkXjB09gWT9JYyOHY42imTBNnq6MEJ%2BBpWoB%2FMZzZRGgZSHyZWeFFmPHF%2BwhH5a2Dd2BEvQAZQ%2BOEkTu3coCaLnFwmagC7qA4%2BJgHlYhX%2F6gGyYhup4TAZwWcztJgFQgDwyhXtnyxCxAD3Q2X%2F9SYR66FiswZ39MtshUAINbILosFFJPJgqDBVhZD%2FzY7m3tQSJV8lwWCpHsFm%2BBFUCNcob69pr%2BViRyrWvA9fryQSil9SoZ91r7DXKdCXfdoAZLNSvZbgZsgRzs4R6Xy3N5Ip1Cd10RKaA4QhQDpTFPxgBmILAMt%2FGMbhcqjIjGttpAakjfpgrkaTx7Ll9yAI5%2Bl8QidM8UgGeDYMX8JveyZxNiT6eaVzT5L3OOrVfjYBG4YIO7QRhGNhw2Yc%2B2t3sz43vhlWXDoRPQcxcTRgVKAYoOCVdJS1Cz8ZPGBgm8gSd%2BMFr9x2AiNToxF08owU8zU2oWFTMRwAnaRSL50mv%2FP1IqJBkBuCwcflkdhLan3METTuZz8xakJqEbFiHMEhILg8E5Se6QJGAVWHhWXHhvXUWGR4iGC4IN%2B04kRC4IBDHY7vZJqbVxsVVbDQ93JeAKDMHkQKoWHq4kEYAFvECjfigz1Bl02y5gt6cL2ikUXZRu1KELT0Z2uC1xLMwCuuAIPKADDCGjOqADQGwWRcADTqBfiIeiE0kd3ADcJGAImsgTPMAD3M4OKHq6BMvZZuAPTuCk32gGTLoU7G0RnK2bIJpk%2FQiQmY4iZYwQ4sEcRE4BOK5XI%2BiQHnkFE7K2VNeodcAddgEE8sUDdMoCOGw4z1AbwQ1l1sAWigKJVFcE%2F9xgpstmHsiAos9AACHaswQmB2zOpcgpsuCsoWknnaLsCGDYV77WKFa1dpunG4LtcTfX62yqVCXgqUfGK%2FEEUxmnD9yBV%2B%2F2mjktm%2F1km1Wnmw%2FIhn2lDGzvZGShUt%2FmCJItutL5bR43HCCsiHD3wvIFxCIIx8ZGBVQ1D04big3hbTwzkLYThuCNoMvFVFBlE1SledDhVIa7i74KG26hG1yLtdABG6ShHQVitSBjWcwKe8JBGqSBtXqLu7OHFhoBVcKoud8IurfbDBGMWkbmGaQhvWvMZ%2B3kGaqAqxEABVBKHTxBgPgzDlTAAjzg7I5AscQosSzADcgpFZxtrIFKBP%2BCgRwq4QbGZgaeyZOXDnUsRrjd6FlkI3GEu%2FXK2wyb%2B7upG72xahWEO4wWaBfEG7uVQrtHXFTLIhxyYKNKkSBuZ6NEQFUhLajKjKXz5QQyywLoZ3M3KksNYb97FaVSbaOWZ1ZSYaNUoLJ9Ain91lhbpxZmQMutdYbCoQyqWgJUwBC4YAZYICz%2FQMsjz5O0%2FFY2UcsnTB3MAQJnwBPiAQQ3wA6SSgJMYKcDZROGwAIkQAJE4Aq4LZDeHIoHawa%2BNXGgINAlIJF8W9YcJZ%2Byp3qEBXoUCJmOqIDIx5uVqXyQwdEcCXs2HZouy35UjjSfYRJafRI8wRbYIX36t9VV5av%2FnkFnbv25Vcu31NvVW%2B%2BrZqmtzKEUXH1r4%2FtnP%2FnCPb0zHEWUSl3TLUmfKh0dHIiBkkmv91qXpULXD6IYaEGOuvvWXYbVW91Zgj3Xv%2Bq9uygSs4iW0IG3xr225D1ZLrtoMrtQLCYYgmGuvCFMPrAW3XvfTwnB3KESaCEYWo%2BCgkUYgmGWrPi3AQNg3mJugOl5dzlP8IRjFInUUb1O1AWaOh4dKMnTDUfZQyVasiRt5IKCXcXUBcIZHK2ApN3ZOd18Pj7j%2F0Kaoj3b7aK4Ks%2FWeh5sEMjfEQdpQb4giMEbqP1Ypf0hrtgpJn4tKt5aLh4tTgct8Oct4hdeUl7iV%2F4t%2Flr%2BLTboLbC%2B3n8e6AEA350CVAqljCfXIWSoLKB%2BKaQeLai%2BUqy%2BLMyecP69RE4%2BhrxeUsAemPhaLsh%2BLfheQNEe6Nd%2BKdqeI%2FLMAyxgBLitIeT%2BK%2BjeKOy%2BLPAekPT%2BKxQfK7Q%2BqzFE8OWC83MZ2Y0C8a9eaIDF3sXF8Y0C8jnCHOj98k9fXiJ%2B8DEDHTyf7kB%2FK0T%2Ffvz%2BWAC%2FLjAfK1J%2Fgg1%2F7NNkMIifbxmfQIX%2BImo%2F8p1eBHX%2FLTRfKJgfK4B%2FgoUfK6R%2FKUi%2Fwtt1LZRfKsAfbJ1%2FLVp%2F718fXKi%2FWK3fIrB%2F%2Fbl%2FLbzfJwCi3C10BAsaPIgwocKExZwt%2FnwIMaI7MJrcRbyIseCtchk7QswGzKPIhPEAAYo3MmVBYNlUqhToMqU7TWAsxhTpzOFNkRt3dlTXzAGAoUSLGj2KNCmABM3U%2BezozdbTjiynZoxizKlViDC3RmzoFeLEimEf9iyrECRahSVPrk1Y9e3BrnILzqxZ12DOvAbP5gUqVCmACC9KFNWAWAOBoQ5eaFDKVCvfqHxXtqyMDqvkunT5gq081iZfv3nVVm6LsnJcvp3r3hWddy9m0nIBC56SDt%2B9Q4ttrJMnD98UADas4YO3JWlkzJQxr%2BaruXLrup%2F5hp7NsbJpvqidX2Y9EDRN2HVlV6b91nbSEPesFTnU%2F294GH2H%2BASyQQDXOiWs5IVAulxlzan2HXRZSRdeZdXldd152fG1XV7dEYjZdG%2B9hpl5oz1Yl3pIhRBIEQC8wM8cAByyTgqPAVACPocAMEV8SBHQFHMheYdZZgeCl6OGroEBCnlyofdWhHVNyNdznCXI4HgZ6uRgZR4Kxgc%2FIuKiDzz4QEKADfzUAcAP%2FLABgAYpnHnmC8eU402bbr4JZ5xyzhmnMxvRiWeeeQrkjJ5%2B%2FvkmE7qwCWiheMZiaKJyllNMMYQqCuk5FD0KqaKxZFNppc7YQmmmgJ6zByDneJpoObb0Saqh2fCSqqHl0DRqq38y6qisgCJqq5%2Fl7JKAYP9DhcHPJQQQcAkkQPDRzxheyhFmiTCGAm20tvBiS7XWXottttpum20ssXALbrji2uLtuOaea4sRmVCLbrva3vKtu%2FJiW%2B689hKThSTs2itvLLfwO2%2B9ALdLDB10EDOwuwInbC68DKPLiyRZIPywuQtXHK6%2FGIvLSyW9CgZsKIER5QA8oXgJpphqzFijgDdSiFl0PD6J2URBYoe\
ZkXIhmZeSclm4FoaV%2BVgXkWhNedQU%2B4SyWJlyiKiBPJewBwkAW%2FSjBIAtTyYVjjHvmBfQay34I1lRaveyhCallmSBS9bs5NBQbihlUEqFsM4%2BrlwSyhQOpIMcJPxkHYo8agyzzor%2BRgXIdY4%2ByyVz2EzmRbZcDdKNNmY81%2FX4WmKXJTRfRA%2FJYW12J6WEONasns7KNuAijzhjDJVCf%2B4pt3VeA7adY%2BRvY1b5hRQJ%2BZbRaOn81uZydY7W52GFHtvceRkfFtJFDYt900NpMPL22h%2FFuO5dw1yZ7z9PTp30lg%2BPc%2Banre31zNbFLbr6pNfdva%2F6CxZ%2BXbv37La6mO8tzgtL8ILGvrNBKG1Hgh%2F5JAc3vMgtR9TzivX2h8Gi9E8u%2F%2BNcACEHtt8pyH4INBvmFqg5B%2FIOQREk3lpGV7zSped0GayhBnPnv%2FGtsHwhPF%2BODoiWy01PhkVi4M5UCMAKoe9C9Iv%2FHgWJeDQa2tCGG3xLB5f3wbcM0HNLfAsQQZfAE5bGiMlDogeV2EKate8vUpxiBqu4liu%2BhXlo2WLzujg2EgYxjEPMGRnXorw5ZvGOaZzgGjvURjfuD45okeNa6FgWO5algF754vP4WDQoHu%2BPaAnkIwc5STyCronl0SNaKriVCyqSfzjkoA6T%2BLXN%2BBB4prykCfvoPu6YEYtoFI8E6%2FdE%2FK2yhowsiyPRAsmwSDIslNyKJb0ixEz6MYVueaAIm%2FRLJx7SdPkbJitl6UrHgTKSPSSgKMvyzK1E8365VFs1dwhBX7oQLTBcCyqtokpvgq%2BVVnzlGWPJQlrWDJPsROH7%2Ft4JS%2Flhc55lqecpNVm9ROpTa%2BDspzh7V04u%2FrCW0CRoDKd5ULYlNJ7zy2Ypg8mXfE6UKMUMyzHLkkyvLNMrzbRKOq2yzo%2B2s4EI%2FadCXUNKuTi0LPecikpXuhR%2BxtGfvAToT9M30FtKc6dH7GlTn8pEkwqVo14p6lOOutKWeuWlYYnpVma6lZpO5aZTyak9IRoW5AFyl4LsZUkZGpahhsWrPgHrRMW6FbJ6xaxWQatV1PoUtj7FrQ8FqS6tWteA3lWNCkRkN5F6w4ou9aJOJalnuIpTj77Vse4UqU89C1StvkWvXYVrKiWK2aEA1iqC3Qphp2LYqSDWJ4r1CWOJ%2Furarci1k3T9pF0XSlkxcjO2uNNsI5kaWR46l5nnNCBo2yraxlK1jJA1rmSRa8jKLpe5%2B5yuS6HrXel%2Bl3LXXWx2gUtanpr2qqi1XFBX296n8HUnftXnbKdSW6vc9im5fcpud9Lbnfx2r8G1ynDL4klkjpOm1VXnfV%2BYX5%2Fs9yb99eZ%2FnxLgqQzYJwX2yYFvkuCbLLi18a3qfKNb36zi1Sus3cqGY9LhYX7YJyF%2Byoh3UuKdnDgmKY7Jim3c4Kk8OCwRhumE01phnF6YnhneyY1dkuNV7ngnPfbJj28S5JsM2SVFdsmRrXJllyzZK00u65MPG%2BW2TrmhVb5JmlOS%2F2VFbvkmXd7Jl2MS5piMWSVlVsmZp3LnlKx5K20e7Jt1G%2BfFzjmvdY5JokWSZzfuOSZ9vsmfXRJolww6JYWWyXsZ3GLuvji9MQ7apGlcaZdc2iOZnuKmXdLpmHxaJaF%2BSaQTG2tTS7WgY6TmqiV83NTOeCs1RnOS%2Bwrb2N5aJbl2ya5T0uuUjHokpR7JofX7bJ8s2iqNtu2jDfxrBb%2Ba2cFOyax%2FEm3MTjsl1VbJtUeS7ZFsWyTdFsm3NRzunYx7KuUW8LlNnG4Vr9sqzUZ0wHEcb6TOeyT1Tsm9RZJvkezbI%2F32yL%2Bt%2FPCYDPwpBRfxwYWccCMvfCoNB7cwybs4pf4%2Bl7PqxaoX2%2B3vU7N4u3PtLrLXa1%2FVYhilbLwscycukoqP5OIeybhHNt6Rjnfk43YOuZo5CeHi%2FtzmQVz5U1oO8JfDnKUyNyZ6t24g80J5o1FdtrNT3fNjOznZQXc7y3HOE6vjOeJhLft5aZ52oMtF6hmhuqX1rmisM1nrcxe8q4VOZaJbduyZZc7ZG1%2FzVuex7duUy8h9UnIfn1zMKTez130CdpCLnfJI94jSRcL0jji9I1DPCOExYnhZI34kn99J6L08ekGX3tCn30nqq776o4TgEMO4RAoYw4fmPx8ADgiE9JtrecDnZfYZqT1Gbn%2BR3Kvk3R3p%2FU1%2B7%2Bfgi%2F56%2BDIp%2Fk2Of%2FjkXw8X94DEOqzxmEDs4xLrGIZQDrF%2F8OB%2FFJV98RN4XIcW4CcROodkcEdcPod5mjdKkEdnkjdeSIEBkDAcctAPL%2BAA6xAKABAG%2FfADJROCI0gEBCggl%2BdmGKV2cMZ2oMGAb8dzDyh3Leh4XUeBlGaBM2R0RfEDw4ALjbEPfNAsYeACRQgARcAPs3MUNOIO6iCFU0iFVWiFV4iFVegO3kAMUZiFXwiGX%2BgOxOANXhiGZ4iG6hAF1GCGaeiGWMgLbyiHV%2BgOOdGGcyiH8QAk8YCHfagOvFAOfjiHW9iFgpiHa2OIbziGZZiIblgOcdiIaRgPoAAGfP4YiWdYh85wh5eYhZDIiWDoDhGnAeLADysjJsyyLMvSLMwyBdECLZdgBVQgi7NIi7Voi7eIi7i4BLnIi73oi1Swi78ojMNIBT7ABMSIjLwYjMnIjLS4BMvYjMxoBT5gBNFojdVojc34jNnYjD7gA7HIjcgIjeE4jONIjr5oBN94juVojuuYi%2B3ojrdoBQWgPyEgB%2FugBCjTLGqgiqdYJmiSJqigCwNJkAVpkAeJkAmJkK%2BQCQrpkA8JkbqQCa8QkRVpkbrABKBwkRvpkA3JkR9pkJngkSAJksZABZjwDSmpkivJki3pki%2FpktAAkzNJkzVpkzeJkyt5B21gDCRJkv8T6ZMgyZBB%2BZHGkAhW0JNEuZEiqZQcOZJNWZGo8IMO8AOPEQL4EAhXGQhL2A9bUAL6sJVK0JUss4mfqIVcWJZmOYWLmJZqKYVr2JZu6YluaYWZGJdmqYfJ8A97yZd96Zd%2FCZiBKZiDSZiFaZiHiZiFGQknQZd0SIZ3%2BYmP2JhXOImVOJlaaIeXWYVzqZnuoA0%2FmAL6MDVy4A9hQACrUwKHgA8vcJrWEAKQgA8uoIKNY4Dbl1GEJFAyqJeJyZu96Zu%2FCZy%2FuZg36Gh0J2PJhUtFJxh1gA%2F0sDRCoQT0gA9gORRTIJ3UOZvio30CdJuhFIPWAQa7GZzjSZ7laZ6DOZz%2FtTlLkxVeyuWDvmIDW1AE2vMCW%2FADRVGf94l9K7idIPSCkPadDBKe50mgBWqgvZme1rSe4AVMnbcWtUZFfjdWLFicnXVN7DVQ4nmgG8qhHJqg8HShdYecU6WclCdbEhpYFGpuLpiDCYh3UzegHSqjM2qeHzpSIXqc7Zmck2eiSfWfAKaiBseiCIhOL1p4MUqjSaqkiWmjp4Wjj2d3X2ekGUF%2BGAGhxISitBWkJjekElikGbqkYSqmgtmk9PWkOhilqDelGFGlF3Glb5SlQNqfWtSd1BWgP6KhY6qnYVqmMHamE5imxremF9GmEfGmGNR6ULGlotelf%2Fqlurmnkcqn%2FxCIg0QKTe4XE%2FCne%2FJHXomaEa%2FnEbF3FXVKYXe6Pnkqqam6oX3Kao56qTsIaz34oHz3V3EKYosKfI26oBgKqarqq6tKqRVqqRYGq%2Bwmq1H0g%2FJmqzyGq%2Bmnq%2BZkqsKDqr9KrePJqmjnqsQaqO83qBFRqBBxqIu0rFzWrJ6mfqBGqmuXm%2BA5rdXqrggarCvaos%2BDqS6hqeO3e7RGq%2F41rnxWrrp2rryWrjC4rgLaru%2BKsIZ5rRGYrVJWrAzXrRDxrQ8RrvrjqRgBqlQRsNg2sABasHiasCHLmwtbqV76qtuaqRFrFvkKb8kqcf3Kaf9qbRuLbx2LbtGKQAcrsjvbl%2F8kK6wmq60jSmwXyHowi2sya280i3E2i3A4u0c6y7M867PyOqwOi7L2qrILMbELoQ7B8DEmerEXkbEZIaoYwX0Y4X0XoYBigaRR67Y9G69COq8nK7Q69RfB4LJ996O3OqdrcbYXkbZfkbUJMRFQ%2B7YJO7VyW7Vy9rB3d6xlUbG%2BErYRMbYYUbYX8bcREbgQsbYPUbiHC7r%2FkLhcOrdBq6MkyqNga7TUhrQWp7RNx7Qo57RgZLihW62jy6ila7V1O1opta8etrr01rpL97qyF7ukN7uXVLu2%2B6u4m6u6y7hXqxL36m4smxGR%2B00FqKD%2BCb1rNbgI8bnMG7XO66zd61v%2F9Tq934sQW6sQ2AsZwUtxwwt7xTuqeyu7H3uq4ju%2BcUu6iytpjSuljxtReVur9kuufVtHxyt8ydtRy6u%2Fkkq%2B5mqcUMq72lWiqmvA%2ForA5JTB68fA6tS2D4ywEQywE4ymFQxfKYW3Peqj2gui3NnBvvbBoeXAIqynJDyzJgyoKIxqvkvA%2FBrDrLvByqTAHoy%2F0mrDIYvDSavD9ArAairAFvS7Oga%2FSSe%2FoUq%2FZlvEMnzEOZvEiMu%2Fueu%2F5%2FvEghrFr%2FXDwBvEwjvEMrXF2sZ%2BpKa%2BBhG%2BX%2ByuS%2By6TUy3pzu079mjkwsRlXsRlxsRmcsVccxtc2wXIWzHvorHxKvH%2F6bboOLlxxjswjcKw%2BbLW4pMEHXcyM0bxs87xupWxtx6xvg0xVpWxa53xRr7rBrVxU%2F7ybcbyuU7ygpXyil7ykbltSwMyA8hyBFByBBhyA%2BxuQ%2FRuQvhybOcqo88v5G8u3xst6lbtGscv218Vm%2Bsb4jMb5yMDsvMzJHqzFgMzdHLwzt3wdV8yU6aybeMYt4MzuF8w7UswZqMy9KbEtQ7EuybEF37terMn%2BrJve5MZPDMyPI8puPsyvascrmMtbv8Vb0sGEUgB1PQNA6gBBk9Bf8RJhX9PZUX0NtLp9b8dNzMcQZdwwgNrMRJtUAbzZPsnrOarIHAD%2BsgmovBhPzAD%2F%2F%2FkBxboA95UzXZmUPYXFjarHEmHXUordIQTM8lzNCm59DpC9HQ9oMaYA2H4ACHwA8vAABycA9KEAM9wD3iMAwaoH9cXV7rbKbt7NI2pdRLvacKTbZZrLlIjXvom8%2FejA78jBAq5QAE4ACXAA%2F%2FwX9bsAWP8QLUWQRjiRTNgM8Up3hl5Q0Y9dgl3SNvDdcJ3dTWNtlPbWiUWNkeoc88UTMR5wDWwA9hAACnqQ%2FigA%2FiUAL9yA%2BoGAa1XdtqQAvIkBO7zdu97du%2FDdy%2FXQyxENzFbdzH7QyxAAzIzdzN7QxL8ArOLd3BPdwNMd3Xzdu3cAvYzd05kQUpndnnGQl00N3%2F3K3c5X3dw43e1y0x6z3d2u3ezl3d8d3ctPDPSOEAWxAK4sCaW%2BA3SrAP9zHbq0gctn3buU3fzK3eCY7c583gxw3dD27cCy7hwQ3fFR7c3x3eCU3eGA7cDu7hvU3hIc7b7U3ivX3hJ54T863iOWHfghEYKcAPW0kUDbAOrJDYRrjYqt3YoQ0VkT1Ync1DPo62do0Row2j4L3h5CnXlivkbb1YoH3ONlbaP%2FgC4gAHS8gPfKABw2CEL%2BAiH8gKAKAG%2FKCfMUfSrEzUuGXUlh3LtLvkk8rSigvlZEzkR67XfH0Q%2BeQArqAP%2FZEOKUAAocAPrCAO8MDVNI0L9OAKH32i%2F2muqGtOYG1Oe0autpgd5zTa5INM14dcSDC9o0R7FBEgB6FwCNPnAKV%2BCGhNAGkQCoGgOGiu1n7K1g3r1mCa6Um66cLc6cZs6WKB1yOB5B2h5wbhvvtJmyLtt5Tefb%2FOuZie6x266xAxzAtxzAoBPSfloMjqy6sc6QI90p5NaNAe7SsN7rjJnqCOuqIOc7%2B8EMFM7b3%2BEMVs7c6OzORe7gY67Q9R7Qpx7YQb7DiR59ZrpamsZ97%2Bqa0816%2BM7p%2BF6%2FnuoZvNxOLubQEv2gPPqUeH8Bir8JYr7wthyFZoEJIphSpBhQQxhff%2B8BB%2FoHJdhQsRUyePDim%2FzZ%2BuTZQs0%2F%2FdDukJL%2Bkkxux20Q21IPS18AxRSBCmIvTCoBLCIPTdoA7hMPThsBBkow7kUfXYpeQsf5jjbBFDXwvdYPQIkUzqgA1C%2FwxOEQxCL%2FVHbfN7LvNub8DDTrElv9cE76YGr2njWvXuwPcGDO8PQQzkcOeY%2B%2FNO0QctIAGJLwEeUAVnP%2FOVwAALcATbqg45sAALYAjx8AwbwAASUAuaVR3qEA%2B14AZOP%2FOj%2FwdYr%2FXmjmPqQAgzoPgS0AJxYPoHkUzucAWX7wbxEA4tsAASsAmB%2Bu%2Fge19RKAzHHwxnDxvhIAzJL%2FD9HPY%2BIQ3BEAzdUPcZL222WvXPMAndPwnCEP1i2%2FH%2F%2FSwZ3aAHjTAJa2%2BbO%2B8OXYAA7w%2F%2F738CwiCFlfD%2BQkD5M%2FD%2Bmf8MFoAAACGhljp0BQ0WLOasoLpubjZIkKaOoR0LMAgexJhR40F3YJL9AxlS5EiSJU2eRJlS5UqWLVVGAhRv40yN6sogwJkT5wxhFw0Cy0azoDsnOMvEC6cC5yR3QjWWu%2BVU6lSD7jSBaXpQ4qQgFiR83RBkUVZ3hr4e8TnVmUKM7sIRepaWas0gX8feKjdX70Z1zRwAABxY8GDChQ0DSNBMLk2CcUTotAClJ1VvtvbudSesSiqJtXBKiHtZNLooxhaPVlcqZwsybnTk7OJOXSWcQppK5CsxrboZ%2FjgNxXtmAYHA3bgTDk2F0wM2dfEWGUCQA%2Fdojh5dXseeXfv27TBlUncXJ%2BcGKFxM5Eyym5i36Rh1u4NiFGmLpbLbL7yvGyq66bjv4z9tLquw0iqcKnRCsAyC4ukDpyACnGmtjDbJAYGBqMOoNwTuygtDvfr66zARRyQsMQjdCycJBHMSYZWsnKrMQ6HU%2BWMDAzqRrRYGELAgNBmnKu1Evdz5AycVwpknHnWOgM6DbmarbR50aqkFnRetROeZUlLpBkv%2BNPwtuOEu5M8dbEqpxZxr2EpNAQQ8ECYcdQjZKZxwfuzoI%2B725LNPP1Pyjjp1hNkAJx2CiSeebo7IqRSC%2FyTqphJPugnnSome4dKe%2BBA4Khz6ENgkHmG4lM2gbk496NRuoAoH1SlraZVSjFTFcMAr3ekiJwl04GIGN%2Btj0MHiAlTHnTW1ElOCXOTSzan%2FNByLl%2F8%2BFNI9v0jElkQTp3LnitXi6KNCnHIwRyt37NPKG2LKfLS%2FUhc6d7Fi4zVInXA8wKkUJXXkMa5iT5uXWXenzSjIH9GJJw%2FlNmlunlSqqIIMOWlD4IhJZvhqBkIuUmcSHfBVQAQdKHkUTOCEI85KT5J4TIIWmqBFNi4eQyDkJLro4DMTdJDTwzz%2FBDpoobELdLTwcNpAGLJq8WCGLgZSpxaWaxahhT8ucqeUI%2F4KNaGMIOTz1KitETiBjCfVeaYFE1TwRaJSTDAhB2yI%2BQPuPJKQwIIWTjBhBuasrNuEIGq96kV1PMkpiIGUnEQ4A2ZAuEEEHhyKISrl9KnYcGqphBYv1QkG5SrrdaebWnxBOC07rRw0GC%2FRgXYeW1Y52yA777R99YJWR7vK2zNHR%2FeFrs22%2BMK2dVYWCXCCoptE1fEWJ4b529wQQ1Lp6aJndqkEHWGuD%2BcZX3y5s5bry3xmkUWUJv2ZTQzZRBj%2BgpeF5vWj3tECbMIpxRCo6x3UIiaRPYMIY3z8MV8punEljRgMT5vICQNyEAdPoMMe87gNxUQgAejkZCzu2MTyEP5EHN745mRjKtYihIOgGTwjHjnoIAIex6ScGEAEPauVdYa2Qx728B9FE407huAgBspPSWg7wYoQYIgcFQonMeTUfGpYwyPw5xnLU8BAQIgTEcwtDk3KiQ6cyBQrMQoBsQFP4QwSj1y9SRjfQcc83GCCI0gsWJN71CaCYAIFSEAFRyjFbbrRhRYsTwQ56EOlFsHHmp2gBbIoliyqoAIGWGAGZYiIlRahAhX8YRI5sIAFcmCIi2ioD2VAAQNEAIXQQI%2BTTLRXEDjpiXjUogUqqEIePCCBGbTAl5u4TTBmoIJHcox4xkMmYJAnFHeQgYuZtGIOnvCHuLjDExjLiQW6cP%2B2I%2BTNITjpAxm%2BYoduOqgWdqCZBeLwKGxwAV%2BfmUEq5hFCXW3gGfzagB0%2BJQEo9AxtT1ihBIaQi9vUxQKTeIIIW0BKmjjwR%2Bo4EIJYQ1D%2BUAwBIrBDHJyYBNnsADpB6AM6ceIGJZksWbXIjBNFEIcuiPAI7siDuCQQhDLYQUMbOEIVcJdDPfnQpz%2FlDhAvo46vIYCk7qlKF6DTAjHgQVxJUJIZJeCGmOakU59iQBX6oCKcLOKExLEmTk4wNztkMwge8MSmqiCbZxQqZUZT4%2B4%2BVYXv6MZe7pDJHR%2BUNRFCJhVuKSqCumCPP0DRAKWYRyneqROeNKewCFAKFD3RFA3%2BOW41EXHH1wxgByWFI4kIoEQtkSbCE%2FTGAHS1kuRO8KThhSiZyFwmTTKLk5cWCK%2BdcaJODHAUoq6oFG2UoU5ymxNguqMKUDRSNzaB3Hvu6Ik1jI06pKEhnaggezvAiQWgqCwIOVRG9urCCnXigbFAaTibsIc9FIaAGRCkE3GAgjTSG1G6lnCJX62FHMXqi3nMwyz5skct3OQkd8xjEeM6F550CFQGN3glQv0QNmjWBzhmJDV26EIqrtGOA1cMOO8kRH%2Bf8c6rMi9R6HgqfouFOLKRNSeGmIf8JsFFbMTDEOPyWVzR9k4mFqQbzwCyNIAcDr1KJAjQmUEcykCzMtj%2Fo8Mz2EQlmpBd9%2BXATQrIgeIkrJwyVEGEPItHkcTqhjI4kQsyoe4MxAAFEcbGHULASR46qxRQ1dK57O1ah1dbLDgjIA5wBNFrkxnbmajjNQjg7EyaaQADjGwTXH1pbw11hRygI6IIIEMnuMAiQhhihWWYRy20i4A8vE%2BE2Asv89xgOueeAH5DREALzBGPMkDHBITwmAyhIJvAVuG9CwAnAw%2FiXRkVuBZ3O09O9kwxJxXrxtFZUKgX0QVsIuAKJTXhSd0hLjdIyUpFjYM9UjFgzD5bOgf7mYPVve6RQHgu9oLBSCtspXe5wx7PmIQYduBEFaCDxfZcUFGiGDYEkPGO%2Fv0%2B6YrF6uI3nc1en5rEPMyY6DQSiD%2BqwclkrUSGDnjA4x7YgCfsITnKTYIMSXhGejeNacLuZBO0uEYfFjEpdyTrjfEo60XlGQ9CiHASLR9OKdIbvfbatwXdIMY8bkK2BfZZzvaic6j4hYD0ALkbNJvEh4cDyXodU9DZInRN2grOeWNEGJP4gzDsMScjVaqoLSCy8yIqnVCLMA%2FpbSNH%2BbcIQtgDOBrSFzo%2Bm4q1T90QFyzF8iQQp89OIh%2F2EIZwRLDAokonUUU96kaIjaHNpYLIpZsErDc0D4rB3dnj6kw5ofOra9s3TKLbNk4QkZV4CNwN4ib36aGN7gWz2%2FcN%2Fna3gIpa24PAD3PdgILjYniEebadIPABG8Sb4g5K4KQFWRKdwltMjJzrwCe0xkkVulEoC0ym4lkB3Qp7HI%2FjIgi9JF%2FQvScRByE4kQz2mHFOKqADN%2BRXIpFHIUkDtYKIB1hrMjGDHCt5NsixLzKIh1tQh1TYEQWQJ6ebM%2Bmxs646IuPCiSuwh2fzPq3wuq%2FTFsWYCg05iraoN3dIBTtIgs9CABOgPBPjD%2FbDiS5QkoSLBzfAiSdoinmQhkXgAjFqlNKhmcnCHx7JHjFhgGAQBixKAiiAgoTCiVSIh6LCQSvhqsxrINN4qG7QgeX5A5lojqsbKdKjrekzN4IQFxW4%2FoJF2JTWMynY0xBC%2BA53MKPbG7c3KTfU472e%2Br1A9Kngowpc4SLWshLPiLVNmAel4hEkQIRncwJ7gKCLYq142JQSK7jp6zCEy76w2r6cIz4EWh4VkBy0yDGLs5fPSkF3mCMVGAHiGjlh%2BadCYbSccEB1AC5d4QL%2BAEASOjQ7JMBMBDrKcYcn%2B5Kucge8MEMEQCwLhDoM5Je3codOEKsUwYkxFEHXIsESrBYrgbUguBJzKIO088UhukUnWq3ZIrXvsMEzUpJfXBweRAAfVIc8UL6vyBcjzLgcyR9%2F%2BcVguKInYrQYssKi0kZ32MKyM4jNQw1xObp4MLYV%2BgM0RADb%2F1BABFuFAXuGebCHNpLDbBMdTDSUYhGVd0IEhxkw5ymLcZFIBQNEQZTJoSFEbmExa0MYpIA1gcCGMVqGdlAEnEiCuluKeVAHc%2FgUTewCo7SHiLKNZAmGAsu%2FseK%2BNNSK15CAdyIjwrE4%2FuAqFWCt1UkO6ZnFyQEssaoCQ6DHXIyHTbiCQtIJO5RHiRAXbbSSJzCKYnw%2BZLSvo4DAsXPGeYDGpJDGHQG4g6jDx0ia3RjBbjyMsNMIV1SOZyALjDuoeXgCW3ODVJjKGWxHAowoHByU7NvBHpwHa6StRVAGMwqkZkRCfumR%2F0MZJ8SimooDO8iD3KRMhJQJhZS3mXBI0f9ImJyYATvYBDegs%2FJrB4rByJaMDhb8jElAh06gGdGcwzGJh%2FxDACighEXQkBHABhZ0kw0QIOcUgUkwhJ0Cj96byfb8k5qcCnXYlMnBTeq6gnkQEwTog2WghXiLNTkpKhXYhGe4NE2UAEIQBorIRuCwv25IBQ2hSlG8FTphkb%2FhyhehPvSYtURxB8kBlbIMgnhYhezKr4%2BUj1qYBDtAKVrQAzqrghhDGWFIkk2RDrx6Bpr5A73UpJ1IRjziBQNDGhfqsz4wymaUOsP0EYQRj4tyk12zFm50zMc0QWdZBecaghqLB2kQFwaohfEDsA8UK8%2BUM9C8wXgkTXp8AntYOub%2FkxI6%2B6tmJDx3gE2ARBlfaMZFeDxhoKpNeBLe1MLf1DwvfChzEALkygk3kA3mVEPUG7HP%2BBTmkY3rfACouTSdkIDyGlFlQ4ex5CIcWs%2BYdM9QDaqYwBCGED2Jyp4%2B4yXxmrwtyiad6BQ6y67LMrLx%2BJWLYrhRtCKaQYC1Kra4Wggzio44UMtDI0uSi4extABPSA06G6wkWCphcIZiMCMygNGa%2BYNFcJ%2BcqAJP8ISi8oCOFDNj5EvqKgNboASaSQ921IFnwAbgOlIEOMyFCB2dGIsnjVJv5JalizUouAI6MwAcBMwycB%2BaOQG3izN3DE0zRaHSrEc1tb5a0AwPUhSa%2F4ECO2iufpHNMWlE6BCBRVgFJrGh8PRT3zQqhiyI4BQNtKmC4bqodaqos1DDr%2FC%2BY1whA9iAMtglFWCOMJQARPiwvPkfndUJFJg96gms8kMHMzKAI%2FlGZmJPUZVaoiHVUu2GKxCv4WClR7GlJ5KASfoKZi2LxcoBcZoqpIABCRiBbxqXYHgUT4BBC0BOPyKrr%2BAojGCjnNC4VLQUYaAuJTqCjiQ5M4lFHvlbHYgHShChDUCBd7IAlCLMIqxUnfgDvBKzEDxGHrUvnMiAX5GAQJJMpBkuqRvPJC0jZUPEroPSfC2RKXUW6FEiAwiCs4GCDsraHrlCRhtThDmugI1HLP9anDNgtKHEuOEYNRnqFOoygAH6DIAE3syQVZ2ApdcwAAr7UwPgwoIR1IP5v0WwHkPQ1qwoB1s4nWcwlfGRH1%2BMREPoCQOCFe8ZnycJh2DwhWDYqZrzXvgphmuol27I31SgHvQ8n2KL2qk14Aer2lLNjPw1BEjKHGzwXj1wEfGpBWwYiu8BXzsZn0wyoJ4IBuuZBE%2BVLu%2B9nw4uB17ohvExXwBSOutTz%2FNzj4bg1c%2FQgUWQiDATlrK42Q3ogkIRgTdahE%2FpoBYgo9DdR3QoM504AUJoChzGox1lrx4lpPFgYv7ABmOlOjOSuuWZ16HoMEwru0BjXSl92vnJg0e9KLP%2FeZRFYZE8OAITOM95gAK4qWIrKQO4QVS0URsVcFuYgpvosoN3WgAomCMTeAJNopkFiB%2B%2BaQF%2FSZu16eNaqIucUIEeU4cngJse6xa46QNha8jtPZgyORd6KYgTbhYAyZxRbheOOeVTJp1RRga2gBdSnpd38ZkCPuBcNgn4%2FJBRtuVXXgZv4A9XrmW7YuVHUWX3SGb9gEBX9h58%2BzSUxQxgrRfgWIQ%2FwGb%2F%2BZx7ktih8AVs%2FgNfkNNakIUnAb0%2FwAM8WIQFqhdKwOZFuJNi%2BZ53Zmf%2BkAYqSV%2FLOZ2C8AVyDgds0ANsjsp6CYdr%2FgNmfQZZ6FJ7oZL3xY94KN693cYx%2FybjIXHQUsBoabBlgkgFjKbMWLmTcGAGWygX2zmVnaKV3TnpC8ZoqElptGnpgrAFZugSU3GVYa4FjCYVk5YVle7pQC3jH9mPUJ6K4yBqp0g3XVbqk%2BDlo0YHoHBqoRhq9wiC3OriC%2BULvOJQgWmP5nieYU5lY7mGX7YSDjWXrdYKYm5lu%2BKFdlCSjNDqVQagtMCGZxCGQ6u0mmhMilYm16UKYwaYtTYIdbGwYUnrtO6Prj5lYsgGw0bs%2F4BsIVHZqJ7qqN4Io7bsyMTlpV7qpj5qqM7sp4iKjGC%2FDpKAHsMTag5tg5CQ1c4IvCg2XcqtOsZXvm7doP6RGHFtjADt3f%2F%2BZNz2kMr2bcz27aTm7OMGCc8m6t72beFeiGnrgs0EbtlSbddubd8uCNj2mUmIIScotL3ma8gMbd3G7qcOivImDVB2bed2beLebeNGbs5W7lBm7t1m7xr86lC2FfS%2BbuzW7lKtBYhJS0%2BtbdsWDPHObPLG7vre7cl26vsObfd2bfiOb6We74Nh8NWGcMve7%2FLub9%2F%2B71JNlJf87tW1bQS3bAX37QxfbQc%2F6g23bAlfbQqv8Fy%2B8B9h8cyGcafucOz%2B8N0OcdcWYwMPDBSPahXf7RzPbBcn6h13ahkPbRqvcQO%2BcRlRcsoebezucd%2F%2BcdcO8tUeciJHDL%2FebSR37Sv%2Fj2omD2UnP2ooz2wpn3KprXIPQfMXz%2FLiru7V7vLV%2FvLQDnMiN3KnNvPVrvOjVvODYXOidnMO3%2Bw4D9U5x5BCX%2FM7f%2B88D%2B09D%2B0%2Bz%2Bw%2FN%2FBAP%2BpBD21JD%2BVDF2pK3%2B1Fj2o4d3T3hHTqEPVSR%2B8t321Mz2xNt2xOP3Eyd21Qz%2BxX%2FxFSl5FED2VU5%2FFGX%2FWZbPXR8PXgNvUZt%2FTMpnXLtvWoxnXCSIEUCAwHeAENEAxt53bD8HSi5nXLXnYPAXZmR290IPajVvVjl8lkF41ypw5hT%2B2u5HJZ9u8O8e1qF4wXkAdWAAwbsAZ8gIctCPiBL3hw1%2FXVHveolnfqOHcM%2F6H3H1l3om53dw9EeL%2BMhxeNiedb%2FsZ3ENf33eZ3wCAAVugHgAcAXFgHJWAFeQiBlW%2F5l4%2F520bvhndqjheNiJ%2F3Zl%2FtitdvY8f439P4vdD5vfB4rPbwkAfykRdy8A4MNZAHeAD4EMAHSAAAJeiHKdAAfDgEAJiCrT%2BehR9vy0Dvo98Lnh%2BNpMcQoP%2FDoZ%2FaotcLtJ8Ltocre591pvdypwdzqAeAF6CHMBgGgLcBfuADAPgBflCDF%2BCHOkB8fmCDwnAAt715sy9vup8Lte94n49wvY9yoYf7dZP7ucD8qbD7lX32GC%2BGdJ92pwYdEwcMB8CFSwCAwX98OQCAwpcD3f5%2F%2FDkAe1YA%2FuC3BV64heI3%2FuNH%2FuRX%2FuVP%2FliIBeaH%2FuiX%2Fltw%2Fum3%2Fuu%2FBSPIBOLH%2Fu5f%2Fuf3%2FvBH%2FuoX%2F%2FLnhSwA1dAXxEigA%2B4v%2F%2FAn%2F%2Ff3%2FviXf%2BznBUnIAvev%2F%2Bun%2F%2F23foCIdWsgwYIGDyJMeJBXpQQAHkKEGIZfoDDprE2xwY8PgB%2F81LzgV6fjRwAENKBEGSJYuZYuX8KMKXOmzGy2aOLMqbOcrWw7fwItx8RY0KI0vd0yqhQmuGLFwC2Nqg5Msn9Wr2LNqnUr165ev4INK3Ys2EiA2EVdCq5n2qVI2ypVpwmMOrhFmz61W%2FSWN71BjzmIKJjPPXn06P7hG5ZCHiQAU%2Fop0YCv8RbIgh8SaKYOHefOnj%2BDDi0atDdbo0%2BjTo0OWDbVrl%2Bji2JsM%2Bzaocvdsq0bdDFnu3%2Bjc0eVLPHixo8jR242HvDdrJvrxg3dtru57qbXduYbO%2Byk3F2raxb48kMHIc6LG6YBQCh6aoatW9%2F%2Bfbr1lxNo%2Fu66tH7Xz%2FunJhttAIomHYGn9XbgaMJVlZyDD0IY4VfLKSjafxV%2BZiCGnlUHxnUbeqYdiJ95NyI64Y1HXkShNAZACKzIY00RD5UAo4wq4jfgiPyZyNmFJgrYo4YmJtgjgxIimaSSxVHY448gDglihx%2BaKGKP6JQ4IooqCkYAAf8RafAlmGKSl%2BOVPDrZ2pVBmhgliEWaeOSSc9JZ5z9Nmvjkhm5iOOWVVvaYJYhbclmooffl1yOaearZI5sj8okhnCPKaaellyaH54h6Yhipgn72CKiJgm5I6KGnFmqmoqZdySmGj0KZ25WTSjkcprfiKpamILqqoKcHglrldoGW06OpqCIrmKomLrppo0DOJqSsPdK6YaW5YpvtVbtu2OuBvxIY7Iiijkgqhscmm%2B6yO7Ka5pWxRdvmtEQOS6mt2uKbK7cYeksguACKCyK5IJpbIbrpIrsuiM3y%2BuyIsO4574jV9nlvvhdbum%2BF%2FQL4b38BbzjwhgUreDDCpyq8IcP%2F3ToMIsSdSvxmvbU2iLHNdGqsIMf9eawfyBiKjCHJB5p8sqEpY7gyvy1v%2BHKFPetHcYXX3ly1hDkfuLN%2BUHP3c4VBVzg0gUUbzSXSFSq9MdOvxgtpzBtK%2FanFVtPtINYEav0d19h5rSDYCooNINlll5kos%2B0y%2Bq7Tvr4t6czWzl235EwCwpy70l7Z94F%2FHxh4f4MTrqzh7L6b93eLf9t4hXEDG%2Fnkr4d1N4CmY7f3dJoTyDmBnusHeugQna1g2jqvXSHq%2FqquIOvhug6781zJ3h%2Ft09kOHe4A6g4g79%2F5%2FjsAwR84fNbFK3h8x8kfuDzAzT%2Ff%2FraVt0o%2B8plb9%2Bfj%2FiMXa2L3v4NPoPh4y49A5uMZ%2Bgikvo%2Bxz33ti55%2Bpged6jXnev3JXn%2B2x539ha5%2FAPrf7AIIoAFurYAAOqDPEqhA5zHwOw5sDgSBI0H9UFA%2FFsQOBgmnwf5wUHoe7A8I9SbC%2FpDwO1Q7oQJTyJ0VAqeFv3nhd2L4nRlOp4Zlu6F%2BctjAHeqnh9xR4m%2BC2DUTEnFyRsQOEn%2FDRd0wkTtO5A4UoSNFo1HxO1ZUIRZP17ZYvcuLfANjGOs2xumUcTdnpE79QnU%2FoeVPS%2BLx3qHiyJ05HrGO3NFi7X4YtUPKrWZ9dN8foRPI6Fiya4UU1rva2Jw3nsyR2IEkGSWJHUpS%2Fy%2BU3NHj7fi4yap1sjmftM0ga5NG7KwRO6YEDioRpsrpsBKQrpwOLB8oS%2BzQ0nq2vKXNcgmcXdaml7D55XSCOZ1h%2FqaY6hrdwhDnLMXdMWJ5xGTrNElN2FnzN9iEjTZfw03oeBM64NyNOJN1TOgk05PLhE4zWfjM6UQzgtN8Z77i6ZyBJvGgERzluNjZuUQOapGMTBU5VWbOhqFTR%2BqclUXX506GSs6hupnna%2Brpmns2J5%2FN2adu%2BpmwjibtoywLKeZImrmFojRbKrUNS13jUtXAFDgyBQ5NbWNTVP2zOQHVJUSBU9CIrvOnJw2q1YZam6Kq5qipSepvlvqbptbmqf4owynadLo0nsorq0YCKldx5VXYgDU1YkUNWXdj1t2gFTZqbSRbhedWtcHVbXKNE13riqm7viavqNnrafqqm7%2FqJrCvGezRChu%2BwxIvsXj06Vy36liMQdY%2FVRWkRF1IUYGVVHsYLZVGN4ojz%2FoPtOMT7UipFdsSmva0DYXf5eJqpNeG7LcynO25amtbRInUo6Vb7W6uasbWAiehLmyscOuUWtVI9jSUXRBygabcJzLXYM59bkSiCpypXpO6urEuaxdrr%2BB2V6jETVxP41Ter52Xjekt2XrZ%2BxD3%2Fga%2B8pSvbegLSvvSLL%2B43O85%2B0up%2F%2FotwMIcMNEKbGAE70bBD%2F7lLcwgDDn8StiuFAaphaWE4c1p%2BJscHpuH2Qti3Yh4pQyujYN5id0uxlihKE7xY1e80xZb68W5C%2FJMZyy4Gj%2F3xrbJMVF3DJseZ%2FPHu9HuErlLZCR9NzXhHc14RWNZ22DWNpoFD5Qh4oBQHIJGkLgEnX8AAAcEYhiXSMFto5vT6ZL4aVrWDZd3M8Qv68vIb0Vyn5SMPSYz1cmfa%2FND%2BPAPVjzkMesQxzqmAIBD6OMS8BhGitqL2w3qFoCBZpyJKzZkRHtX0Yhl9NQcPUFIn1XSvaP0D%2B6BD0wDgA%2FyCIGXAKABeYQCAGHoBxEK5%2Be2AnpN6SwxaRn7aljPKcyoGf9zgQbtS1vDENeA1TX32uwAa1zCGsAOBbJDoQQA2GAfHCkCP8ZAngBMIx763je%2F%2B%2B3vfwP83%2BcgRsALbvCDx4MY40A4wxsejyhQw%2BESDzg7eDHxi%2FfbHde4hjsw7vF6eBnbdhNEPTyOcXcsY%2BEmvzg7CL7yidcDFGAo%2BcsdrnGO11zivGBHzh0%2BjVJfJhDi0MAwME0Aa6wDEtbQRxE0IgeSPP0Hcpj61Odwh6tjPeta3zrXu971NqDB62IfO9nvgIY2lD3tar%2BDD9C%2B9rd7Pexwn7vW0SB3utN9D20vBN%2F77ve%2FAz7wgh884Qtv%2BMMjPvGGxwIT9oB3vJ%2F98ZCX%2FNz%2F9wAGHzie8m%2B3u%2BbhfvfOp70NBeASEfAxhhBYAxfrCcF6UnCPSzgd6gB4wRZqb3tBJCL3ut8973vv%2B9%2F73g90AD7xi2%2F8RPjBD8dfPvMTgfnmQ5%2F4w48%2B9Xmf%2FOpjPxGOYEIbHOH974M%2F%2FOIfP%2FnH74fyoz%2F96vf%2B%2Bdfv%2FvdjwQqOyH71r09%2F6k%2F%2F%2Fs13RBuYMH%2F9N5%2F9ASDz5d8AHp8gjJ6KBMI%2FGAZikFoKrIcDrEMopAA%2BBAIAKEE%2FbAF5ZEY8uMMHgmAIiuAIkmAJjuDAmWAKquAKuoPCseALvqAHQpwHwmANmmDF2WAOluDG6WAPgiDIkUI9%2BKAP7twQ9uA4%2FxCDEepgPQACySlhDqbcE9ogDkohDMbczFUhDPJgFrKgOhQhF6pgPGgD0EWEDYTBGV6EEpSAPLCCBkwBP8jB0VlDCUACPriAs51JqnXQqqVOq00NGGgClZQLuX1HNgDDlcQDIMhaaNHap4BbE4lbZhEiDVHaQ6TeQ7ABPsjDrwXGFCCGPlwgHq5KtDnKtAmaH8pNIF7JmrmGISKiIloOfxmXf3mI%2FZTSJEZRJcLbC0AE7RUBmdCenfVZHpIitDxbH1abvagisVyJK%2FZIIi7ibjUisDyiGkWimuGiG%2Bki%2F5waDumhDvHh%2FCRjrSzjqGQjdDijiUBjLFbYLF5YLRrSLf8ayzZmUDdW0TdeUTieDyq2TjkOYjMe4jPCYvxcSZmFxpllxzXWBiumBmdx1DF%2BVjE%2BjCmy2jhCjj8SzDk2RzqOyDoS5DSGSzUCk0J2h0aGEz3akD3KET7SkT4SED8yD0biD0C%2BYjSqGkgCjEh2E0m%2BBkOihkOajUo%2BEktGkkuGEEyuj0wiEk0KpE3uIU5%2BjE7iE0%2B6hk%2BeBlAO4yh%2BZClC5D5aZMUoZdiY5G9wJIh4ZHEp1nHBIymt4ljWFEpOkVCuElG2klH6EFIiUFgCjlvqRlluyFnKYlrSoiDCljzqD1zCkVwiE10qk11ukbfVRqGhESAS5kz2iF9iCGC2o2D%2FvmNlmpdhKhIZfphiAhRjCpRjVhJelpBeXhRTquNAouVoDaYttuU8iqaNkaZUmSZVoWYsqaYQUWZtXmZAvqZTgiNU%2BoxUxhRVqoZVjgZWiuLhSKTLUCQy%2BtZPsebu8KVtYGaFaCaLuaOLrWVFgWZG3WaU5eZ77WZ89aYz%2FeYXZadsuWZHwmZgymZn0iYzHuZ52paU1QaVfZWVvQaW0RNkwoZkUkdw6qeJdKeCfOeRhWeSjWdhCmdoGhh0EeNWGiNyXhJ2eqZYzqdZ1udm3qd4fmiGlWepBINDXKipdSWqTWfTVKc4XudcxWcFbWdtNOiBPOiiRWijTWhypei5rGiL%2F7pohsYmdb7oUX7lH97ocoXoX44oeHKmieanOdqmkQJPeibYei5YexrUe%2B7Rk6JXlGbmlEJolUroicLYkKoXf26Uf8IGgOKVgLoGgbaUgb4GgvqSgmLpcNYkO1Jpia7plf7jfmrpgXFpiHnpiEnbkt5lk6Yim2qnmXonmvqomgIppT6amxIYnDKSnL4GnUaWnaoGnhqVnroGn26Tnx4qgxInfRpnPnKoKAXpZ1aoeSbq9ywqjjWqjoEpVklqP3Iqjlqqg2LqrP1ord0qgHlqh4Gq94jqfvxqlQXrdYlpLZGpgB0rjyYrIy6rIzYriuYqbUUrN0LqSsYo26Rrag5rTP8WK5QCalMKapoS6qYaakZmaaJOq2qQqmpda329a1LGa5nOa3HWa6beK7MWrDU%2BK42daz2261yuq%2FHMqFfWKGNt64Z1K4H0qLJqKsPmq2VaKL%2F26pRVa4AG7IMNbF42LMcerKwmLMgurLi%2B7E4%2B7JNFbEpO7GJWbPlc7Eu27GrerD7lKGzsqMd%2BqzSGKzWOa5uWa3PtbFz2bGn%2B7IGgalipqmqwqj25qr7GrIjOakvWKt8op1IxZ2o4p2hAJ4ZqZZLKaNUKa8YqY9E2WccCyMeCa8ja7MguJaKarNyq59UKUNAyKd2So91GGt72h94yLd86reKWVdqixtqGhjoUaeD%2FIql9KmnZQhPlLsjXkuyIJG3eLu1NNm1IPu2S5eyksaiW9mtq%2FCt4mWqAGG6kIu5FSu64Ma5%2BOC7qQq7q7u5lge5oWC5otK3oCG6XEu4H3e5jZqs0bayM9e53%2FO5Tpm5Orm6nRu2b7mrsosbsilntokbW6tXWpkbXvpTo%2Fi2sBqqG1mzk%2Bi2I6k%2FmqogDKMEU5G8IPITUTQGZ%2BC%2BZKO%2FmkmjnZu8IFe9Bsi%2F9ui%2B9wm9v4Wc8du%2BnFgq98QM%2F%2FMMGboE%2BrMM%2BtMgGd3CLuK10PnDcei5CJTBoCMf0Gm31csf1HucBJ%2Bf23lrr7hp%2FqgE%2BKMEL2IAGNIA1qEcg8MML%2FxBAemhAIOwDL44w6ZQwu54wdKgvUi3wXrowdsAwrcqwEJ3t5NpwufEnJKxD7bWeBQJAEWhgCYBiGWsgB57sf8ZqAZtwFkPiT4HC8GJjFU%2FHFZOtHJstDYdbF18QlB2dPogDPohDCmjESPQAP7BB7HnE02nAC0iyJOPAMXjDJWNyJmvyJnNyJ3OyM%2FCFJ4vyKJPyLTgDKaNyKmcyE%2BiCKrvyKGdDLLzyLHcyMBQDLeMyJp8DGEhCLvtyLGSDL%2BOyM9iCMNPyOezBHpyDMc%2ByLZwyM7tyLEPzK0sCGCzzNKeyU2CzKgPzNqMyYHAJAWzBFDhAEezDIcSe0zkyHGIgnf%2B58yXYAi%2FYwjzTcz3b8z3jcz7f8y3Egj778z8DtC0IREATdEHbghFkAjAY9ELrcz8z9EPbcyw4NERDNDFkgSQQA0VT9ERrNEPzAkd3dEETAx3QQUaH9EIP9EmjtEobNDFIQhaYNEsHtETLdEGDdE3nMzA0xKk4QDqwwgvoA0cQQT%2BEQQrImxqHARvbsRuXjjeg01Ln6bukWavW8QQrSOk27ulib%2FACjMxB9WtMdXdkDpSFwDBwxAvgwyFIIKapAT%2F8wFoDABu4dXQyMdw6MR9%2Froda9YFgte9qdQxzdVT68Rzvtc6GcyjwAyuIAzzwIh%2FwAy7QAy58iWPjwj24ggD%2Fb%2BnyMmrz8tDzumvuguVXV%2BXRvkZfW%2B9fY3Fgz7Boq0ZY9yRpq8bgOAAbwJkSE0AYhEIg2AcBjEFu28cSlxNnZ5Fn%2B%2BbQAicL323YSunYFuUTu9ZgO2xhT9rUJqZm%2B6pw25F1Z1n0KhRyL65ynylz16VzL9EW%2B1UKg8bxfkbyHunbcm4cq3aH2ihrqy1sq4ZpvzBq73F82yp9o4Zrj%2Fa%2Bwm4bz2nK1unK%2Bhh3b5d35xoeQ4ceNzdeW495Ey8gUyJ1pxKBj6qBlyqCb7dxw6d%2Fn4Z6fwZ%2BW7F%2BRzh%2F97GIjwaAN6d9%2FyRiZrh2%2FyeHA%2ByjkjeQ6fWCku4bL%2FfM7m38%2Fwrv%2FFIx4A44jRc4dk8ScbsniI8pi4sGiXuGiecxio%2B3hE8UdI%2BkhecihhuThlOrkr8Sk4epk2srlIeGlHcGlT%2B4lTdmjqMRhaMZepMIjF%2BljH85km%2B4mDMTmc8tvez4nzYwwjZxRc6mBPO4uX4vmPurjdOuh7MtCf6LOnwgkkfxWE1xa4L3pYo3eFR6aHDbbaBvZcl5QnK5Nnr5OOl5mBc60K56Z6hDOCzCEwyBEAzBEfwBNvDCT5ZBEARBKdD4pfNVphPIF36gvrnDq0%2B5j4c3kAPHFfg6sINGqIOGQaqwnI8gRP4VpSf7awu4kYpqsofDuKNDPEQXgI57ODw6jv9%2FzDPkAALAe7wjwAnoQVeqAAIYwCIstbBXFrH3DjYgQRIIfBJAQR78wSJgg4izeXNA%2BGvce75XJrVnyKiTl5YjrzpsQhcMfBcA%2B7OZlTtMgsDHAaSq%2BYnguarTEDoQQhCoQMvngB0k%2FGfkmDssQstDwYtK%2FGeYrzo8wwzIuwdIgLwvgrO3ALxPwr7TeWesMJp7hjoIQ9DLe7ybwCY4O3AsPHA0vGsUPQIc%2FbQ%2FizpAJNg35MV3xpCAvbJzyBbHOhREPbxXwTP4mVnFgx0YgAEEQbyWPHtndhR1wxG0PQK0wCYI4swTArznAM6T72nsvBDEexKkwjPUQhx4ALyLgDD%2BbEbHJXuyM8fWd33H6RtnIHtwaL5IqYO5U%2Fo1bIfn64jqHzfTw%2FozWMDfw7sFCD6AXP1vZL1qcH7Etwalo4MwwH23w%2Fp1CEM4JPvZc8bZg%2F0zhMNmUDrPBz86SMfzP4MwdIPvDzk%2FhUMS%2FLy8B4FoyL0dwPsR4L2dP%2BfJ%2B1OvqkM3BEG8W4AOTD68e4Dld4Y3AIPYXyXyckjhI8DhrzdAoBM4EFi2gQLVHVQ4MOFChw8FRjHWEGLFh%2Bo8IdBYxZ07dermTZKgsUy8bnHI5AnGJYcbYTM0TvJIiEyZMsK6uSHTB92iKjrIlKLorlacJDnIVLr28Q8ZMpMaqqP5lKL%2BRavo3IHR5O5q16vqnlkgWcqToSojEajoRlFdvI%2FxuDKM51Zdx7h1PcJFlw2YV78W4wECFO9v1xYx4x4s6C5YmRkWRATpEy5qODs5LLQgUytIjip1L%2BcwBGVDi0Um4%2BTw4CHIInTlbqmzrNrCiSCGPha%2B6k4TmMSF49nRiGCIJ2ybcgwndBeuu2vXfqPD27aqu7l1684TjuBIYuvTFcam6%2FZgW712yetG2MwBAPfv4ceXP58%2BgATNqqp3tx1BFWFgy9DIgCvicoccW7oJp6OoFqwrHAU%2F4mqtAgnRKIeoCEtwQYGAIWdBjyZkqMEMO1IvoolMfCieODSyIJjqjrD%2BUB1pLDAgs%2BFKgQmBSezpQ8Au1BEGAQNOiNEAjRbIgyt3FhFrOAagCCceKAwwYIaEwNpgSEOiSzGrrVIsDCwnDbGno3kMGW6RAmux44gj3JhEOumEcSPOVKo4whDKwvEpiDJc4ytM3QIbbFCHDtuxyw47EWG44Y6gTLYYBbRSASvbquJIJw34A50gHtUoiXJ4QYfSUMnI71CseuuyK3W6OUFU7OKRxlEJuljSlz6SCKIJMUrxTpg%2FnjjCDlkS%2B8POVf7485k8NOpOOnUmcSOILgjpJjF1eClqCDg9yU2dWuzc06wk8nhGVa%2FUYa%2B%2Bd%2BGd7751%2FYJVBVE9ks4dIRD%2BMOEzrDyRggURWjBWUlne7KOWKlqYgYwE%2B8ghskUScqdCBC7EqpYuJIYhiTKw%2BYgWJI5wQhg7dIjMU%2BlqeTOPbsiY4YQnoDJRInpNdCcJGRWKxw2NTggHGw9CncGcRDfxxMlI3RHGSQREmAGtE9ZyWiMRYFBAozjmKUUjCWqpaxGg11oVK61cNXuhMTVaDiF0EuVIujKejlZddyapcgZHEbAAG2l0CPUIZohRu6tCCTMcbsQWIoYWWfvOczgo2vpjuB04Hu7CeK4YboMTPOjGx8ihcBIPYrxGwIM%2BfBouFZxzblW%2FSXD0jhBCagkHq0m0fFSCP5Y0hOjhJHCjoRb%2BjkzUAEIs5y5fKIr2hKuEvKgbgSsmXOTIDUAdTgSh1Gu3vXjJh3feMDEaTiaGgimlbLzRejQIBTfRyIMNjtQoiCCqHI5Li2WkjlXw7VE5wIY7KqG1tAxpOGXoSP0Q0ALk5Q8BwFPPzQynjsAhAAqJGwiTvlaLbgxPBZ2YBMUSVYbeReojVsPYM9yRJgQoIBXzIINGhqAtkUAtZBuMA1yeoJEuePBQX0qb4hASlrZ5B3oImAFWRtc3AuagG%2FGA4HAMwJHuSaAFThJCX5BYEcQhMVHrU8gyxGA%2FT8zDHSzSSCfckRzuoGMe6JDj5jqHgA2kohulCMe9EFAme9DOicD%2BuJgKPEFHO8RhEt1AIm98ox8ZUq06%2BQLL8Ag2PKoRxUkiUIEC14QOHRHvWdHqSIA0ogJM3g2VeuSbASgHwuGcAHIISALsKiK%2B8u2SPufzEgQ3oK7yiGtoGqGBE7qHgFpYkXi9UiACTpCE3umgLRe7kDlmkDwnCAEtp6kEA4bTAifwzQLCYOZwgpAEJz3xgihSmwY10kGFAFCPOBleHMzElcMoAC0woAydnHQadRRTAatQh47iIA1hPENHpbDHdi7UjVsFS21GDONFlIgAtwmEcxq50jOGlwSc%2FAEtebDHFWeQijysghL2E4on%2BFaJI4ZxjIorY5eIwQKS1PEjPkT%2FB9%2FgiI54NA%2BPGnGCW%2BKRipEoIA%2BLWIQhtJQBW6TiUTMjxDPmgUv9yI5QqMzYRTbRAg%2FMQFu0qIAeYbgzBARBGuoYHTtHaYdN%2FHA7R4jHM3pHiIF2Lw%2FzqAVauvAMbPwsJvMYWzwdWQWyadUhuuTlY9%2Fjy5xtJ2j0AssVgrADYNgjHnKcxDyuWKZwQK4Fz7AHtHgYD2sOtAudMa09KPWHeHxTf%2BEYJFpScU4EkMEdPdJIMBm7EAy%2Bs3tfHYjPgCa04ZlxcY%2FaQNgAigCwfQSkM5QFNnonAe1KQIGEiIcwtCQBX2TEiYqz6EXXltGNClWxTsSb%2FWAIkvbewB1X%2FKx1%2FtoLhW48IxztjcNMkVhTw920cTTQCJcE4g4nbO2nGgFfDGXUUQQMESstxSIFESDTLoSqb10IIyQBDJF4tNe4DDHxfvsYhwxoJJGQW8R%2BhXGrF%2BnIrh0JTrRCArRnPKMbzQvCPNzYgmm5g1JQsMdhxduRTixWN46F7GMlqx%2FKlo0hbJnLMSpBiCr0rg8nTW5dKFUSdchCa8FUbQDjMY9u1GIRXTCBRrhgD9oG0i0EXcU5FVALj9SizMIszHDNhty%2B%2Fac83btSMRHwuoEk6lFCwJLVJPCiS1oXuzO0wKUtsIEKWOCHRNZIHlDpBiIWEW3oTa%2BT1ivhGQj6q%2B%2BFJjog%2FijeigVRuhuwNVquMGpTC1Uwuj4UgRWS0wMnTmcM5htF4yHDok6YMPX9mg50kAMd7C8HlYDLJKBAwAOHuDAg1k%2FzRNDWgzyIPGCJQxC0RMFJBAMtmbY1KN2hIy4k7sbcsYcbJWDrDayz2NejtxthIEu11AWClGyyu54MZfyEydnWZQs2aoEVOlXhzf3TyB%2B8DE3KeBoBdnALn9F6ZoxRtwuftPiE5QxOBGzCI3id4Z0hKIK1CLDPwVUIoFflDvIiwAkjat5u5yGN4SlaIIkyTe%2FWFCSxRJq6RCsoOgC5CGwIQxmVoAWPsXLYGdzLAtCtaKl3zRD1bmuDRvZqQ9yx%2F%2BRXQ1AF%2F3QHrRmw3e1SOOzH7TUZY8LZuczFHcTgFwez6g6Jtg0dkOuCmeJBqWVTWB3BEEs54fKMSdQCG7wQRioWIUJPxAFyR7C5V7ytG1lKYBWJiUcXWtAFoTyD0SpAwooR4IlaEE%2Fu2l0TQuld13trJO61D51az5B7jbRAHVpPcMGp%2FBcnJ7x8UW7yKtBiCA%2FGgwwLyEEewAJICwzBDjrCeME3TimPj6vPIs%2BYDo4kAR24YQhCTLl0%2F5Oll5%2BzsjRH6%2BcHgnOzJfMJ7jsZWjxAGNxB6DSC6JprEezhhiKIMiBN0qqLhuahiW7JHmTBA4okbOxFfvBvN8Cu7tgmkP%2ByCiQ8AS0IwR5kqO0SYh4I60rYzu1o7QqeIReEQRZqgRZsoe4OQsDUJlGw5Q980AcXgRj0AEnKoBZSof1CLo8koAxKob1GTsLoTpREZS0UkAZsIY8MqCOaKFfMi6vExOX87S2EgWgMIAnsgbBaYBPM4RpQQI%2BkAdEM4RmCoRZKoRawTkdCSah072JmQBiCQRhWQRaCQV3OLiHiYcE46Mg0AgaOj8nEBOGYr%2FkWblB0pLSQKhjIcAfeoXlYQKbsYYO%2B78s4bvxAzsysKR4I6XvUwR64wP1oSwLiz%2BUKiv5mbhVqTjf071Aab3iuJn7obEaGjiLK6Lv4hmsasOlmKLf%2FrmgHuACQVCBkhKqVAonb%2FuK8PDCj7EAOg4EQIEcEYOivhOgjBmhrMg4FoSiVTCscdKAFdgARqDHQ7s6mOExARMAWsuFUVO7TPGIM5%2FEJ84juZAmaWkCB4oAYlMZ%2BcgCQFKULI0k%2FWlGIcCIVYOBrKGEekJAM7MEeKAGcJCBY5KgL5sEeSuEEZqAKQgYP46Le7KoWOHITMpIMVCAH%2BkC39EodDCH6FBEBGBErkG8DpQMSIzFenE%2F0ZMiJFgHzGA0BNwwBdoAY6mGHKijjKmsUP678rGkemqft%2FIpvDu8VY1FLZrEn7Q%2B4cNGdMkgWRulRREAPsIRGjsQAT6BK1iQe%2F%2Fog%2FYRBSDTCF6irRhKtLgiLgfpFFqJCqexH3AzHGsPuA%2BWOeNxROpywYZzkGc%2FJHMGCbzQjmWQKBzkqHgesH9PCFryhG6DAFz1ASTgqFeQIY5Zyc9orCtXBDsSif5aQVPBmePrHAoznkbxQTLohNSXgBPIRCqxDATfADeKAgHikKIWADGTFAHLAHKQQAfJQJT2CUjagC5JgJJaHK7pHAWZAajTiBqrosHay4QzuEccnKIVyEtFHGn3xMyBMI3bACZ6my8APzDSCFK3SQuIhdZyoCnixKznyK%2BdPLG3x%2FsrSJ3ejGwgBCqBt2vLgGEpFILrBDuzEz9ChD%2BwEA0%2FCTv88oUPdABor9EIrhhKe4EG9gBZ%2B46CM6h39AjF3LUh8US0RIXHAIpmGwwRYDm%2BqRAT%2BqcI4ZTjwYBk0czMNRXFSYROUdEmXtBTs8SNSwULd4A9gCCFk4RmEwRM8YRN6wqM%2BohaU1OsSrE3sxA2CBTawYljK9A8E8MN28ws3SHBmrhZs0wAUYMUMwOPQoYkAUwT0DG7kMiXjoEqCYB%2BVJ3%2BAhE50KlRy4G60xwBUoBENIHR8cvnUsz6GssnUwQ2sRwKqQFLCoYmqRAJgwgCC4Jx8tC6EoEp%2BaMy%2B5hmGSm8%2BYimrRAECx0rQIYE0wgGdRBmvZuaoqm8w1C9y0Wym4yP%2F6gJNP%2Bg6DsI60sM8yGPvmpVZE8wj6uIanAEh3AG00IISXBT0OjAxu0EMvsApzJUMrmpFzWERguA7W6JKx8Up4kB3PghPvnMGaGYcwEgzddBY7eJf7aIgEGLv8iXBhMACPOAIpMEe1KG95AY8FAJayUNZ64JgFXQ33lRMwoEQhuBej8A1ogJhvvMIGqESnKIme6Jdv7MM%2FMwOnEIwEWITThZLnqEMcuA7dQBlpcMW8EBlc8AOyiZeycAOECIY5JVe0fNS1%2FNiF4Io4qAKrqAKyuB1KiMPpKAJphYbnEpOnmFrEcITnIpDnWoRGNCpuPQjzKIKuqAT%2BsSpusEWEMFt%2FwWibaUOLLYWOgdqbJH2L4oVvZS1SIshW8clCbZs%2BH70MMO17niBHfbOYh3CWiPEyvQiYiG3IwSlSPs17AS2ItzBDfLnBJxglPLQL%2F4WB0MvRbADWesiYpHVOaAjPbBCdQsWK6h1YCdXX2RXIRZXdiV3W%2FjORCxVaeUjU4HXWWtXW8mBGOjCLvSlRLR1dpm3eb2DYLGiRDrEeavVkqJXem3GLOuudHEwcKUjGC5FTb4VXMGkSG%2BhHIp0L%2FYVBzN31zYXIgYqNSnICdQDfMPudHHQGbK1fde3SINXeOGDeNHLG26wfedXM%2Fv2ovQ37MQXVvYmanDjomA07AK4SC%2BXX%2F85EwcX%2BCL6BAre5AiqgBLmpDAe2NT4t%2B78t33RIYNxcIAJ2D0M%2BKIQ2IU%2FuO4aOIxS2NTEl0K7wZHO90UTF4PZV4Pft%2B7i19RyuLEAFntR%2BBbad4XDroUB%2BIhjGChnuIDZEwdvWIENon13GIl6GL1%2BeFqYtisueNdgGAc3GH47uO6a2NTK2E0bUjOtWH2x2AO1eItpuIvr7ouLdI5NbYwVp47D6IxNt4jZeI%2Fr7o2VOI41N4w1E5EZcojDJI81s40Ts4%2F9uIbDSJA1k5DRy5ANx5IVR5Hrbo1NjZPDDpLDbonRi5R5WIqLlIp3TZNx0JVNTYZnGJSRSJQ9mJIZ2Hv%2Fww6VDUeV95eRW9mRXzmJY1mS5ZeYv9eWNROXTU2X646X0cuXH6sB3gWYFUeY5ZiaddiYdw2Z1UaZd42V0Yub0QuWd02WL4qWydiaTTdjc%2Fl%2F9ViAPfk9UoAVXAEXcKEIACCgCbqgAUADIEEcXMEGegmQw46cJ9mFTVlt1Nls2FmFmfmdnXnX5NnU6DmM7PmQ8XmV9Tmb%2BXmTP7qb%2F9k9poAfrGEYrEEJAGALZJqmbRoS8CEQxMEa0pOL01g3KHqaLRqd6fik626j0cudLwqeLyqk0WukkaikT1mp2zml0Uubjdifg1o%2BAkEeQgA%2BAmEdNOA9NEAeLuGm%2B8Ggh1ei%2F3etqJnYnMPuos0mo1eFqS24o5%2B6peMZmudZmue6ffF6ULB5q1d6l%2F06jLyZFehhGIYhDNzDsSFbsm2AH%2FgAAICAH9SAPpoBk1PEGwBbfr3hqEE7f7F6n6cYDEDhtNUDqsNIqi%2BKqhUHGEq7SAub4UDhjvs3sbd5il%2BaAHDBGviAFfhhCgiApvnAFfhBCS5bDgDgB%2FhhDgCgCA7hurHbFoBhu7m7u737u8E7vMHbFmJBvM37vNEbGGLhFtK7vd0bGIwgE4rhvelbvMu7vvHbu2PhvvM7v5chCyRhvvs7v2NBuwccv2%2BBvw%2F8vZeBDuhgGRa8vtc7wumbvCn8vYtBEv%2ByAMIvvL33u8PdW8FB3LxpIQHexQHaI61DAQBQHAA%2BQK2fO7r5AbpLoAhs3MaVgBayYcd5vMd9%2FMeBPMiB3BluQciN%2FMiRPBtuoRiSvMmdPBuY4BWefMqF3Bligcqx%2FMe3O8u5PBvGAcC9ocuzPBacQcyxvBjs0cynfBz2YA%2FGQc2n3BaYHM6d3Mrp3Mm9QcPf%2FM6TfMv5PMnJ%2FM%2BRvMTrowF%2BoARYfB1YgQAOPdFDIQXw4RAAQAn6YQrmgwA%2Bu31FG4dvu0glwrWj2IW5mqNb%2B4rbV7ZpSrBnma6Teop3G9QLY9Sb%2BZZfmgPkYRheIAw4O61xfQw4O7nFwQYuAR%2F%2FUkBe4NrU5HrVj3qo%2FyK3w0SvP4yvwwi2kQjVA0zV65nV%2FTa1m1qrL0rWPdqr32UL5AEf8OES2oPczR3dq3sd9AEfOtvYmf0vkj3blx23ud2MfbudpR2JqF1xrF1xaNtwrBqj892OYf0vwL2vxf1dQqAIIPo9Hj4G4EMDiuAFMPXYDziBB1nbSxmpt92Fof2R%2Bl1x%2Ft1wAt5wBl5tCv6uD143eZuF972RG96PhVrTOX6UPf6i7HpVnD1FRt68St5wTl5tUl5tVt5sWt7nX%2F6S23fhp32xkcibhVecDafeSXrnw6jnD%2BXnTSToETd9WfrUR3uqsT3rCbvpD9Pbwwjq%2Fv1d6hWH6pXW6tUG66ta65GI6wfF69UD7L9O7BWb7Ns36Vdl6bte7SuK7ZHI7U0e7jPopQmY7s3G7msb7xVH78OE73XD783GqaNe8DH37O8%2B7adY8RWH8Yne8d8J8qte420454f53isZ8dd55pt66NWm6M3m6OHxSHWe9G%2FZ9A0H9XNf9Y2V9efe9UMZ9stZ9nFQ8wuD83MO981G91eF91eF8A%2FF8Pee9nNO%2BNWG%2BKvf%2BFdF7i9V8leF8gne8g0H81ME%2Bv9C%2BkkN8LeZ%2FK%2B%2F7Gdb9Csf%2BK8Z%2FM0GIJw5Q0ewoMGDCBMqTHir3MKHECGqa%2BYAgMWLGDNq3MgRQIJm%2FuoiihxZ0JstkigjAsuWsqXCKMZCupyJrtwtmjiLDcTp0h0YTe54umwotGU2YEVTxgMEKF5SlCufkrQpdaQ7TWCCVo0ocKtIol4XTqzYsaxZjR9lhlVocu3DqG5fxoyLkCpdhDrvHvQJVK9BsH7RHQ1McGlTwujgBrYb%2BGpWxF0RA9Y79qzls2kRt0WsODBMtXoZB85LmK%2FWwJP1DiZs2CnhzqFvlsZ62m9kwqnpVr7Me2Nmwptfs0T8mbBov6Qb%2F6ytNzfd1YFbcx6%2BWHZj2pB34nYYeHfv7xZ%2FBw4eGLbe4tURo0vu17Rk7oGh%2B5UuHPHxu46Z372NGj5liuAF%2FiieX%2BT5Zd5d6Pl1313s6eXedojJpxd95VGnoHXtYUcYf34555Z3AfI2oF4F6nUgXQnGpl6D%2BC33XoRIscaUaxXah6GDGgbGYXP%2B3QViiJaNeFeJd50YV4p3LUgXi3Q92B%2BMiFFooIUqzvbYhto92R2AQIoIkmYnTaceknQpGReTcTnZYY93SXiXlCZSmeSN%2BOVoW5ZrEvZjl2UJSReRdBnpFplxmekWmm6pySOUMh5Wn3F0NmmnXjve5eFae%2FLJkZ9xARqXoGsR6pahayG6lqKWsvlcjNHNKCakiOWXnXqXhpWppmh9CVyYjxIm6lqkhmVqWKjSVWtYbtIFZ5Fy%2FpYZaZqT7ofnoluShWufuo7Ha43EzZUeYsN6VWxcx3qVbFzLBtpsoc8mGi1dlRqr6odcXtsRp2556haoYf0aVrBehbvVuG6Vu9W5bqX76bqjtnvqu3HFS%2B68mNZrr2%2FZErjtlGN6e%2BGK0zbpIoSEIbyWwvsyDKzDxELslsQFU2yrxRdnhO9a%2Bq7Fr1f%2BegXwVgJXRfBaBldlclgo66zyvyyL6%2FJaMBMts1e31nxzWDmHtfNWPW%2F1c1VBSzV0WEVLdbRXSWu9tM9ND%2Fx0WFGTPfVWVV98tVdZe7V1VV1X9bVUYT81tldlP3X2VmnrvbbXbQv9tldxEz53VXXbe%2FdW%2F3lvtbdUfUv191OBJzX4VoUndXhViWu%2BuN%2BNi%2F34VpGTPrlUlV97eVWZV7X5U50%2F9XlSoRc1elWlF3W6VKnrvrrnrQv%2BelWxEz%2F7U7XjertUuUu1e1K9J%2FV7UcELNbxUxQt1%2FFPJa7%2B8782L%2FrxU0ZM%2FfVLVa3r9U9k%2FtX1R3Rf1vVDh48n4nlI%2BnpwvKenT3%2Fq81z7hve8p8SPg%2FIpSPz7dLyn5S8r%2BhNI%2FofyPJwHEyQCTUkCcHLAoCdTgAv3XQPE9MCkRJOEEhVLBLl2wKBksygZ50kGefDAnIUvTyLQUH1bNx1W9%2BpiV9AOvIE5MTzSr2UVuKJQcCmWHOOkhTv5%2BSJMQ0mSERSkhTU4olBTqcIUebKEAX1iUGIZxhjypIZCoyBMr8gSLNNEiTbg4Ey%2FOBIxCEeNMyMgTM14RjT5UowjZKBQ3BhKOOJFjiOiIEzviBI8z0eNM%2BOgSP%2FZkiHkqmREnhERufes6V9KRE2MGRWtJESOUpIklaYJJl2jSJZxsiSdbAkieCNIlhMSJIe%2BIyC0q8ouM5IkjfQlJmlTuBXXgwwouooRAhMFa1dyCK2GZMRJtLE4dA82cQBYrUFKriFEqJcdgtcRZvahaZSkCPdYhD3m8AABh2Ic49HEJAuBTn%2Fz0Z67EOaRvMiuc7CTMLlPSS5z80iijfJM6wf6Z0Ayl8k60auZMqkaAYVjDAS%2FAhRIIIA5cOIAP%2FLABSU2KUhtgjKB%2FMqi6EHrK0aySWOZMFaNa5ShTKhGVTIzYTeXWyo6kAB%2BHsEERKvICfQQCAEXoxxZS4FSo9iMMGyFAM%2BKhjq569atgDatYxwpWd4yDGO4gq1rXulZ3EGMcaWWrXOfa1ShQg6t0zetY08oLvfpVrO64xjXi%2BtfC1gMMoMBrYQvLi3IQdrF5NStaIfvXegBCEPWgrF%2FdClfNRrYcvHisZ9kaD1CAIbOjnWtgB5tauvZVtK0VazymsU2M2AAf4hDHPYahARvwQw4A6AE%2F4OBb4P7gtwAIwQ%2BWu%2F%2FcIlgCFNCNrnSnS93qWre6mpDEdbfL3e6CQhLa9a54x%2BsDR4z3vNzNribQy97qgre98I0uKZgACFLEN76SWO992%2Fve%2FbKXFGAAg339i97%2BEni82T3weUmxhygMWMHeNTCE05vfCXvXEgXoiA30YY0QAGEfciguAIor4uMCVwmQSHGKDxHgFrv4xTCOsYxnDIYs0PjGOKaxjXPM4x6DwQdW8LGQdTzkIsM4Czs2spJ9wAQlOznJTh4ykqNsZB%2F4gMpFnjKWhQzlLeeYCVf2co%2B1LOYcd7nMM9ZChjnyAnxAAgAkvQRVnxrVMKRgH3ywKlY1EoCtuuPPgA60oAdN6EL%2BD%2FocaDW0ohfN6Lcy%2BtGQ%2FnM83GHXSUf60oZmR2gxzWlCC7bToAb0YUlRj1CHmhfsMDWox7EMVXfasph1NaeXAVdZX5odibY1pOth2lLrGtKf%2FjWkUS1sRsdDG7W9iAOs8dGjHsIB63AFAeSQUmizYtopfSmY1FPLltyyJblMyUJR0lCaPDQlwaTJMC9ZzD0e84%2FJxMkyHapRl9RtC%2FpMBzzuSe1h4OPaAKgDP%2FwdCoHarJsF5Xa78%2BixKil0qAPLqbx2esSerrOmOLoopSAuu6LGExKBuCectwAJOWjAIgQguck3hfCYKpymP7VpOftCMnQ2ikYXj3nGg%2Foyjkv%2Fz%2BOv5CZMOyXThcHc4TIvjcSfKMp0WpyiGK%2BTxqWVUaAHPTwtJ%2FrLuzX0lZFT6TQnol%2FSPZN103LhuHx3T%2BJNk3mbu94tkaSAsp6voqfs6OMEl88Ft3RWNv3mr4q6pKbexKrD8%2BpTpDvO7K40vDvr68o\
JeyhtzlOcQ13nUuc51PYuQatfPZYzmeVMup2Sb6ck3CgZN0nKPZNzo4TsLjH76NEObrXzku0zcXvr4Z4SuYMH9C4RvUtIjxLTowT1JFG9VfouNYqT8ukHrejO3Vnz%2FyRbisBvifBbQnySGH8qttcl54XHfKL%2BvfKBx%2FzgNQ%2B38b%2FR80HPfkq2n5Luj%2BT7%2FiNB%2FkiULxLWD4X36BZRyjJR0Sd40EJ4QmV4fuF73yF%2FKEF%2FUEF73tZwefdwM8d%2BkuN8EgV9MyV9mUd9YucjUfRKDkgSEEgS9icS%2BCcS%2BicS%2FBcR%2FtcSrkcSsNcSsjd8Enh84UduuOcSuvd%2F8EeCioc1jKc2jscukNce5ZeB51dxlleA6neAGAg77vdIQYh9Q4g3Rag4R9gwSeggS9hxTfh8T9iBBuguCNhzCmh9iJd4Xbd4W%2BcrFPh4eneB70R5Tph%2BSDd9WLKGInh9VpOFmLOFqtOFXleHYDeFPzeGG1iGRueB6weCk0cZwZAAbYh1b0iEcegZc4iEiBh5iig%2F%2Fxo4gBz4iGf4MGm4eX6oG5V4iR4hiLhDiMpjiEzzhS0ieec0dgKILgRohlGIhqEIQVXITHoSDIBoN7CIPbKoPrTINrYoMrioU4xIio54d5AohZKYi3%2FoiiU4Eic4EikYESsYES0YES8IETGYEjM4EjWoFL1oir%2BIisEIQ8NIb1cYiJmohZvoF%2BMIEeUIEef4EOmIEusoEu2IEjfIfTkIfrHSgy3xgzIIgCTBgL3RjSLxjSIRjhDRjw%2Fxjw8RkAsxkCRRkBFxkCSRkPW3kPm3g6vnkCkBkeookSNBkV6Sj4O4j%2BfRiV74iUoYjRM3jbxYitZ4ii2Tiu23inFBk5dhkf8RgZEqoZL3p5OHaIGJeIe66HTV2HjXCIzZKI0LOIJYaJOxiJMIIpW1yJNg6JNMh4dkqIcVaFHz2Eb1%2BHb3iIxiqYxkiSJm6YxoeYtxaYVAmTDvOJTxWJR%2FqUxzuXvFeIyWk4z4s4wK1IyM84xCpJZ%2Bx5aN6JZ0CFRd%2BZNfyZi245gYBJkqJJmsQ5mJEoaLiJnUqJmeyJl9aJXbeIlMCRFOCREa%2BRAcuRAeuRAgqRAiORIkCREmORIoGYE20pBGCTmJCYSH14a1%2BRC3%2BRZQqYJ7OZl9CY2HaY%2BBeTKDqZVE6TTLSYVISS%2BgaT2iiUOkeUamyTyoeSqqKYrdiTTfaYT%2FWymPnbmWbEib6VlF63lI7ck%2B74lTltl884k29cmF92mY%2BXmZ%2Bwmd%2FVlH%2F0lMAcpAAyou8dl5B4o4CVqICyqe29l2zRmRxWiJ%2FHmXj5mXR3Kdp5mdlRmiirmhqNOhs%2FihbjOe0DOiMVmXjYmio6mig8Ki7umiqVmg5seaQZmV9hmeNwqjPqijBCmTIqGUQRKhlTSh7FahLHShEWekTIikgimU4FmYINqgBrqArVgWBGADKoVyIfCmJUAWGvADKXAvVipLWHp2WppGXCo0GSpDo5ikrrmTsKlK5VkxxxgCuIAP%2BsAKFfED8oAP%2BMAPWwAAP5AO%2BkAPezZQ2zaoQeqj%2F3xKpPDppWIIpt4ppktKpk1qpkf6oBtxCfRQBGGAD5U6q3ygBnLwAh0lDj8QCvRQAtq2K0AaKkI6k2J1EB%2FUVX00EMqalk5KojKKPDTKjDbqODgKP1A6klIaEVXDAfLwZhoQAhUBCevwAsAKAM4GAErQD1MQrNoyrP1SrCLRDfRar%2FSKDpNGEP8TDvQaDj5YDP3ak8%2B6o9GKPtMamdXqOtcqjIc6M4B4W7gwDOvAB%2F40DPsQqaHgACWGXATQsR6rAcEAquaTp7OnHkwgrxABDkEgAifQsi1rAjRQBZ0QEt%2BjDlAgAiJgCKB6DXqAs0cgsvb2E0DrUN4QqG7BDkzBDv%2BeijUsOZNYMbRdVAyIAQ7DKRZgGVz4sA5TMAeUSgCHkFRy0A9ssLFzAABTwApom7a2wAu30LZu%2B7ZwG7dyO7dxGwuxQLd4m7d6ewt2u7d%2B67dsawSZwLZ%2Fi7e8YAsogACKu7iMqwe80LeF27a8sAMIYABiQLiFGwt6YAAGwAK8gLmRG7m8kAWSALqhe7p8e7eou7qQu7qnywt0QAem67p%2F27q0m7mqe7uFywuSkAWzq7t5a7vAu7ex8LvDK7e8UAkmuhFNdQkAAG2hgBHQ61t5BgT8oAZw5gDaq70gqw7l8L3gG77iO77kW77iKxgnYb7qu77riw62wBLsG7%2FyC77%2FJ%2Bu986u%2B6gAOLaC4FoCzOKsAiusBz2AT4etV5vtVQaC4eMAO49tVBezADsGzPmu%2FD0zB94u%2FQnvBGky%2Bt1C0G%2FzBDpEN6QvCG4y0gMDAJKzB7gu%2FKXy%2F6OANN9HCF6wOTyvDLlwMUmvD90sUOhy%2F6mCMHaEB0fa88AAJGhAI7aoB8nAJGkAPb7YF%2FaAEWXWnoUeyOLinD7G%2FCHAF5tCvhiABijsJ6iAbaSUNz4ANf3YQ6uAO2PAM4TAPCYwAfeAUf7bG6PAMz%2BBV7tANz9ANWuEMxWAO4eCv6LDGaRUUeGzHovOn71ewCHSwpZmwzrOw9NiwVHO1AHAI%2FHAIl8AP%2F0rQAOIgD2oQCvtQBAAQCvjAB9YgDifHqcK6tPEKtQihxV0wD12VVicQxmPcVYuQBB6wASLwBKVwGu5QC0kgAhswA4sQx30wD6sQBEEQB6kQBBvgAUkgDOFQBiewASqQBwRxDY0AzV2wxnkAzaUwCTlQzUcwzItMqqt5lYCXRHv4gbFZfbPJEQ5wCOkgDmNgES%2FACutgDZWaXJewDsPwAywny8FnxQqJxQtBy%2BowyN1ACGAsAb6gDn1VBYyruBLQByGhDqkgAotrAAgAxnJsD5uguBsgASStuC2QA5y7uHkQWJtrADOgDvFQBSSdA5W7uBsgDAqNDsH5FdtakrsYpv9KqqBMaq0DixIwGaU8%2BrwGZxEOMNXPGwB2GtTzx9Ap6dAKocXcrAIqINIl%2FQfuAFp%2FsLgtUAW5rLibEBQzwL9VUAUbsLh9gNKLawFQcAQA7NJVoMUtYA48q7g5gNNX4NNVIASLGwfPOtQRUbULUZwicZwoWJ3%2B2LT955JOna3CWdQPQaWYQcULDa88g7IQocUbrbgiMAlnbQttDQVv%2FAxxjQA54A6pYNKLMA%2FzsAkLoLh3ndKKawj24A48jQAm8Ax4jQAW8AzcoAeEbdj86wnz4A5xDAWNzciAaar0iapKrapMzapf6qqfJ9rax9XIyXVSocUncAQ74AEeYNIIkNv%2FlcC%2FtRAU8QDcy70ILl3IBDHbv63SeewOSaC4UMBVtQDGG8Dczk3b0I0AQWDfbkDg1%2B3O8qndCMrdHrrUCtvUJPHU2hrV6KnVD2jele3VCUHL9qAO0oANtTDbMFAO840AItANHy0MFlDSwqDfCHDTBEHdvp3cJxAOazzgCBAHBo7gCv7c8XDYCNAFThEPZSDh5Efh9vZVBVEuVl7IXhV3koWVsIydhYpRsqkbmNyjnSrPOSni6EDLTtFV89AHKo0NMe4B2FDjNy4BOa64PF7IzAzkNC7gimvk6nDgCJDgza3kTO7k%2BBrlCGDdU87hBuEO4bAKqVDpz5BW6HAs6vAM%2F5UO1OogDJ2Oop%2BeCp5QCV5OP1tOnTaS6vRsqGOelGUemmrujSQOjpa9kaadxYr7BcP9Z%2FPA6Bsg5329CbY8D2ld6N0wCQF86eqADR7w48B9An9O5IJO6Ia%2B4IW95Iqr6FAu5eKD3dy6CDPAAIvrAV1w6cfiDoaguGUQD9re5EltEPHQBdse79KK4QQxyISMEJteC7UgDLg5HGs86wpRDrbg77Ww79hIGWu8I6me5QkB8Y%2Ft2VZ7nvZjpYYMaBKfENO5EEZiyASPf1osBItgCIawCFxg0jkADrYw2y2wCcIwCWRd4M9Q1whQBd2ADfQO7Yor7UMe6Ede6EnO4O%2FO7f%2BM7ujfTuUzGeGpbdyp0FjouO4I0O5Fb%2B%2BFcQWcywVW%2F8gY%2Fukz0AIzkMcI0e03r3lRIel%2FUAsEXxe2INIMkAprjxCyohfCEAzB0CDdYPcAf8d2%2FwwL8Qx23w0f%2FpyIR0cqPgmIPwmUIAx47MfSWesZuS6fPgmLAPd8k%2BsP3fSMuwiaRgnwDd8iANTusPMyTtY8jwA%2BD%2BhFHvTXjuj1vujeLkDgHpJwrtJV4AazveO2AB%2B3DBrqzu7unuiKVRAQr8dlIAIecAa1MfAE0az3Hu%2BDDsB4TlBQzrlIrxAroQ6bENelEPcGYfA2b%2FmR2CSTIAHmLwbXEOmLYP45sOjmr%2FX%2BCSHg5p8H9g7ZER%2FrIV52hNDS%2FLsBFgAQKv64Q1fQoEFvtg4uZNjQ4cODwLI5dIfIAIIZEDU%2BjGJM3UaQBlUgIFmypAdC6srdUrdopMkcqT4WvFLSwIkjCAzksbeJpIhu6twdMWDATTx1tUhKeMZNz8UZ6uJVKdolHrp4ZYo6IRgSojswmrp61ajumQiSOYLFu9qFpAE97NAJ7VbKkzR1M90ZIlmGbU0EXdxJe9bNYLdnhQ8%2Fk4buWTBaCgsSrLUJm7twicORBRkPEKCrG5NKQGBB2MyD7txYsMBlbF7YBSV280Ay1diCsRfmNci7oe6C5Wy12LBhFWrYqHcD9%2Br%2BThMY3JzJuoNSEsQv1O4WkYSB1S2CKqEXugtC0o54jbfKSWd%2FUF0zBwDkz6df3%2F59%2FAASNFNONt4fkwJEwI7%2BEJKsPQQloggRklpAkCOPHmSok0kqtLDCTZ4haCV03OnGEDJCXCSc19SZJMQ4nhGmwtOewTC3VCr05aNuLDTHGVoq9GQuWSqs5aOkKjxOwsnCik5CdwBEQAJZQlMHGxVyIKOScj5y4wSSPEjCF4L26usvksgQRgQPZgjKHS466EAwdaRpwQMRnnGjAw%2FKIEgdT3IgTQQyzlCTkCMf9Aw0kEYr7bSGpAkmmGdy8zCVUmQh0R2JlEELgU3CMWeycIL%2BKQUv1MLpphsS0alFUtzykqaUYEpFRzhhFt1sLnWEKaWURlP1sJRaSCzwq%2BcCJXI3YSwwCZGxtCMpo3i%2BC485d5JgrQ%2F0aC2Ql%2FVy821Yh96LLz9ww7Vvv187I2QpKK64IgjSlsxlprzckTeh3ngTCkjf7u1N3gLj3XYyYryZi1%2BD3KFkhhmuUE4od8oFqSOH2ZN3YoobDu4WR9mKx%2BLxNI7XYoZfI3gyedEpxpmRGUZuZCLBEovbgqZalqFnpMIWneoCPOFHLxHwKx7AulCnBZI8weylFkjcDoEW1OGCJC423qTdktqlFmasPqu221pIM61Ad%2BwwwQQyGu6GCxX%2BFFiyhS6eWaYREdRGAM5NGv6jBWNFSGJI7UQQwQ5CZpBAghYM6codYaBAy4IW8phLuBlM2FmoTXTYgKQNZjAE3me4WFwFN8KJeLxgsXYoHjsCDCK7pZn97gp7upEFm22fqaUWbPY1VZaglLNF07xs99V09%2BAT93hxyW0vnnMR2KCbedhqHoE%2FrvKwFkMMqeUYYgyyvRZ0hFmkV2FqmRGdUrSnVXxKNEztmVIISaUb8cLxpRJaPPTEkBln6uZ2YRQsHKsghCc0NDqHQIx4GuHQAjVyMgd%2BxUhYc4cTSCKY3RTkFuzgy5LKYIjyIOAIUungz4JmjzKQxA32KAUDllL%2Fi3kA5gz2%2BI5V0BFCD%2FThDzkoydVgNqit%2FaZrhypQVooChaskQUAGOEIxGnERmywChQKygEx6hhYoImABk2hYMIgWIMEI53IISEU8PGEsARnOLDMQ0BNEFxLnQCeCuQkHG0VIGgn8aDKt8w5JqhCHtIkACrW40xVa0AJAzSUccZiBBRRggiPcZi7CYIEKoCCMJIiAASooQ1Ac6C3khRI%2FymMP8zBXs7nQhiR5QIohVNAuCXhADJNJggQs0IXaLMAQOojlJEIogScIowtoFMHmDOKG2jSIEDCSwAKS0IdLSaAKotPO4HIwmU7kQG4b6MIbOaPAOTKkgeFkCATJOZ4J%2FsIsHC%2Fxi0PUkxOf5cMe5sBSHudRQjAFxh6eIIkOwmaSzRGNAamg4QXnMUQESHEe0jABSXzILSAWaohfY0hWSAKFeZSiQZ6ohR3kVolVDKFdOjiCLFLRLij8AZ46wEoHEaACO7hhjM8KYQv6UIZ2TaIdtkhmKuaRszLUohQhXJ07AHOCPKyGJAOBY%2Bnm6A6fLEkWX2xnh%2FjYLJIYK4si4Fl5DHCeJ%2B1AQBLoQ8NqobYNeCCLBqiCsIgESlHGdT6klI4pnQe9eMxjakvtiYCWKi94mqQUbFSABLLovADlUSgpFJAdGpaKrArIDfLiozvOKKAkmAOBCwHnOS%2Fm2YWY%2FxO0HUont9QRwraOp2G8wAaWEACFMsT2JZOwBz6BZtBuLO4ZSpRbFYbougvaY2kn8ORQHBpEBEVUNBNF1EIs%2Blp7TIIkAglGSyaRClt4wxyXWkX0qnBRe9hjaLa5Z5aCMQ97AKYK8zip84SRj3ykDjw77Wk8dHBRSiDmD6wyy%2BUkkAr4ShcBq2uqHJ%2BaMyHMgwwkIe5HlIWRPi4rDl1o1wiNOyCkKHFJSSiDay2winggFAFXsIMdN4BK4sFVrnGlK2fsKoEyxGHCY1RALeLhhIsEYROb4CECkgDYkhwBCkdAhx0lEIdOaBgBIliEIZLZh4OikQydwOmh4gHZBi1iEv4vyYFQ%2BFhkkhxhE4QY4yLcmsAIjXacoxUtaF125rp%2BFyMLM8QipMHaSxWlKG8hRG2%2FdNvAbEzOeRhJEHg4AzeQ5AxsqaE9GISAG8wkHolGwEOHpdyyMLeIjMWoL6hGuC4YjRjZyC1JSkGQHg8hpiVepZ8R0GWsMDYH7hCwCGQcB8C0ABw8JS8ZsriBIOThGRvjp%2FPcIGMyoBXFGokjnCVklmRKEaFmturMsLrkZ8xjHvK1wFrgaYeDyo2V8XjGF50Q4naRIR72aG%2BNNysdFa84lC32z%2FT8SoaPrMgOz7CHOxh7BCC%2FOi%2BGsWMS0EuJkig0hDyJA0mCEF57yPkP7P5dik%2Ft0TwaeHlZliWJCcIR3g5CwdmcTTNo1wzaNnv2zRTMQ1aD0RWz7EkP4LhUErrAhS6EqAuLKK%2FP8mkVWi%2BLNHZIoQWwtACZXLsLws0S7ToET0sTCdMQMRRFnctppOQBjSYJQnZLjYBTf10ne9YJ7DoI6werQB1KGvueDbABbPCajO54RghN0gEoF7vtUGTKZps9x%2F9gThjmqCNJhODgqzrrKv0t2jy%2BbQ8lqeCN8ehDg9Dh6SWdmvGKXWC85X08envFrgLygBt481g7DOEEcgP4hY8yFzBTb2MClkB1T%2BtQewiBwVDgvR27QPG5nensGsdIzzzAeyiEUPLfLP%2B5Z9XBC4%2B5R2NIMV3Kz7lymKkD8yKkXxJLogd19NgO8nRHHhaBKtsGDSliJ6PeEdBgpR%2B0XRM%2F6BijLqGpP6TqzT3Ic0WuDnuQkxwYI50QA3L4ulNbp2WpAt5TlyowhJ5DOwFrmg7aAOSrgiuoAjLYtZ6SClqDgrQpiRPTqNKAAgbEwCroAk%2FaiL%2Bbox6TgBM4ARVAI8V6MOAascVDQMczD3toOB87nKWRAGEQBq%2Bpmc3ToxQzns%2BbN%2F5YnuY5sj%2Fogz4wIJgTBh7aMzRqvW8TDzsys6BjGtG5vUqbh%2Ft6Cz3TiRy4sizBi57pMhvsmb3TiROYFa%2ForOubhCZwQC7%2FmoxJwMAMnIR3CwnrIyfsgxnVKIkZIIM4KMMBs4V2oDQLWIRn8EF7Sr8Lsh45e7%2FMIMDUUrqrKEMYswPXqjTkWh6tkagijJ7pcwf%2FC7FFsAOee4ZNCKEdOEDuih54IoN8iB5DmARfIJHh65AJNBEGA0B7qIVF%2BBTh6MBJQIROMhWtKxrMM43wEh8D2hSQaMHOKwWq8Su%2FsMEIu4IcvBRP2MEB6UGHk7Th6hSvOY0jDESy8LwlBJfQCwm7eh5V5JiCCKEcyANZoDQtNA8uJAkvnMAwDCEoC6EjyAM7sIM86APzcwcs8wA2HL437KATaEiHhEhDkA47JCcjeguuoCUo%2FzKAOChF9hjEcCpE01IHwBAQFRAGbCm3qimJsomHDlI3mQm0aiOJH1MHsSKJPYyHp0GAqFGHVNg6knAhUsSa%2FOMaPLqCEJlKMoBATqOhixCB%2BemGnGkCW1QhRBCG5tmARfiQpfAEV5NAy5OGZOIC2%2FmiJzgHuUuFcBCBouACbKgLY1GA2yjDIxCGZxCCi8gBOmQ2p1ogNFkKD1jMxUSjE5CGeEi8BukGVtyrPIqHx6M9GJKXnAkCd9C0d%2Bw8JZzH5GnCUhrLZeuNZ9hLXwivfwu48zCILpQXg8wLhLQHSksCiJMxSZTINRQKi2wdqFrD8JoENzAEWfDI5gNJSvuJ3v95hmQSSKxRyacqrexDhzi4lKXYEndQD3cIhh7LKnzrEERgjclyh2GyADuZJBGYFnmJA9ZogeIiA9b4AoLYJ8uxgL8pw%2FsTlFNcrm40CSaaoteaB2FIJgnYABqsBG9whyGwiUlAhy9yHrUxgCRoqWVxMAGTvCQpCQuApVJgh7mcBx90ng1olyQQCkqApa3bw2w8TNOBtjDpBmmQhm0oBj0oiT6TzIsqHzu6pgs7D2y4lBmYhFJYMJKAQNB8Bv9CwhgdTdKkR9OsK9Tsl9VUoWdYhEsJSAyTTYKkzQY5SIeaB1lol6BqHgMgBOCjSOBMC%2BKLinCAgTArBUowgSOCR3T%2F%2BMhwmrQAMZrhNInYdBSK%2BQ2KWRh3uIZrGNTrs04KwoYL%2BZGPUA%2FYKwUL4T%2FEUAx0uFTD8J7E2NRLdbqCQIzIaBPkTAVG6YbcWyWUrKv%2FzLQTHRxYhVUowM3BaSt3KIXw%2FIlFWIZsqKaSmLhaeNCqqQLa2YvB0QENHZwZ2Iwkic6X4iLhOIHBkSRkCpAhQKW%2BMQkPYKoCGzmJcanbgI1rKIYfBcdry6p22SJ5EdbzgMMAgYK8WNK9dFKskccoHZcpdbE%2FuIi%2BcwhGJMAlox%2FdM0nx%2BKKCnC4x3YmN6YLD8skOwbINqMgMfbDuoLUARQATSM2HWc49bU6B5FNADQ3E%2F7GDJLA5T9iWvEiFMyjZMlgFkEmFP8ADSpiEJ6gCQFzUl%2FmkQjUISRVUfdQWeGEO4EgO91CHbCAGuhujJzAMT7gUSvBWe2xVjQiHWFkUq7XamlEURpkM9MmeXtQQBUHK7JmERsmLTvBamfCfRQmgUF3bgsnSsb2MV7GFqp0Vumuy7EkF2JsMF8me3pwOGK1X3RuwhXCGa0idwooRa0NSMpjQDTCcp1NVq5rQ0uimeCWNDXBH6FwSes0%2BKL3X%2B6jHbFwEyYEBjc0NX7A7gcgBGSyFqRgbbkUHIRgbLoKqsQmCMISCsVGjRWqorFLBeI1BM%2FGysUlRWhsbIhPGFpAbCf%2FQAZdVTjzFP0qTVhGyzSVxrUCVqQB5AlRSh27IxKUog7kISQ8gDQOANUJk1HPq2dHKBmCYCyUTgRBcMrxwSqkti%2BTIX3z5l5CxGAUZGJbZ2XrhX%2F4V4JUQWgF2jwTu1gi6nVpITWdwhv%2B5HWmY4GCYi%2B8RFUP4gz8QhrEonwfWixrhYEPw4JkIh0q4nVkJBwcuzHr9XNCtD9EFCVEZFapDh1VIhflxh2ywBVJBhxouzBrGxkz94YII4twgNx02VX3sBltgBoMwh1GZFSk24g4JhyUGn%2BjNU44FPEobAqI5MWyojRYIoXaVryWJTtzNiyuAIgsgQMEAWZtgJZyFWpj%2FYV%2FQct%2B5wAa7g6IW2IQthoinJKf%2FVTOMGa0OCdx6ZQ50iGBr2V%2BgjZeNWRgEZoufRQdeIOBALhQYjuG5yld4%2B5duiQ1vIAbk6BdKpuTlYGR1GLWifeWiZWSy0FMvvqic2QQBqwILGhADRaMkqIVuYCwEyIN50LsuAMyc%2Ba95aM4g8AQ7qK46RmR0wGPP0mNF8oQ4cANtngTKJJ5BDqdCNrlDHi1tBC1HlmZqJid79WT9AOVzohdpDmfQouUIAtkqUJJsJglC2GU7gLyfuAypeIJ%2BUjA35Q07KgPcFLxJVjn1Jad0JidrHphV3GRBvt9zkudzOrnrU2RyOmdEfug5%2F1pnT57hCIJnRMboc6JnBwJZKJCFBUAAHeChPNKwfpYvgIuZDpqBCvqSmMnNhH4pb2LonB0tkJ6jiAatb54jlA4njSZEjg4njybqbAEtkY5hknYgkx6tpQ4nlV4gkHUCdMASBVAbFUAHmrYHmwbCjQOq0ABZ3ZzeFRRqO%2BaWoo6go%2FaspI6grY6gpl7Jp56jqAatuhbNb2FnGXZncspq0NrrCOpqb%2FZpJUMAJzDHfm45CPuIZV6WnTwCkRXWWaW0jEBklvSswV6guz6nvHYgxl6gvn6qv46gwCbtqXa%2BTmbnq14gxfas1V4gxzYdt7YHy%2Barb5uHVRA3oViFZEJoJf%2BJRNpsF0P4aSQS7YYOp9ImntMGSYsm5IlA5NaOoHL2rNhe39k%2Bp6oG3dsmnty%2B6O1G5N52ytzMqJIYKMyUzsHFiCAYoxPI2i9iAB3gpbQIB5ae65aZ7jmqbtO57j3NbnBeb3GW5u8%2Bp%2FB26PFW59oeacQOp%2FTWbmnmYoquK61gonj4ujmMhyAoipP0XrsTwbrpkFWg3GX5ESOyUAFHEgKPIAPHGgQHPAVXagb3rO52oAfvaGfY8Bs3rQq36gufowxf8A1vb0NsBCSAgj7ICzvgvTzIizzgvT1Uh3D4gyBQARVIxFx4DWywgxwAc0QrrkWoAiTAgxl%2FkNEWb2nO8Xr%2F3nG97vGMHmc3e20HinDqnvBwKu97PW%2FTWXIeb%2FIuDmno0wtLngy2WBkuZ9b%2BEAog3gzqcxREdfAad6Ai5xY6X2k7V208J6cfR0w%2BXyA%2FL3BAD%2BkjN%2B8kL%2BkD0epRJycnh5lSXyDq9O5NX6BOH5ZP9%2BpQX6DdNp1bN50gh%2BohR%2BdVjyCRdoAfePZnTwH5eIEt%2BAH6oHZrH6VXx%2BpYX%2BxZ5%2BpE52s9R7lkJ%2BddJ55eJ5Jf9%2BZgJ55hx5pip6BTJ55Ut%2FFl%2F6QK%2FwF%2F4Ad%2BwId%2BOAQAUIJ7uAd9CAT5mIKBL3ht73D2MPQ7R3SG54x4n85yd7NzN510l5B19%2B12N513%2F7f1cd9oAxuteuf0eyfs%2FNAAJVCCIggFerABArAGawiBQ9CHF4j5mYcEfHiB0N123O523f72Oap1bpl4mMl1IL94rMn4B9l4%2ByWUkxZ6BzL6YTl2wK54wT75JCzs%2FAgBeJADAEgBfAD4IuiHLQgBfDB4JTD7%2ByCAZnjzB%2FGG941ngZHmjoD79qD6YSl54gELUMD79mB6BHH6H%2Bp4rPn4og95QgSFkTdnrCdtB291ALgEcYiPHuCHOQCAy1cDG%2BAHsP8BzweAF5gC0if9LaCFCE591V991m9913f9YoiF15992q99Z4iFk7F93d99JniFbNh94Kd92Q9%2B4m99W7CF4v9P%2FtTPhiyQhN9X%2FuQffugv%2FmLghekv%2FmygAzp4%2FusHfl7I%2Fe4HfukPf9vPBknIAu4n%2F9o%2FfvXf%2FfFv%2F9fPBlpIgHARezWQD9AH%2B86Xg%2F0HgPwHCAA%2F%2BBAkGKgYsmIKFzJs6PAhRIfAYkWsaPFisVi2MHLsWMxIJo8iK1IcabIhr1snVxZblkXSMpYnYwGTadJWSZsel9GhE1OnR41APU4c2nGZpCw%2FjV7kxYspx5xQIyKjlQAA1qxaAajBlwJrDH58BPIL80IsgCL8xmzN2swdurhy59Kta%2FduXW%2FA8PLt6xcdMG9%2FBxNGF8UY3MKK795a7LiuM2ePJ6NzBwZUYsr%2Bi2%2BV0%2Bw4217PiuMBAhRPtOLAqAuXa7x6sDtQYDK%2F7hu59mDXuPm6a%2Bag7VZW1ghg1QAvFIAw%2FX44kIdcORDgCZqp293Xmy3rfYFl0873cHXvdVuLv1tMcnm6ljXRTo%2BOs%2Fu5oOPLJW2aflzu%2BNGRx%2B9O02z73bYffPSp4xtwWTmwDnJZHbLPJesM89sh%2BlwCz4TSUbcfdvsB1t1%2B4OHXH37n7bdee%2BkVSN98%2BNl3Gn76jahbfP8FiN%2BA%2BK3o3oG%2FJQiAA5BsoZUDfAxzyVdAGolkgtOFR1%2BH%2B8mIn4j0kUifif6BwR6BneHXIn0vSgmilTS6Z2OK5eVI347p9fj%2BI5xxavhkfFHGSCZ9VcZ3ZXxZ0odil%2FuBGZ%2BYd%2B7HZ3poCoiejl7G96ackcbpJIfZjemhnu4hmp6fNW6Zpnhtpjeoe4XSN%2BWeZiYKIKjerRmfqOJBKimtbVGKn52n4hlfpultWl6nZ34a6JehhVkajLoeqmp5iuLIKJuO8ohgrdVmdSuUlhoaojF0%2BsossNAKy2WjghpLKLKXzngiq4t6GKt3s1pbK7Z1aqsst96W96t4wSY6bLnF7mdqfKhqCq53ztL3qnvwaifvvJLW616uBe%2FqXq%2F7Iuydv80CHK25A6e7bZns3riwuA1L6ya1EdM6cXoVu2cwxt2uu1%2FH4gH%2FGjCL55Y6Mr4l%2B9fus%2B%2BuXB7ELk%2B6Ia73WoypzUKXmLLH5IIssItAP33zn0SjbDR%2BSSv9I8zlyZwezellLB6%2FHFOt88ewHl0eqekRPPPFGpvcqnYMqzh3vC2PvbS%2BZjuNN9SFe9e2djknHLfKIWd9H8mp7u0usY8KPjjZTGfrYdrlrb34xo2%2F%2FbjVckt%2BLOVBWz70yfH5XZ7D1onN%2BVZli3d2eaGLN7p2jFvnuHY7X92zyK1vLXWNXst%2Bune173Y77td6bi%2FoeYse9etTnwj536ujqzziXDcfu3uzhwr4w5tXn%2Fv1FB%2BOtva%2Fc3%2Bwh8RbZ7zqWLOe7PK6dz6%2BWUd9%2FtFjn%2B3c9z7rKc47vBOP77wDPOsIbzf62w3%2FIue%2F8QGwfMw7k%2FPSBz3tSA831Huf7hw4v97VT4L3%2B1b%2BRohB8NEOgdapW3nuRr9lXa5omZuWjxZoq%2FjFbIUQbKF2JribCuLmgrjJYPg2%2BDPy7dB8IERfegxIQhuaUIFCTKF2HuidCCbxhXrDmQyfSMP1iW%2BKHaziB1eFRTWlETclrM0JqwdG64hRO2S0jhJxw8TaOLE2UKxhG%2B2mNQ8K8IoE3I0WrXPH1%2BQRd3vcTR%2Bt88fdBLI2g3xNIV9zSDZKUZFUZCEPYfdI3ERyN5NcTSU5d0ncZHI3m8RNJ1%2FzydWEcjWj%2FjxgInO4SDg2Uo6rrE0r7chFPHpxgbOsTS1xc8va5HI1u0RNL1Hzyy0GUzw6RKUVjYk5ngFRiHOqVPYSF05O1VGUawRmKYV5yiOmsmtzFE8ya%2FNK1MRycM98TTRrM83XVBM11xRNNkWzTUkuszY49OYwwRnHZoUwi%2B18zT5F08%2Bx%2FXM1AX3NQFdTUNEc1DMJ9cxCXdnQ1zzUO9%2Bk5zp1VlE6gs1AzUQhEQ2XznzFtF8X1eY7uRlPiM5zjEhcYukwOFN8%2FhQ1GfXMRpXWUdR8dDUhRc1IPVNSzZxUMylVZjddGlGYTlSm93RVU0XzVM1E1WVTFU1VUXNV0WRVM1ul%2F0xXKfNVfa50NS3VzkuNWs8BjvN45TQn%2FBoYRiMKlqdl9en3UqdB5E3ujRItJkXP2re0ematlGlrxN7qmbiKZq6eqStl7jqZvE5mrxjtK2r%2Bap3A%2BvGogkzqE5eK1ppqLoiIxYpoNUNaz5hWM6idjGofw9rHuHY1nqWMbHdDW03a1pO4NaRuN8vbw%2F4WuDndHWNrq87Hui2yx3xtWAE71saSd3%2FZLSBnNfPcx4B2XsGlzHA1U1zKHPcxyXXMch3TXKfCVjTRxc10bVldXV5XlO%2BFZHwpM1%2FH1Nda951Mfimz38n01zH%2FXUyAFzNgtRbYMweuTYKluWBrNtiXD2ZlhP4nM%2BHFVLhaF35Mhiez4cd0eDEfVkyIFTPizpZYMyd%2BTYoFumKDtlibL0ZmjB8zY8VQLwWXuPKVh5QCSFw5FD8AUiCOlKQhKpaP4aXueDEbLvP%2B0D1HXk2SQbpkkjZZoU9%2BTT7Ra1PfbsUG4vjzOv4xlin0Ix3iWIcSAFChCGWIzOhUF5XMyLY6IzTKIg4qQ9M72%2FWKt6fFu%2FNq8uzcIk%2FmhAQggANYkSE%2ByCMExAGABpyTnH4UATgE%2BK4KdxrpMt82hmwmp5t9ZkrLklXNCQM1akRN4LDdFCtT0MeXARAK57Ai0TZAi1rSACQNcJvbJWjGPNwh7nGTu9zmPje6zf7tDV6ku93ufrc7iOENeNO73u5gAjXiYe99o1sdvFAHvwNe7mVEQ%2BAGd0c9wCAKfR884LwoR8MDzg1iRJzf9ShNPSq%2Bb2JwQ%2BP2Lge7yw1wj587HqIAQ8ZJDu9rXMPjI3%2B3v1%2B%2Bb5nbex7NJoA1GoTzdEBiGPoowrXlQBahT4EVRj%2B6OVrxiVGM4hNOf%2FonVHGKpbei6U5XRSumDnWot0IVXof6Kbw%2BC1pInelWP8UpRuF1prci62k3%2Byfargq1Nx3rbm97062uClrM4utPP4Xcrb71q6tdFVdvO%2BLRXnWnmz3sWtjE1AUP9a%2BPAu1PH0XXB%2F90rPud8VI%2FBS3ezv50xqfd61NPvNnr3vXCO73tis%2F60q9OC7Ib%2FvKAX7zmo856qiP%2B7mlfutlb0QZGKF3ym5%2F7JyzP%2BMznnvOdVzvaQz%2F30S%2B99Gu3u%2BibDvi5h731d8%2B83sfe%2Berjnfpb97rfMd97xf8%2B9a0YxCCKr%2Fm1Jx%2F5S8e68Tff9eejfe99F331Md31uV7qJR%2FedV%2FUud3tUV%2Fl0R7UVR4BNh%2F6ed76bV%2FeBd8gaIH8DR7dUZ3VqR3uceD%2B1V71hR0lUELZUd%2FbDaDbwZ36CeDhfR%2FcJZ%2F0bd3t%2FZ7mFR7ygWDvQeAHsl2zqUWiYUUIaAAAlAA9XELQDR1waAArdNeP2AAkQP5hghxCtFHhVoSCEWIhkTwhF2qFGoTBF2qFFY5hVmihGQrEIaRhcohhGpahGYZAg5ihDYxFGm7BkKQhK%2FAZFrLCFv7IIcDDFhJAChjhgoRCCuBDIACAEvRDHm5FqrGhFLIhJFzhGKKhGUZiGoYhG8KhGWLiGP7AGqZhGLihGXriF8ohG4oiG4aBGrDhHurhH9raMOBCVoSAPLBCCEwBP8gBzlnDlnlFE3ohHU5hGlYiG4LiF2qiGXLiG1riF4ZCCKQhK5KiKY4hKnKhKlLjKJphKaYhAcSiGfohnDSHMWJFV8gDPsSiEtADPuiDHbaFE0riOY4hMqahMnIhM46hM%2F%2BeIjRyoTRyYyte4xdmIxZuoxlWozcSJBaGIx9SITn%2BCAHYwJhhxQtsQRG8GgCkwBb8Y1bMYxpO4jF6JBXmIxbu4xf2IzaSJBQGZEJ24xh%2B4zOmIUKGIkx%2BoUyOoUPKIhZqACxI4iVQIkt2V0SOoQbY4ia%2B4kjC4jSaYRHUY0oqpRne4xiGADGGIlRyoRpI5RcSAC48JBTCwix2lw2woQOUZRq%2BwFhyoQ1o5BiiZRw2JR2uJRa2ZRo6wAuwYQjI5Ri%2BAFh210Tq5RSs4lD%2BFly%2BpVv%2BlgbYAF8C5l7u5atpwA80JucwZlZM5GFiZmIOTgj0wKsRwF5qgKsR4Q98wPv%2FnKUNBNFEroBWTGRevk8K%2FEAJKMhjjiYAhMAP0KW1pEAPzGIJ5KZW%2FKZuRsxZviYRhqaPFKcQEcBkZkUKpKZW8OZfusxz3uJjJidFnmZtOid0cud0SooDbCeQPOYfvkB34o5mfmQPzKZ6ViTn4KZcimZoZoV5bmbEgGZt%2Bshi8qVkUma1NEBthsBv4GcRRmZzCtEPpIM%2ByANDmpMS3AM%2BvGOiFcE6LOgjco4S9CJWOEAovGMo%2FAaHeuh31ooD4MI6%2BMgWRGiEftkUyIM%2BIBruvIA1RKg15KUT6gM%2BXMJv3GiONgDnEEAgRCg9CB1XqOg95OUWuOg6RIfLAGmEikOt%2FyUHPeiDOERbGExpleLOD4hDhB4CcWgAl%2BIDPyxiCPgcPnjp%2B8iBP7ihHNwDlaKlHLyjONTA%2B4TAOgzHRq5DhGpoClgDjsbj4ByCiqbDb%2FDBOwIjVhiqPiCq0kCCiorDbzjqk%2F5GkOrDMLiny4QALkQoOfqZPtCDUnoqqFaPGqijPAymtEWopZ6ao%2BoDLpjm4BTBPkSoOo7FD1SoPOThrVqo0mQoreLDHDCiO0poWuDqhf7oMFQpK7QaFRoqH6iBHKTAL%2F6AiQ4niY4BPWhocpTFFvDDK4ZBWYArVyrNC%2BACP0AqVhyCPMgBtApoOgzDDyTriEbKpirBFOADcsgBP%2F9sgRo4IgDoK7%2F6a6z%2BAyTYQCjoQ15GiBywgRxwWy5u6TDYp6T8QD%2FwgZ8Nw206B8RmrJeJQ8RyDi6kQw8EQj8k2g%2FoAyRAa60JqhLwAT9EaWVmqxi%2BQI7e6hPS7CXY7PtcQj%2FgqRLowyGoQR182SXQQxEcAj8cZpMOgzVAqxpMJD8cQhEkIQBcm9RSbZNawzBA6xicmtZyLXOOaRHgQ1ZGzCXggxKk6JCY6A%2Bc7VewrdtyTg%2FsQ8EOQ8Q6gDjgArSKYYbOwbMt4uCkgByw66ZmZLL%2BwLJqAAEc7rL6p6QILuHiw5fVAT48a7ROa7XCpiICAKENYXeFAjA2ZViMxRb%2F0BrnbIGF4AORhsKJEoA4PCHrOgABpMNVugze2i26AgAuXGpT%2FgA%2FaBsbJO3gEEAY5KHW6q44AIk8BCUuiAOqLS%2FnvAAfTGPp1towsEIJbGEjDmYgIKzLSCZxMC3n9sNgCmoIbK%2BiCePgvEBeToE%2FJFoY4EMRJAnOYWwiAu7gNECy4oMYKketXYI8OEDpRgcAw%2BrgJKk44Gmc%2FkCSLMgThgWRjk2sHUIKQABW6GtZssI6EAAGA4AGz2uC4GIgpICPiDAJJ%2Bo%2B5KUr5K7SxFpQimZ43sMUFoEjaoAMp4XAjk2QknARbqTqnnD6TiPTSuy8aMA6jEUK6MMidm4JKPH4%2F3pupq7D6oauRe4D6Zpu9fguG6SFt0Kh6%2BKDOkICAdAw3%2FZDg1qLDdjAC%2BiD0C0unlqDNTjAELsxEdMKASiBA0TIb2CAnqqjlxLaYG6BP6Aq7qgFH9QvADRA3jrA8eItUqInLghirIFx5c5arfUrzEZMCgyDPNRa8H4ZBqcBP4DyKFcPHyQhcUACP6jjpRoHcsTaHI4NH4jDvYqhy8YAAHRvCvDBPpRlIKQw56SAPKgB6BJHKKwyPrxqCNxwIpattfiuPNwDgwKAo36Fo4aAoFozPrDnvAABMsPDkHizOoIzNd%2FDNBat49YKze7uEQNADVhx1fbiC8DztQGqy0wb6%2F%2FiQvsiM4yGgiB68DpYa7VAAqECgDe%2FolqEwbUhdBePzSWgK85RshgnNCPmMOfQ8Cv6bgQjVpAEgg2QLEaacUWf8bzMcxvDcfjG8RADANOCcKTELqxdgsUeQskCMgAIMiEPzg%2FIgzVogCLbousOQwTkbSJrbR3XCgFcQlncZijIgRSOMrjWWhpgscsYbDvr65cFbw%2BoQSmzwXKYst3mpRzk7L1eAizD2nFwzg8YbQrsw5AEAj%2FkJS9Lr%2FfCtdLOSzjCrjUkasFuwT4cQgmQ7UbSgzNXi8FugQ1sagg46mwKaglAwj1oM6bSCuIiNid3ZihYdqsB8DRe8%2BDYAD6swxT%2FAOzoxjMfnMVY2AA8D84xQ4ISJPAYh8IU%2FIA1BLQGG%2BG0CTStJCKRqkVG%2Fy7FMvQWK80K4INSdnQdOiIZczFJz4tG43BzL5AGEDbFlvGxkus%2BEOkcGzUuDEf9HnWtwHR0KiL6li4UK81Oi8NXIDLeukIDNDJR%2FyjPbjRWBF31AsAnc44c9IMNgGt06OsLKAcRAEAdCG%2F1nLVWNG8KMEjGBuXYeCU8yIGgssIPdHD3loCF44NxukyGXoIc1PbTagXTCvMUJuJNHvD77nA5a0A2UzM9pHOtmLdWhIE%2FHC0%2BnLM86LacrHFQzu4lrPEiXhsbJPEi9oC2OrT3Bu%2BG77cN%2F1yIEbrCieIOG6iv78IBFyM2P2zxcisN5XLzR1L371b0dStNYE%2Bh%2F0JhCARCrZl4YC8iVxemOmc3VgCwBjhAWtO5nccya0d5CpThtdXBWQgdH3jv%2Bt7pmGkwAdjwFCK6Bgg25yCtVL7AIeQlEJhxdaevl1dLEVzCbIbBPxQBDQ8JJNCDBoS6i8M4eAYtkKwDLnCwUra0%2BKL28JooPMiDO8JB50rbibpvorGujsfJFsDDOtQ6PlhDCdSBGAa1IwtEP4xrxBytEY7BcoDrlzUvAfRrtbOwtShBIBghthdBt%2BM3f3N1Wa60BLP6qps19HZucwSlTQ%2BOy4LyPqQAtxcqP%2F%2BswKB%2FhTU88uC4wsf68Boqx2SeqSWPze7eopoDfJtzBT%2F0wAKFAj3UQQK7dMQYxzqoASvgg8O7wrpOfPXEQD8QaYer8mCOPD%2Fk9J7%2FRgrcgzikAS7QwwssrhSzOnjLSTj2gziEgiusYbdy2cveND%2F4fCZzOD%2BsIyvggg2swKKOgTXAg4D%2BmRzImsv4Li7IwTqIQ50ncB3cwwtrPdf%2FKC7Ao1KL4THzAdIKnb4GQsZvuO3WuVr4op0Og6FOYQhgyNz%2FaLc1r%2BLiQnarshjCNR%2FggjxM9rb%2FAyuowZ02QArQAy647CIufuOPqdJMwT%2BEAuJHLOVbvoQQwDoDPu7A9SH%2BkDwAnC0f1LYRkr7pRy89WIPVt7qnX0KpPqEN6EMoQDru2LmDA0AAsMKQejzvy4HHf688nKMRX3zGfxnHA38cL1AIPDTS1yUr5O0QpkAovC7bj00K4MIjMr01sMEAYEUawDEb1DytBMKHYsUPrDAuROkLVD8ico4T4oL8D8MUcjAcu6H9W0N004oa4IIrAAQuXMN%2BACiCSxyrHgAA2GAl7lIIhhMpVrQ4ccowcaFeMLThCqLEhiAjXjR5kmEISOKsqSEAQMMhlnJeNggkbtgUlDtNpsClhOEPhJA0MAQytChPpRMDXUq5suUAAA5kDgO6lOcWjZdSMFSi8ZADr2CtxWK9GGZrVwBoIZYYKy5QWbMmHQSyZm0MQw0rcRWEydfvXJMHIXYloMaaOEgitYrj81LwRQ2swlAMcUmcKxspMWuOTJEDri0UHYr7ybBEqIQdP%2B%2FUALn13NcVZ8dW6iDpRNy2lQbgAFsvb6Ua5OotLvwigdwMlSNvTvH5xOjIYR4nTvs4dejLAUzXjh289t3bK3pvPV43d%2FTUr1OsPfG9c%2FXzv5uMDxP49%2Fu1AwIAOw%3D%3D";
var provMapCoords = {
imgWidth: 710,
imgHeight: 708,
mapWidth: 670,
mapHeight: 670,
leftMargin: 31,
topMargin: 19
};
//raw deflate code
(function(e){var t=32768;var n=0;var r=1;var i=2;var s=6;var o=true;var u=32768;var a=64;var f=1024*8;var l=2*t;var c=3;var h=258;var p=16;var d=8192;var v=13;if(d>u)alert("error: zip_INBUFSIZ is too small");if(t<<1>1<<p)alert("error: zip_WSIZE is too large");if(v>p-1)alert("error: zip_HASH_BITS is too large");if(v<8||h!=258)alert("error: Code too clever");var m=d;var g=1<<v;var y=g-1;var b=t-1;var w=0;var E=4096;var S=h+c+1;var x=t-S;var T=1;var N=15;var C=7;var k=29;var L=256;var A=256;var O=L+1+k;var M=30;var _=19;var D=16;var P=17;var H=18;var B=2*O+1;var j=parseInt((v+c-1)/c);var F;var I,q;var R;var U=null;var z,W;var X;var V;var $;var J;var K;var Q;var G;var Y;var Z;var et;var tt;var nt;var rt;var it;var st;var ot;var ut;var at;var ft;var lt;var ct;var ht;var pt;var dt;var vt;var mt;var gt;var yt;var bt;var wt;var Et;var St;var xt;var Tt;var Nt;var Ct;var kt;var Lt;var At;var Ot;var Mt;var _t;var Dt;var Pt;var Ht;var Bt;var jt;var Ft;var It;var qt;var Rt=function(){this.fc=0;this.dl=0};var Ut=function(){this.dyn_tree=null;this.static_tree=null;this.extra_bits=null;this.extra_base=0;this.elems=0;this.max_length=0;this.max_code=0};var zt=function(e,t,n,r){this.good_length=e;this.max_lazy=t;this.nice_length=n;this.max_chain=r};var Wt=function(){this.next=null;this.len=0;this.ptr=new Array(f);this.off=0};var Xt=new Array(0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0);var Vt=new Array(0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13);var $t=new Array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7);var Jt=new Array(16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15);var Kt=new Array(new zt(0,0,0,0),new zt(4,4,8,4),new zt(4,5,16,8),new zt(4,6,32,32),new zt(4,4,16,16),new zt(8,16,32,32),new zt(8,16,128,128),new zt(8,32,128,256),new zt(32,128,258,1024),new zt(32,258,258,4096));var Qt=function(e){var t;if(!e)e=s;else if(e<1)e=1;else if(e>9)e=9;ct=e;R=false;ut=false;if(U!=null)return;F=I=q=null;U=new Array(f);V=new Array(l);$=new Array(m);J=new Array(u+a);K=new Array(1<<p);dt=new Array(B);for(t=0;t<B;t++)dt[t]=new Rt;vt=new Array(2*M+1);for(t=0;t<2*M+1;t++)vt[t]=new Rt;mt=new Array(O+2);for(t=0;t<O+2;t++)mt[t]=new Rt;gt=new Array(M);for(t=0;t<M;t++)gt[t]=new Rt;yt=new Array(2*_+1);for(t=0;t<2*_+1;t++)yt[t]=new Rt;bt=new Ut;wt=new Ut;Et=new Ut;St=new Array(N+1);xt=new Array(2*O+1);Ct=new Array(2*O+1);kt=new Array(h-c+1);Lt=new Array(512);At=new Array(k);Ot=new Array(M);Mt=new Array(parseInt(d/8))};var Gt=function(){F=I=q=null;U=null;V=null;$=null;J=null;K=null;dt=null;vt=null;mt=null;gt=null;yt=null;bt=null;wt=null;Et=null;St=null;xt=null;Ct=null;kt=null;Lt=null;At=null;Ot=null;Mt=null};var Yt=function(e){e.next=F;F=e};var Zt=function(){var e;if(F!=null){e=F;F=F.next}else e=new Wt;e.next=null;e.len=e.off=0;return e};var en=function(e){return K[t+e]};var tn=function(e,n){return K[t+e]=n};var nn=function(e){U[W+z++]=e;if(W+z==f)Hn()};var rn=function(e){e&=65535;if(W+z<f-2){U[W+z++]=e&255;U[W+z++]=e>>>8}else{nn(e&255);nn(e>>>8)}};var sn=function(){Z=(Z<<j^V[st+c-1]&255)&y;et=en(Z);K[st&b]=et;tn(Z,st)};var on=function(e,t){_n(t[e].fc,t[e].dl)};var un=function(e){return(e<256?Lt[e]:Lt[256+(e>>7)])&255};var an=function(e,t,n){return e[t].fc<e[n].fc||e[t].fc==e[n].fc&&Ct[t]<=Ct[n]};var fn=function(e,t,n){var r;for(r=0;r<n&&qt<It.length;r++)e[t+r]=It.charCodeAt(qt++)&255;return r};var ln=function(){var e;for(e=0;e<g;e++)K[t+e]=0;lt=Kt[ct].max_lazy;ht=Kt[ct].good_length;if(!o)pt=Kt[ct].nice_length;ft=Kt[ct].max_chain;st=0;Y=0;at=fn(V,0,2*t);if(at<=0){ut=true;at=0;return}ut=false;while(at<S&&!ut)hn();Z=0;for(e=0;e<c-1;e++){Z=(Z<<j^V[e]&255)&y}};var cn=function(e){var t=ft;var n=st;var r;var i;var s=it;var u=st>x?st-x:w;var a=st+h;var f=V[n+s-1];var l=V[n+s];if(it>=ht)t>>=2;do{r=e;if(V[r+s]!=l||V[r+s-1]!=f||V[r]!=V[n]||V[++r]!=V[n+1]){continue}n+=2;r++;do{}while(V[++n]==V[++r]&&V[++n]==V[++r]&&V[++n]==V[++r]&&V[++n]==V[++r]&&V[++n]==V[++r]&&V[++n]==V[++r]&&V[++n]==V[++r]&&V[++n]==V[++r]&&n<a);i=h-(a-n);n=a-h;if(i>s){ot=e;s=i;if(o){if(i>=h)break}else{if(i>=pt)break}f=V[n+s-1];l=V[n+s]}}while((e=K[e&b])>u&&--t!=0);return s};var hn=function(){var e,n;var r=l-at-st;if(r==-1){r--}else if(st>=t+x){for(e=0;e<t;e++)V[e]=V[e+t];ot-=t;st-=t;Y-=t;for(e=0;e<g;e++){n=en(e);tn(e,n>=t?n-t:w)}for(e=0;e<t;e++){n=K[e];K[e]=n>=t?n-t:w}r+=t}if(!ut){e=fn(V,st+at,r);if(e<=0)ut=true;else at+=e}};var pn=function(){while(at!=0&&I==null){var e;sn();if(et!=w&&st-et<=x){rt=cn(et);if(rt>at)rt=at}if(rt>=c){e=An(st-ot,rt-c);at-=rt;if(rt<=lt){rt--;do{st++;sn()}while(--rt!=0);st++}else{st+=rt;rt=0;Z=V[st]&255;Z=(Z<<j^V[st+1]&255)&y}}else{e=An(0,V[st]&255);at--;st++}if(e){Ln(0);Y=st}while(at<S&&!ut)hn()}};var dn=function(){while(at!=0&&I==null){sn();it=rt;tt=ot;rt=c-1;if(et!=w&&it<lt&&st-et<=x){rt=cn(et);if(rt>at)rt=at;if(rt==c&&st-ot>E){rt--}}if(it>=c&&rt<=it){var e;e=An(st-1-tt,it-c);at-=it-1;it-=2;do{st++;sn()}while(--it!=0);nt=0;rt=c-1;st++;if(e){Ln(0);Y=st}}else if(nt!=0){if(An(0,V[st-1]&255)){Ln(0);Y=st}st++;at--}else{nt=1;st++;at--}while(at<S&&!ut)hn()}};var vn=function(){if(ut)return;Q=0;G=0;yn();ln();I=null;z=0;W=0;nt=0;if(ct<=3){it=c-1;rt=0}else{rt=c-1;nt=0;nt=0}X=false};var mn=function(e,t,n){var r;if(!R){vn();R=true;if(at==0){X=true;return 0}}if((r=gn(e,t,n))==n)return n;if(X)return r;if(ct<=3)pn();else dn();if(at==0){if(nt!=0)An(0,V[st-1]&255);Ln(1);X=true}return r+gn(e,r+t,n-r)};var gn=function(e,t,n){var r,i,s;r=0;while(I!=null&&r<n){i=n-r;if(i>I.len)i=I.len;for(s=0;s<i;s++)e[t+r+s]=I.ptr[I.off+s];I.off+=i;I.len-=i;r+=i;if(I.len==0){var o;o=I;I=I.next;Yt(o)}}if(r==n)return r;if(W<z){i=n-r;if(i>z-W)i=z-W;for(s=0;s<i;s++)e[t+r+s]=U[W+s];W+=i;r+=i;if(z==W)z=W=0}return r};var yn=function(){var e;var t;var n;var r;var i;if(gt[0].dl!=0)return;bt.dyn_tree=dt;bt.static_tree=mt;bt.extra_bits=Xt;bt.extra_base=L+1;bt.elems=O;bt.max_length=N;bt.max_code=0;wt.dyn_tree=vt;wt.static_tree=gt;wt.extra_bits=Vt;wt.extra_base=0;wt.elems=M;wt.max_length=N;wt.max_code=0;Et.dyn_tree=yt;Et.static_tree=null;Et.extra_bits=$t;Et.extra_base=0;Et.elems=_;Et.max_length=C;Et.max_code=0;n=0;for(r=0;r<k-1;r++){At[r]=n;for(e=0;e<1<<Xt[r];e++)kt[n++]=r}kt[n-1]=r;i=0;for(r=0;r<16;r++){Ot[r]=i;for(e=0;e<1<<Vt[r];e++){Lt[i++]=r}}i>>=7;for(;r<M;r++){Ot[r]=i<<7;for(e=0;e<1<<Vt[r]-7;e++)Lt[256+i++]=r}for(t=0;t<=N;t++)St[t]=0;e=0;while(e<=143){mt[e++].dl=8;St[8]++}while(e<=255){mt[e++].dl=9;St[9]++}while(e<=279){mt[e++].dl=7;St[7]++}while(e<=287){mt[e++].dl=8;St[8]++}Sn(mt,O+1);for(e=0;e<M;e++){gt[e].dl=5;gt[e].fc=Dn(e,5)}bn()};var bn=function(){var e;for(e=0;e<O;e++)dt[e].fc=0;for(e=0;e<M;e++)vt[e].fc=0;for(e=0;e<_;e++)yt[e].fc=0;dt[A].fc=1;jt=Ft=0;_t=Dt=Pt=0;Ht=0;Bt=1};var wn=function(e,t){var n=xt[t];var r=t<<1;while(r<=Tt){if(r<Tt&&an(e,xt[r+1],xt[r]))r++;if(an(e,n,xt[r]))break;xt[t]=xt[r];t=r;r<<=1}xt[t]=n};var En=function(e){var t=e.dyn_tree;var n=e.extra_bits;var r=e.extra_base;var i=e.max_code;var s=e.max_length;var o=e.static_tree;var u;var a,f;var l;var c;var h;var p=0;for(l=0;l<=N;l++)St[l]=0;t[xt[Nt]].dl=0;for(u=Nt+1;u<B;u++){a=xt[u];l=t[t[a].dl].dl+1;if(l>s){l=s;p++}t[a].dl=l;if(a>i)continue;St[l]++;c=0;if(a>=r)c=n[a-r];h=t[a].fc;jt+=h*(l+c);if(o!=null)Ft+=h*(o[a].dl+c)}if(p==0)return;do{l=s-1;while(St[l]==0)l--;St[l]--;St[l+1]+=2;St[s]--;p-=2}while(p>0);for(l=s;l!=0;l--){a=St[l];while(a!=0){f=xt[--u];if(f>i)continue;if(t[f].dl!=l){jt+=(l-t[f].dl)*t[f].fc;t[f].fc=l}a--}}};var Sn=function(e,t){var n=new Array(N+1);var r=0;var i;var s;for(i=1;i<=N;i++){r=r+St[i-1]<<1;n[i]=r}for(s=0;s<=t;s++){var o=e[s].dl;if(o==0)continue;e[s].fc=Dn(n[o]++,o)}};var xn=function(e){var t=e.dyn_tree;var n=e.static_tree;var r=e.elems;var i,s;var o=-1;var u=r;Tt=0;Nt=B;for(i=0;i<r;i++){if(t[i].fc!=0){xt[++Tt]=o=i;Ct[i]=0}else t[i].dl=0}while(Tt<2){var a=xt[++Tt]=o<2?++o:0;t[a].fc=1;Ct[a]=0;jt--;if(n!=null)Ft-=n[a].dl}e.max_code=o;for(i=Tt>>1;i>=1;i--)wn(t,i);do{i=xt[T];xt[T]=xt[Tt--];wn(t,T);s=xt[T];xt[--Nt]=i;xt[--Nt]=s;t[u].fc=t[i].fc+t[s].fc;if(Ct[i]>Ct[s]+1)Ct[u]=Ct[i];else Ct[u]=Ct[s]+1;t[i].dl=t[s].dl=u;xt[T]=u++;wn(t,T)}while(Tt>=2);xt[--Nt]=xt[T];En(e);Sn(t,o)};var Tn=function(e,t){var n;var r=-1;var i;var s=e[0].dl;var o=0;var u=7;var a=4;if(s==0){u=138;a=3}e[t+1].dl=65535;for(n=0;n<=t;n++){i=s;s=e[n+1].dl;if(++o<u&&i==s)continue;else if(o<a)yt[i].fc+=o;else if(i!=0){if(i!=r)yt[i].fc++;yt[D].fc++}else if(o<=10)yt[P].fc++;else yt[H].fc++;o=0;r=i;if(s==0){u=138;a=3}else if(i==s){u=6;a=3}else{u=7;a=4}}};var Nn=function(e,t){var n;var r=-1;var i;var s=e[0].dl;var o=0;var u=7;var a=4;if(s==0){u=138;a=3}for(n=0;n<=t;n++){i=s;s=e[n+1].dl;if(++o<u&&i==s){continue}else if(o<a){do{on(i,yt)}while(--o!=0)}else if(i!=0){if(i!=r){on(i,yt);o--}on(D,yt);_n(o-3,2)}else if(o<=10){on(P,yt);_n(o-3,3)}else{on(H,yt);_n(o-11,7)}o=0;r=i;if(s==0){u=138;a=3}else if(i==s){u=6;a=3}else{u=7;a=4}}};var Cn=function(){var e;Tn(dt,bt.max_code);Tn(vt,wt.max_code);xn(Et);for(e=_-1;e>=3;e--){if(yt[Jt[e]].dl!=0)break}jt+=3*(e+1)+5+5+4;return e};var kn=function(e,t,n){var r;_n(e-257,5);_n(t-1,5);_n(n-4,4);for(r=0;r<n;r++){_n(yt[Jt[r]].dl,3)}Nn(dt,e-1);Nn(vt,t-1)};var Ln=function(e){var t,s;var o;var u;u=st-Y;Mt[Pt]=Ht;xn(bt);xn(wt);o=Cn();t=jt+3+7>>3;s=Ft+3+7>>3;if(s<=t)t=s;if(u+4<=t&&Y>=0){var a;_n((n<<1)+e,3);Pn();rn(u);rn(~u);for(a=0;a<u;a++)nn(V[Y+a])}else if(s==t){_n((r<<1)+e,3);On(mt,gt)}else{_n((i<<1)+e,3);kn(bt.max_code+1,wt.max_code+1,o+1);On(dt,vt)}bn();if(e!=0)Pn()};var An=function(e,t){J[_t++]=t;if(e==0){dt[t].fc++}else{e--;dt[kt[t]+L+1].fc++;vt[un(e)].fc++;$[Dt++]=e;Ht|=Bt}Bt<<=1;if((_t&7)==0){Mt[Pt++]=Ht;Ht=0;Bt=1}if(ct>2&&(_t&4095)==0){var n=_t*8;var r=st-Y;var i;for(i=0;i<M;i++){n+=vt[i].fc*(5+Vt[i])}n>>=3;if(Dt<parseInt(_t/2)&&n<parseInt(r/2))return true}return _t==d-1||Dt==m};var On=function(e,t){var n;var r;var i=0;var s=0;var o=0;var u=0;var a;var f;if(_t!=0)do{if((i&7)==0)u=Mt[o++];r=J[i++]&255;if((u&1)==0){on(r,e)}else{a=kt[r];on(a+L+1,e);f=Xt[a];if(f!=0){r-=At[a];_n(r,f)}n=$[s++];a=un(n);on(a,t);f=Vt[a];if(f!=0){n-=Ot[a];_n(n,f)}}u>>=1}while(i<_t);on(A,e)};var Mn=16;var _n=function(e,t){if(G>Mn-t){Q|=e<<G;rn(Q);Q=e>>Mn-G;G+=t-Mn}else{Q|=e<<G;G+=t}};var Dn=function(e,t){var n=0;do{n|=e&1;e>>=1;n<<=1}while(--t>0);return n>>1};var Pn=function(){if(G>8){rn(Q)}else if(G>0){nn(Q)}Q=0;G=0};var Hn=function(){if(z!=0){var e,t;e=Zt();if(I==null)I=q=e;else q=q.next=e;e.len=z-W;for(t=0;t<e.len;t++)e.ptr[t]=U[W+t];z=W=0}};var Bn=function(e,t){var n,r;It=e;qt=0;if(typeof t=="undefined")t=s;Qt(t);var i=new Array(1024);var o=[];while((n=mn(i,0,i.length))>0){var u=new Array(n);for(r=0;r<n;r++){u[r]=String.fromCharCode(i[r])}o[o.length]=u.join("")}It=null;return o.join("")};if(!e.RawDeflate)e.RawDeflate={};e.RawDeflate.deflate=Bn})(this);
var GlobalOptions = {
ptupdate: true,
ptupdatebeta: 0,
};
var Options = {
includeCity: true,
includeMarching: true,
includeTraining: false,
includeTrainingTotal: false,
encRemaining: true,
maxIdlePop: false,
srcSortBy: 'level',
srcMinLevel: 1,
srcMaxLevel: 7,
wildType: 1,
unownedOnly: true,
fixTower: true,
fixTower2: true,
fixMapDistance: true,
fixMsgCount: true,
fixMarchUnits: true,
fixLoadCap: true,
fixPageNav: true,
enhanceViewMembers: true,
enhanceARpts: true,
allowAlterAR: true,
enhanceMsging: true,
ptWinIsOpen: false,
ptWinDrag: false,
ptWinPos: {},
enableFoodWarn: true,
enableFoodTower: false,
foodWarnHours: 24,
lastVersion: null,
hideOnGoto: true,
currentTab: false,
gmtClock: true,
chatEnhance: true,
chatglobal: true,
chatwhisper: true,
chatbold: false,
chatAttack: true,
chatLeaders: true,
fixKnightSelect: true,
attackCityPicker: true,
mapCoordsTop: true,
dispBattleRounds: true,
reportDeleteButton: true,
overviewFontSize: 12,
overviewAllowOverflow: false,
curOverTab: 'A',
curMarchTab: 'N',
curOptTab: 'U',
playersNoCities: false,
enableWhisperAlert: true,
whisperplay: 'whisper',
enableTowerAlert: true,
OverViewShowExtra: 'maximum',
alertConfig: {
aChat: false,
aPrefix: '** I\'m being attacked! **',
scouting: false,
wilds: false,
minTroops: 10000,
spamLimit: 10
},
alertinterval: 10,
alertmtroops: 0,
celltext: {
atext: false,
provider: 0,
num1: "000",
num2: "000",
num3: "0000"
},
rptType: 'alliance',
arAttacker: 'Them',
arTarget: 'Them',
arPageFrom: 1,
arPageTo: 5,
TournoiLigne: 250,
Xrenfort: 0,
Yrenfort: 0,
AttackHorloge: "21:00:00",
AttackGoHorloge: null,
AttackOnOff: false,
AttackUnits: {},
AttackFav: {
0: {
0: "200K miliciens",
1: 0,
2: 2e5,
3: 0,
4: 0,
5: 0,
6: 0,
7: 0,
8: 0,
9: 0,
10: 0,
11: 0,
12: 0,
13: 0
},
1: {
0: "200K dada",
1: 0,
2: 0,
3: 0,
4: 0,
5: 0,
6: 0,
7: 2e5,
8: 0,
9: 0,
10: 0,
11: 0,
12: 0,
13: 0
}
},
AttackFromCity: 0,
AttackCibleX: 0,
AttackCibleY: 0,
AttackKnight: 0,
DefendHorloge: "21:00:00",
DefendGoHorloge: null,
DefendOnOff: false,
DefendUnits: {},
DefendFav: {
0: {
0: "200K miliciens",
1: 0,
2: 2e5,
3: 0,
4: 0,
5: 0,
6: 0,
7: 0,
8: 0,
9: 0,
10: 0,
11: 0,
12: 0,
13: 0
},
1: {
0: "200K dada",
1: 0,
2: 0,
3: 0,
4: 0,
5: 0,
6: 0,
7: 2e5,
8: 0,
9: 0,
10: 0,
11: 0,
12: 0,
13: 0
}
},
DefendFromCity: 0,
DefendCibleX: 0,
DefendCibleY: 0,
DefendKnight: 0,
DefendRsrv: {
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,
21: 0
},
enhancedinbox: true,
EnhCBtns: false,
DbClkDefBtns: true,
ColrCityBtns: true,
miniRefresh: false,
miniRefreshIntvl: 3,
ChatIcons: true,
mapInfo: false,
mapInfo2: false,
mapInfo3: false,
dispStatus: true,
fixApothTime: true,
fixTRAetherCost: true,
fixMMBImage: true,
multiBrowserAllow: false,
fixChatTime: true,
togRaidPatch: false,
marchRaidState: {
0: false,
1: false,
2: false,
3: false,
4: false,
5: false,
6: false,
7: false
},
MoveFurniture: true,
fixMapDblClick: false,
WarnAscension: false,
WarnAscensionInterval: 1,
};
var Colors = {
DarkRow: '#eee',
ButtonSelected: '#444444',
ChatLeaders: '#B8B8B8',
ChatGlobal: '#CCCCFF',
OverviewDarkRow: '#f0f0f0',
ChatAll: '#99ccff',
ChatAtt: '#FF4D4D',
ChatWhisper: '#FF4D4D',
ChatVC: '#00ff00',
ChatChancy: '#F8E151',
Opacity: '0.9',
};
var AutoTrainOptions = {
intervalSecs: 60,
doTraps: {1:false,2:false,3:false,4:false,5:false,6:false,7:false,8:false},
doCalrops: {1:false,2:false,3:false,4:false,5:false,6:false,7:false,8:false},
doSpikes: {1:false,2:false,3:false,4:false,5:false,6:false,7:false,8:false},
doXbows: {1:false,2:false,3:false,4:false,5:false,6:false,7:false,8:false},
troopType: {1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0},
keepFood: {1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0},
keepWood: {1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0},
keepStone: {1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0},
keepOre: {1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0},
};
var ChatIcons = {};
var IRCOptions = {
IRCCmdEnable: false,
IRCCmdSeen: {
enable: false
},
IRCCmdRules: {
enable: false,
message: ""
},
};
var GameIcons = {
goldImgTiny: '<img src=https://kabam1-a.akamaihd.net/silooneofcamelot/fb/e2/src/img/chrome_icon_gold.png>',
foodImgTiny: '<img src=https://kabam1-a.akamaihd.net/silooneofcamelot/fb/e2/src/img/chrome_icon_food.png>',
woodImgTiny: '<img src=https://kabam1-a.akamaihd.net/silooneofcamelot/fb/e2/src/img/chrome_icon_wood.png>',
stoneImgTiny: '<img src=https://kabam1-a.akamaihd.net/silooneofcamelot/fb/e2/src/img/chrome_icon_stone.png>',
oreImgTiny: '<img src=https://kabam1-a.akamaihd.net/silooneofcamelot/fb/e2/src/img/chrome_icon_ore.png>',
astoneImgTiny: '<img src=https://kabam1-a.akamaihd.net/silooneofcamelot/fb/e2/src/img/chrome_icon_aetherstone.png>',
goldImg: '<img src=https://kabam1-a.akamaihd.net/silooneofcamelot/fb/e2/src/img/gold_30.png>',
foodImg: '<img src=https://kabam1-a.akamaihd.net/silooneofcamelot/fb/e2/src/img/food_30.png>',
woodImg: '<img src=https://kabam1-a.akamaihd.net/silooneofcamelot/fb/e2/src/img/wood_30.png>',
stoneImg: '<img src=https://kabam1-a.akamaihd.net/silooneofcamelot/fb/e2/src/img/stone_30.png>',
oreImg: '<img src=https://kabam1-a.akamaihd.net/silooneofcamelot/fb/e2/src/img/iron_30.png>',
astoneImg: '<img src=https://kabam1-a.akamaihd.net/silooneofcamelot/fb/e2/src/img/aetherstone_30.png>',
RightArrow: 'https://kabam1-a.akamaihd.net/kingdomsofcamelot/fb/e2/src/img/autoAttack/across_arrow.png',
DownArrow: 'https://kabam1-a.akamaihd.net/kingdomsofcamelot/fb/e2/src/img/autoAttack/down_arrow.png',
transport: '<img src=https://kabam1-a.akamaihd.net/silooneofcamelot/fb/e2/src/img/transporting.jpg>',
reinforce: '<img src=https://kabam1-a.akamaihd.net/silooneofcamelot/fb/e2/src/img/reinforce.jpg>',
scouting: '<img src=https://kabam1-a.akamaihd.net/silooneofcamelot/fb/e2/src/img/scouting.jpg>',
attacking: '<img src=https://kabam1-a.akamaihd.net/silooneofcamelot/fb/e2/src/img/attacking.jpg>',
raidStopped: '<img src=https://kabam1-a.akamaihd.net/silooneofcamelot/fb/e2/src/img/autoAttack/raid_stopped_desat.png>',
raidResting: '<img src=https://kabam1-a.akamaihd.net/silooneofcamelot/fb/e2/src/img/autoAttack/raid_resting.png>',
returning: '<img src=https://kabam1-a.akamaihd.net/silooneofcamelot/fb/e2/src/img/returning.jpg>',
};
var JSON;if(!JSON){JSON={};}(function(){"use strict";function f(n){return n<10?'0'+n:n;}if(typeof Date.prototype.toJSON!=='function'){Date.prototype.toJSON=function(key){return isFinite(this.valueOf())?this.getUTCFullYear()+'-'+f(this.getUTCMonth()+1)+'-'+f(this.getUTCDate())+'T'+f(this.getUTCHours())+':'+f(this.getUTCMinutes())+':'+f(this.getUTCSeconds())+'Z':null;};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(key){return this.valueOf();};}var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'},rep;function quote(string){escapable.lastIndex=0;return escapable.test(string)?'"'+string.replace(escapable,function(a){var c=meta[a];return typeof c==='string'?c:'\\u'+('0000'+a.charCodeAt(0).toString(16)).slice(-4);})+'"':'"'+string+'"';}function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value==='object'&&typeof value.toJSON==='function'){value=value.toJSON(key);}if(typeof rep==='function'){value=rep.call(holder,key,value);}switch(typeof value){case'string':return quote(value);case'number':return isFinite(value)?String(value):'null';case'boolean':case'null':return String(value);case'object':if(!value){return'null';}gap+=indent;partial=[];if(Object.prototype.toString.apply(value)==='[object Array]'){length=value.length;for(i=0;i<length;i+=1){partial[i]=str(i,value)||'null';}v=partial.length===0?'[]':gap?'[\n'+gap+partial.join(',\n'+gap)+'\n'+mind+']':'['+partial.join(',')+']';gap=mind;return v;}if(rep&&typeof rep==='object'){length=rep.length;for(i=0;i<length;i+=1){k=rep[i];if(typeof k==='string'){v=str(k,value);if(v){partial.push(quote(k)+(gap?': ':':')+v);}}}}else{for(k in value){if(Object.hasOwnProperty.call(value,k)){v=str(k,value);if(v){partial.push(quote(k)+(gap?': ':':')+v);}}}}v=partial.length===0?'{}':gap?'{\n'+gap+partial.join(',\n'+gap)+'\n'+mind+'}':'{'+partial.join(',')+'}';gap=mind;return v;}}if(typeof JSON.stringify!=='function'){JSON.stringify=function(value,replacer,space){var i;gap='';indent='';if(typeof space==='number'){for(i=0;i<space;i+=1){indent+=' ';}}else if(typeof space==='string'){indent=space;}rep=replacer;if(replacer&&typeof replacer!=='function'&&(typeof replacer!=='object'||typeof replacer.length!=='number')){throw new Error('JSON.stringify');}return str('',{'':value});};}if(typeof JSON.parse!=='function'){JSON.parse=function(text,reviver){var j;function walk(holder,key){var k,v,value=holder[key];if(value&&typeof value==='object'){for(k in value){if(Object.hasOwnProperty.call(value,k)){v=walk(value,k);if(v!==undefined){value[k]=v;}else{delete value[k];}}}}return reviver.call(holder,key,value);}text=String(text);cx.lastIndex=0;if(cx.test(text)){text=text.replace(cx,function(a){return'\\u'+('0000'+a.charCodeAt(0).toString(16)).slice(-4);});}if(/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,'@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,']').replace(/(?:^|:|,)(?:\s*\[)+/g,''))){j=eval('('+text+')');return typeof reviver==='function'?walk({'':j},''):j;}throw new SyntaxError('JSON.parse');};}}());
var JSON2 = JSON;
var Cities = {};
var Seed = unsafeWindow.seed;
var Tabs = {};
var currentName = 'Overview';
var mainPop;
var CPopUpTopClass = 'ptPopTop';
var KOCversion = null;
var ptStartupTimer = null;
var uW = unsafeWindow;
var seed_player_g = uW.seed.player.g;
var ResetColors = false;
var nTroopType = 19;
var reportpos = {
x: -999,
y: -999
};
var crestname = {};
for (var i = 1101; i < 1115; i++)
crestname[i] = uW.itemlist['i' + i].name
function getFirefoxVersion() {
var ver = '',
i;
var ua = navigator.userAgent;
if (ua == null || (i = ua.indexOf('Firefox/')) < 0)
return;
return ua.substr(i + 8);
}
function ptStartup() {
clearTimeout(ptStartupTimer);
if (uW.ptLoaded)
return;
var metc = getClientCoords(document.getElementById('main_engagement_tabs'));
if (metc.width == null || metc.width == 0) {
ptStartupTimer = setTimeout(ptStartup, 1000);
return;
}
KOCversion = anticd.getKOCversion();
logit("KofC client version: " + KOCversion);
readOptions();
readGlobalOptions();
readChatIconsOptions();
readColors();
readAutoTrainOptions();
readIRCOptions();
if (AutoTrainOptions.intervalSecs < 60)
AutoTrainOptions.intervalSecs = 60;
saveAutoTrainOptions();
//logit ('g_timeoff: '+ uW.g_timeoff);
Seed = uW.seed;
var gmstyles = '\
.ptcastleBut {outline:0px; margin-left:0px; margin-right:0px; width:24px; height:26px; font-size:12px; font-weight:bold;}\
.ptcastleBut:hover {background-image:url("' + URL_CASTLE_BUT_SEL + '")}\
.ptcastleButNon {background-image:url("' + URL_CASTLE_BUT + '")}\
.ptcastleButSel {background-image:url("' + URL_CASTLE_BUT_SEL + '")}\
';
var trstyles = 'div#throneMainContainer div#tableContainer{width:80px;height:213px;top:400px;left:450px;}\
div#throneMainContainer div#trophyContainer{width:71px;height:86px;top:41px;left:381px;}\
div#throneMainContainer div#statueContainer{width:124px;height:296px;top:274px;left:150px;z-index:97;}\
div#throneMainContainer div#advisorContainer{width:141px;height:240px;bottom:0pt;right:0pt;}\
div#throneMainContainer div#heroContainer{width:85px;height:136px;top:173px;left:450px;}';
var styles = '\
.ptdivHeader {transparent;height: 16px;border-bottom:0px solid #000000;font-weight:bold;font-size:11px;opacity:0.75;margin-left:0px;margin-right:0px;margin-top:1px;margin-bottom:0px;padding-top:4px;padding-right:10px;vertical-align:text-top;align:left}\
.ptdivLink {color:#000;text-decoration:none;}\
.ptdivLink:Hover {color:#000;text-decoration:none;}\
.ptdivLink:Active {color:#000;text-decoration:none;}\
.ptdivHide {display:none}\
.xtab {padding-right: 5px; border:none; background:none; white-space:nowrap}\
.xtabBR {padding-right: 5px; border:none; background:none;}\
div.ptDiv {background-color:' + Colors.OverviewDarkRow + ';}\
table.ptTab tr td {border:none; background:none; white-space:nowrap;}\
table.ptTabPad tr td {border:none; background:none; white-space:nowrap; padding: 2px 4px 2px 4px;}\
table.ptTabBR tr td {border:none; background:none;}\
table.ptTabLined tr td {border:1px none none solid none;}\
table.ptTabOverview tr td {border-left:1px solid #ccc; white-space:nowrap; padding: 1px; background-color:' + Colors.OverviewDarkRow + ';}\
table.ptTabPad tr td.ptentry {background-color:#FFEECC ; padding-left: 8px;}\
table.ptNoPad tr td {border:none; background:none; white-space:nowrap; padding:0px}\
table.ptPlayers tr td {background-color:none; padding-left:5px; padding-right:5px;}\
.ptOddrow {background-color:' + Colors.DarkRow + '}\
.ptstat {border:1px solid; border-color:#000000; font-weight:bold; padding-top:2px; padding-bottom:2px; text-align:center; color:#ffffff; background-color:#6FA2FF; -moz-border-radius:5px;}\
.ptStatLight {color:#ddd}\
.ptentry {padding: 7px; white-space:nowrap;}\
.ptErrText {font-weight:bold; color:#600000}\
button::-moz-focus-inner, input[type="submit"]::-moz-focus-inner { border: none; }\
.ptChatAttack {color: #000; font-weight:bold; background-color:' + Colors.ChatAtt + '; }\
.ptChatRecall {color: #000; font-weight:bold; background-color:#6B8E23; }\
.ptChatWhisper {font-weight:bold; color: ' + Colors.ChatWhisper + ';}\
.ptChatAlliance {background-color: ' + Colors.ChatAll + ';}\
.ptChatScripter {background-image:url(data:image/png;base64,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);}\
.ptChatRat {background-image: url(data:image/png;base64,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);}\
.ptChatGlobal {background-color:' + Colors.ChatGlobal + ';}\
.ptChatBold {font-weight:bold}\
.ptChatGlobalAll {font-weight:bold;background-color:' + Colors.ChatGlobal + ';}\
.ptChatIcon {border: 1px inset black}\
.ptChatCHAN {color:#000; background-color:' + Colors.ChatChancy + ';}\
.ptChatVICE {color:#000; background-color:' + Colors.ChatVC + ';}\
.ptChatOFFI {color:#000; background-color:' + Colors.ChatLeaders + ';}\
span.whiteOnRed {padding-left:3px; padding-right:3px; background-color:#700; color:white; font-weight:bold}\
span.boldRed {color:#800; font-weight:bold}\
span.boldDarkRed {color:#600; font-weight:bold}\
a.ptButton20 {color:#ffff80}\
hr.ptThin {padding:0px; margin:0px}\
input.pbSubtab {cursor:pointer; width:10em; margin-right:15px;}\
input.pbSubtabSel {background-color:' + Colors.ButtonSelected + '; color:white; font-weight:bold; cursor:none !important}\
table.ptMainTab {empty-cells: show; margin-left: 5px; margin-top: 4px; padding: 1px; padding-left:30px; }\
table.ptMainTab tr td a {color:inherit }\
table.ptMainTab tr td {height:60%; empty-cells:show; padding: 0px 4px 0px 4px; margin-top:5px; white-space:nowrap; border: 1px solid; border-style: none none solid none; -moz-border-radius:5px; }\
table.ptMainTab tr td.spacer {padding: 0px 1.5px;}\
table.ptMainTab tr td.sel {font-weight:bold; font-size:13px; border: 1px solid #000000; background: -moz-linear-gradient(top, #cfeef7 0%, #73cee7 24%, #0aaad6 44%, #53c2e1 79%, #88d5ea 100%);}\
table.ptMainTab tr td.notSel {font-weight:bold; font-size:13px; color: #ffffff; border: 1px solid #000000; background: -moz-linear-gradient(top, #cfeef7 0%, #73cee7 24%, #0aaad6 44%, #53c2e1 79%, #88d5ea 100%);}\
tr.ptPopTop td { background-color:transparent; border:none; height: 21px; padding:0px; }\
tr.ptretry_ptPopTop td { background-color:#a00; color:#fff; border:none; height: 21px; padding:0px; }\
.kocHeader .timeAndDomain {margin: 13px 0px 0px 15px;}\
.kocmain .mod_maparea .mod_citylist .city_warning{background: url(' + URL_CASTLE_WARN + ') no-repeat; margin-top: 4px;}\
input.ptButCancel {background-color:#a00; font-weight:bold; color:#fff}\
.CPopMain { border:1px solid #000000; -moz-box-shadow:inset 0px 0px 10px #6a6a6a; -moz-border-radius-bottomright: 20px; -moz-border-radius-bottomleft: 20px;}\
.CPopup {border:5px ridge #666; opacity:' + Colors.Opacity + '; -moz-border-radius:25px; -moz-box-shadow: 1px 1px 5px #000000;}';
logit("* KOCpowerTools v" + Version + " Loaded");
if (TEST_WIDE) {
// max cityname len = 15?
for (i = 0; i < Seed.cities.length; i++) {
Seed.cities[i][1] = Seed.cities[i][1] + 'LONGERNAMETEST';
Seed.cities[i][1] = Seed.cities[i][1].substr(0, 15);
}
var numToAdd = TEST_WIDE_CITIES - Seed.cities.length;
while (numToAdd-- > 0) {
var cityId = Math.random() * 1234567;
Seed.cities.push(Seed.cities[0]);
}
}
setCities();
// TODO: Make sure WinPos is visible on-screen ?
if (Options.ptWinPos == null || Options.ptWinPos.x == null || Options.ptWinPos.x == '' || isNaN(Options.ptWinPos.x)) {
//logit ( 'Options.ptWinPos: '+ inspect (Options.ptWinPos, 5, 1));
var c = getClientCoords(document.getElementById('main_engagement_tabs'));
Options.ptWinPos.x = c.x + 4;
Options.ptWinPos.y = c.y + c.height;
saveOptions();
}
mainPop = new CPopup('ptmain', Options.ptWinPos.x, Options.ptWinPos.y, 750, 800, Options.ptWinDrag,
function () {
tabManager.hideTab();
Options.ptWinIsOpen = false;
saveOptions();
});
GM_addStyle(gmstyles);
if (Options.MoveFurniture) {
GM_addStyle(trstyles);
}
mainPop.getMainDiv().innerHTML = '<STYLE>' + styles + '</style>';
// FoodAlerts.init();
TowerAlerts.init();
MapDistanceFix.init();
AllianceReports.init();
messageNav.init();
PageNavigator.init();
ChatStuff.init();
AttackDialog.init();
battleReports.init();
CoordBox.init();
GMTclock.init();
DispReport.init();
mapinfoFix.init();
MarchUnitsFix.init();
LoadCapFix.init();
ApothTimeFix.init();
TRAetherCostFix.init();
mmbImageFix.init();
ChatTimeFix.init();
bypassMulti.init();
BarbRaidMarchPatch.init();
MapDoubleClickFix.init();
towho.init();
cdtd.init();
tabManager.init(mainPop.getMainDiv());
AudioManager.init();
AllianceReportsCheck.init();
// uW.cm.unitFrontendType["9"] = "specialist"; //change type of wagons from siege to avoid siege load bug
uW.cm.unitFrontendType["15"] = "specialist"; //change type of siege walls from siege to avoid siege load bug
if (Options.ptWinIsOpen) {
mainPop.show(true);
tabManager.showTab();
}
window.addEventListener('unload', onUnload, false);
if (Options.fixTower)
TowerAlerts.enableFixTarget(true);
if (Options.fixTower2)
TowerAlerts.enableFixFalseReports(true);
AddMainTabLink('TOOLS', eventHideShow, mouseMainTab);
// var ss_onload = unsafeWindow.seed.ss;
// multiBrowserOverride();
//TestSomething.init ();
//setInterval (function(){logit (inspect (getClientCoords (mainPop.getMainDiv()), 3, 1))}, 2000);
uW.ptLoaded = true;
}
function multiBrowserOverride() {
return; //disabled until fix?
// get a pointer to the function
var old_usa = unsafeWindow.update_seed_ajax;
// create a new own
var usa = function (marchForceUpdateFlag, updateSeedDoneCallback, isCancelTraining) {
if (Options.allowMultiBroswer) {
// remove a variable
//delete unsafeWindow.seed.ss;
// unsafeWindow.seed.ss = ss_onload;
}
// call the original function
old_usa(marchForceUpdateFlag, updateSeedDoneCallback, isCancelTraining);
}
// install our override
unsafeWindow.update_seed_ajax = usa;
}
function ToggleDivDisplay(h, w, div) {
var dc = uW.jQuery('#' + div).attr('class');
if (dc) {
if (dc.indexOf('ptdivHide') >= 0) {
uW.jQuery('#' + div).attr('class', '');
uW.jQuery('#' + div + 'Arrow').attr('src', GameIcons.DownArrow);
} else {
uW.jQuery('#' + div).attr('class', 'ptdivHide');
uW.jQuery('#' + div + 'Arrow').attr('src', GameIcons.RightArrow);
}
} else {
uW.jQuery('#' + div).attr('class', 'ptdivHide');
uW.jQuery('#' + div + 'Arrow').attr('src', GameIcons.RightArrow);
}
}
function onUnload() {
Options.ptWinPos = mainPop.getLocation();
saveOptions();
if (!ResetColors) saveColors();
}
var knightRoles = [
['Foreman', 'politics', 'Pol'],
['Marshall', 'combat', 'Com'],
['Alchemystic', 'intelligence', 'Int'],
['Steward', 'resourcefulness', 'Res'],
];
var rats = ["2466324", "5801935", "14737553", "2915086"]; //people who openly tried to destroy script development including reporting scripters to kabam. now the joke is on them.
var scripters = ["7552815", "10681588", "1747877", "14909786", "2865067", "10153485", "15182839", "1550996", "1617431819", "9688786", "8184813", "9863346", "11107993", "9751486", "5614388", "424090", "14845619", "8480468", "7042380", "731589"];
Tabs.Notes = {
tabOrder: 999,
tabLabel: "Notes",
myDiv: null,
show: function () {
var h = "<div align=center> <b>Saved Notes</b></div>";
h += "<div style='height: 700px; overflow-y: scroll;'>";
h += "<table width='100%'><tr>";
h += "<td width=150><b>Player</b></td><td><b>Notes</b></td><td width=100><b>Action</b></td></tr>";
for (player in Tabs.Notes.noteValues) {
var note = Tabs.Notes.noteValues[player];
h += "<tr>";
h += "<td valign=top>" + player + " / " + note.id + "<br></td>";
h += "<td valign=top><div>" + note.text + "</div>";
h += '<div><span onclick="PTpl(this, ' + note.id + ')"><a>Leaderboard</a></span></div><br></td>';
h += "<td valign=top><button type='button' onclick=\'editNoteLink(\"" + player + "\",\"" + note.id + "\")\'>Edit</button><br><button type='button' onclick=\'removeNote(\"" + player + "\") \'>Delete</button><br></td>";
h += "</tr>";
}
h += "</table>";
myDiv.innerHTML = h;
},
hide: function () {},
init: function (div) {
myDiv = div;
unsafeWindow.removeNote = Tabs.Notes.removeNote;
unsafeWindow.editNoteLink = Tabs.Notes.editNoteLink;
// override the map tooltips
var oldSMTT = unsafeWindow.showMapTileTooltip;
var newSMTT = function (j, h, n, f, l, k) {
// add our stuff to the tooltip
var j2 = Tabs.Notes.updateTooltip(unescape(j));
if (j2) {
j = escape(j2);
}
oldSMTT(j, h, n, f, l, k);
};
unsafeWindow.showMapTileTooltip = newSMTT;
// create a regular expression object to use
Tabs.Notes.re = new RegExp(unsafeWindow.g_js_strings.MapObject.ownedby + ": (\\w*)");
// add a new option to the context menus
var cityType = unsafeWindow.cm.CITY_STATUS.ANOTHER_PLAYER_CITY_AND_NOT_IN_YOUR_ALLIANCE;
uW.cm.ContextMenuMapController.prototype.MapContextMenus.City[cityType].push("ttMod");
cityType = unsafeWindow.cm.CITY_STATUS.ANOTHER_PLAYER_CITY_AND_IN_YOUR_ALLIANCE;
uW.cm.ContextMenuMapController.prototype.MapContextMenus.City[cityType].push("ttMod");
var wildContext;
wildContext = uW.cm.ContextMenuMapController.prototype.MapContextMenus.EnemyWilderness;
for (wild in wildContext) {
wildContext[wild].push("ttMod");
}
wildContext = uW.cm.ContextMenuMapController.prototype.MapContextMenus.Wilderness;
for (wild in wildContext) {
wildContext[wild].push("ttMod");
}
wildContext = uW.cm.ContextMenuMapController.prototype.MapContextMenus.FriendlyWilderness;
for (wild in wildContext) {
wildContext[wild].push("ttMod");
}
wildContext = uW.cm.ContextMenuMapController.prototype.MapContextMenus.AllianceWilderness;
for (wild in wildContext) {
wildContext[wild].push("ttMod");
}
// add actions to the menu item
var mod = new CalterUwFunc('cm.ContextMenuMapController.prototype.calcButtonInfo', [
['default:', 'case "ttMod":' +
' b.text = "Player Notes"; b.color = "green"; ' +
' b.action = function () { ' +
' edit_notes(e.user); ' +
' }; ' +
' if (e.user.id) d.push(b); break; ' +
' default: '
]
]);
mod.setEnable(true);
// callback function for the context menu option
unsafeWindow.edit_notes = Tabs.Notes.createPopup;
// load saved values
Tabs.Notes.load();
Tabs.Notes.show();
},
save: function () {
var serverID = GetServerId();
var s = JSON2.stringify(Tabs.Notes.noteValues);
if (s) {
// use setTimeout to fix the context
setTimeout(function () {
GM_setValue('PlayerNotes_' + serverID, s);
}, 0);
}
},
load: function () {
var serverID = GetServerId();
try {
var s = JSON.parse(GM_getValue('PlayerNotes_' + serverID));
if (s) Tabs.Notes.noteValues = s;
} catch (e) {
logit(e);
}
},
editNoteLink: function (name, id) {
uW.ptuser = {};
uW.ptuser.id = id;
uW.ptuser.username = name;
uW.edit_notes(uW.ptuser);
},
createPopup: function (user) {
Tabs.Notes.ToolsOpen = false;
if (Options.ptWinIsOpen == true) {
Tabs.Notes.ToolsOpen = true;
eventHideShow();
}
// get the current note
var notes = "";
if (Tabs.Notes.noteValues[user.username]) {
notes = Tabs.Notes.noteValues[user.username];
notes = notes.text.replace(/<br\/>/g, "\n");
}
// popup
unsafeWindow.Modal.multiButton({
buttons: [{
txt: "Save",
exe: function b() {
Tabs.Notes.saveNote(user);
unsafeWindow.Modal.hideModal();
if (Tabs.Notes.ToolsOpen == true) {
eventHideShow();
}
}
}, {
txt: unsafeWindow.g_js_strings.commonstr.cancel,
exe: function () {
unsafeWindow.Modal.hideModal()
if (Tabs.Notes.ToolsOpen == true) {
eventHideShow();
}
}
}],
body: "<strong> Enter notes for player: </strong><span id='notes_player'>" + user.username + "</span><br/><br/><textarea id='notes_text' rows='4' columns='50' style='width:300px;' >" + notes + "</textarea>",
title: "Player Notes"
});
},
// callback for the save button
saveNote: function (user) {
var player = user.username;
if (player) {
var noteData = {};
var notes = unsafeWindow.jQuery("#notes_text").val();
noteData.text = notes.replace(/\n/g, "<br/>");
noteData.id = user.id;
Tabs.Notes.noteValues[player] = noteData;
Tabs.Notes.save();
var nl = document.getElementById('ptplayernotes');
if (nl) {
nl.innerHTML = notes;
}
}
},
// callback for the delete button
removeNote: function (player) {
if (player && Tabs.Notes.noteValues[player]) {
delete Tabs.Notes.noteValues[player];
Tabs.Notes.save();
}
Tabs.Notes.show();
},
// add the notes to the map tooltip
updateTooltip: function (ttHtml) {
var newTT = null;
var result = Tabs.Notes.re.exec(ttHtml);
if (result && result[1]) {
var note;
if (note = Tabs.Notes.noteValues[result[1]]) {
var element_class = "";
var id = "" + note.id;
if (rats.indexOf(id) >= 0 && id != uW.tvuid) {
element_class = 'ptChatRat';
}
if (scripters.indexOf(id) >= 0) {
element_class = 'ptChatScripter';
}
newTT = ttHtml.replace("<div>Might:", "<div style='position: relative; left: 5%; width: 90%;' class ='" + element_class + "'>" + note.text + "</div><div>Might:");
}
}
return newTT;
},
// object to store the notes
noteValues: {},
ToolsOpen: false,
};
var CoordBox = {
init: function () {
var t = CoordBox;
t.boxDiv = searchDOM(document.getElementById('maparea_map'), 'node.className=="mod_coord"', 3, false);
t.setEnable(Options.mapCoordsTop);
},
setEnable: function (tf) {
var t = CoordBox;
if (t.boxDiv == null)
return;
if (tf)
t.boxDiv.style.zIndex = '100000';
else
t.boxDiv.style.zIndex = '10011';
},
isAvailable: function () {
var t = CoordBox;
return !(t.boxDiv == null);
},
};
var TestSomething = {
init: function () {
t = TestSomething;
return;
var ft = uW.modal_messages.toString().replace(/}\s*$/, 'TESTmyHook(); }');
// logit ('FT: modal_messages = '+ ft);
uW.TESTmyHook = t.hook;
/***
var scr = document.createElement('script');
scr.innerHTML = 'modal_messages = '+ ft;
document.body.appendChild(scr);
setTimeout ( function (){document.body.removeChild(scr);}, 500);
***/
//with (unsafeWindow){
// eval ('uW.modal_messages = '+ ft);
// eval ('modal_messages = function (){alert("xxx")}');
logit("WITH");
uW.modal_messages = eval('function (){alert("xxx")}');
logit("EVALED");
//}
setTimeout(function () {
var ft = uW.modal_messages.toString();
logit('uW.modal_messages:\n' + ft.substr(ft.length - 500));
}, 100);
},
hook: function () {
logit('TestSomething.hook');
logit('tvuid: ' + tvuid);
logit('uW.tvuid: ' + uW.tvuid);
},
}
var battleReports = {
init: function () {
var t = battleReports;
// t.getReportDisplayFunc = new CalterUwFunc ('getReportDisplay', [['return K.join("")', 'var themsg=K.join(""); themsg=getReportDisplay_hook(themsg, arguments[1]); return themsg']]); //Alliance report battle rounds function
t.getReportDisplayFunc = new CalterUwFunc ('getReportDisplay', [['return K.join("")', 'var themsg=K.join(""); themsg=getReportDisplay_hook(themsg, arguments[1]); themsg=getReportDisplay_hookz(themsg, arguments[1]); return themsg']]); //Alliance report battle rounds function
uW.getReportDisplay_hook = t.hook;
uW.getReportDisplay_hookz = t.hookz;
t.getReportDisplayFunc.setEnable(true);
t.renderBattleReportFunc = new CalterUwFunc ('Messages.viewMarchReport', [[/\$\("modal_msg_list"\)\.innerHTML\s*=\s*cm\.MarchReportController\.getMarchReport\(c,\s*y\)/, 'var msg = cm.MarchReportController.getMarchReport(c, y); $("modal_msg_list").innerHTML = renderBattleReport_hook(msg,c,y);']]); //March reports battle rounds function
uW.renderBattleReport_hook = t.hook2;
t.renderBattleReportFunc.setEnable(true);
uW.deleteAreport = t.e_deleteReport;
uW.MoreReport = t.e_MoreReport;
uW.PostReport = t.e_PostReport;
},
setEnable: function () {},
isRoundsAvailable: function () {
var t = battleReports;
return t.getReportDisplayFunc.isAvailable() || t.renderBattleReportFunc.isAvailable();
},
e_deleteReport: function (rptid) {
var t = battleReports;
t.ajaxDeleteMyReport(rptid);
},
e_MoreReport: function (rptid, side) {
var t = battleReports;
alert('WIP ;)');
},
e_PostReport: function (rptid) {
var msg = 'Report No: ' + rptid;
sendChat("/a " + msg);
},
SendChat: function (name, mess) {
var inp = document.getElementById('mod_comm_input');
inp.value = "@" + name + ' ' + mess;
unsafeWindow.Chat.sendChat();
},
ajaxDeleteMyReport: function (rptid, isUnread, side, isCityReport, notify) {
var params = uW.Object.clone(uW.g_ajaxparams);
params.s0rids = rptid;
params.s1rids = '';
params.cityrids = '';
new MyAjaxRequest(uW.g_ajaxpath + "ajax/deleteCheckedReports.php" + uW.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (rslt) {
if (rslt.ok && isUnread) {
uW.seed.newReportCount = parseInt(seed.newReportCount) - 1;
uW.messages_notify_bug()
}
if (notify)
notify(rslt.errorMsg);
},
onFailure: function () {
if (notify)
notify('AJAX ERROR');
},
});
},
hookz: function (msg, rslt) {
msg = msg.replace(/(\bReport\sNo\:\s([0-9]+))/g, '<a onclick=\'ptChatReportClicked($2,0)\'>$1</a>');
return msg;
},
hook2: function (msg, args, rslt) {
//alert('hook2 '+rslt);
if (rslt.rnds && Options.dispBattleRounds) {
msg = msg.replace(/<\/ul>.*\s*<\/div>.*\s*<div class="unitsContainer">/im, '<li><span class=\'label\'>Rounds: </span><span class=\'value\'>' + rslt.rnds + '</span></li></ul></div><div class="unitsContainer">');
}
if (Options.reportDeleteButton) {
msg = msg.replace(/Reports<\/span><\/a>/im, 'Reports</span></a><a class=\'button20\' onclick=\'PostReport(' + args[0] + ',false)\'><span>Post To Chat</span></a>'); //Post to Chat button
msg = msg.replace(/Reports<\/span><\/a>/im, 'Reports</span></a><a class=\'button20\' onclick=\'MoreReport(' + args[0] + ',' + args[1] + ',false)\'><span>More</span></a>'); //More button
msg = msg.replace(/Reports<\/span><\/a>/im, 'Reports</span></a><a class=\'button20\' onclick=\'deleteAreport(' + args[0] + ',false)\'><span>' + uW.g_js_strings.commonstr.deletetx + '</span></a>'); //Delete button
}
return msg;
},
hook: function (msg, rslt) {
//alert('hook '+rslt);
if (rslt.rnds && Options.dispBattleRounds) {
msg = msg.replace(/(Attackers <span.*?)<\/div>/im, '$1<BR>Rounds: ' + rslt.rnds + '</div>');
}
return msg;
},
}
var mapinfoFix = {
init: function () {
var t = mapinfoFix;
t.calcButtonInfo = new CalterUwFunc('cm.ContextMenuMapController.prototype.calcButtonInfo',
[[/case\s*"reassign":b\.text\s*=\s*g_js_strings\.commonstr\.reassign;b\.color\s*=\s*"blue";b\.action\s*=\s*function\s*\(\)\s*{modal_attack\(2,\s*e\.tile\.x,\s*e\.tile\.y\);*};d\.push\(b\);break;/,
'case "reassign":b.text=g_js_strings.commonstr.reassign;b.color="blue";b.action=function(){modal_attack(5,e.tile.x,e.tile.y);};d.push(b);break;']]);
t.bookMarkMod = new CalterUwFunc('cm.ContextMenuMapController.prototype.calcButtonInfo',
[[/case\s*"bookmark":/, 'case "bookmark": try { if (e.city && cm.tileInfo[e.tile.id] && cm.tileInfo[e.tile.id].cityName ) {e.tile.name = e.user.username + "/" + cm.tileInfo[e.tile.id].cityName;}} catch (err1) {} ']]);
t.MapContextMenus = new CalterUwFunc ('cm.ContextMenuMapController.prototype.calcCityType', [['return c', 'c = calcCityTypeFix(c,d);return c']]);
t.calcButtonInfo.setEnable(Options.mapInfo);
t.MapContextMenus.setEnable(Options.mapInfo2);
t.bookMarkMod.setEnable(Options.mapInfo3);
uW.cm.ContextMenuMapController.prototype.MapContextMenus.City["2"].splice(4, 0, "reassign");
// add reinforcement of wilds
for (jj in uW.cm.ContextMenuMapController.prototype.MapContextMenus.AllianceWilderness) {
uW.cm.ContextMenuMapController.prototype.MapContextMenus.AllianceWilderness[jj] = ["profile", "throne", "reinforce", "reinforcements", "message", "bookmark"];
}
uW.calcCityTypeFix = t.calcCityType_hook;
// add the city status (Normal/Truce) to the tooltips
uW.ptGetProvince = function (N) {
return '<div class="thead" align="center"><b>' + uW.provincenames['p' + N.tileProvinceId] + '</b></div>';
}
if (FFVersion.substring(0, 4) > 16) {
t.dispStatusMod = new CalterUwFunc('MapObject.prototype.populateSlots', [
[/var\s*Q\s*=\s*"";/, ' var Q = ""; if (G) g += "<div>Status: " + G + "</div>";'],
[/var\s*g\s*=""/, 'var g = ""; g+=ptGetProvince(N);']
]);
} else {
t.dispStatusMod = new CalterUwFunc('MapObject.prototype.populateSlots', [
[/var\s*Q\s*=\s*"";/, ' var Q = ""; if (G) g += "<div>Status: " + G + "</div>";'],
['var g = "";', 'var g = "";g+=ptGetProvince(N);']
]);
}
t.dispStatusMod.setEnable(Options.dispStatus);
},
setEnable: function (tf) {
var t = mapinfoFix;
t.calcButtonInfo.setEnable(tf);
},
setEnable2: function (tf) {
var t = mapinfoFix;
t.MapContextMenus.setEnable(tf);
},
setEnable3: function (tf) {
var t = mapinfoFix;
t.bookMarkMod.setEnable(tf);
},
setEnableDispStatus: function (tf) {
var t = mapinfoFix;
t.dispStatusMod.setEnable(tf);
},
calcCityType_hook: function (c, d) {
if (Cities.byID[d.city.id] && c != 1)
c = uW.cm.CITY_STATUS.MY_CITY_AND_NOT_CURRENT_CITY;
return c;
},
isAvailable: function () {
var t = mapinfoFix;
return t.calcButtonInfo.isAvailable();
},
isAvailable2: function () {
var t = mapinfoFix;
return t.MapContextMenus.isAvailable();
},
isAvailable3: function () {
var t = mapinfoFix;
return t.bookMarkMod.isAvailable();
},
isAvailableDispStatus: function () {
var t = mapinfoFix;
return t.dispStatusMod.isAvailable();
},
}
var ApothTimeFix = {
apothFix: null,
apothFixCB: null,
init: function () {
t = ApothTimeFix;
t.apothFix = new CalterUwFunc('cm.RevivalModel.getRevivalStats', [
[/&&\s*h\.isDruid/im, '|| h.id === 23'],
[/try/im, 'var insert=getRevivalStats_hook(insert); var ff = insert.f; var equippedItems = insert.equippedItems; var dd = insert.d; g = dd[k]["Cost"] * j; try'],
[/g\s*=\s*e\(k\)\s*\*\s*j,/im, ' '],
[/hasFactionBonus\(\)/im, 'hasFactionBonus(equippedItems)'],
[/\[7]\s*\*\s*j/im, '[7] * parseInt(j)'],
[/o\s*-\s*\(o\s*\*/img, 'o / (1 +'],
[/afford\s*:\s*f\(\)/im, 'afford : ff']
]);
t.apothFixCB = new CalterUwFunc('cm.RevivalModel.getRevivalStats', [
[/o\s*-\s*o\s*\*\s*\(/im, 'o / (1 +'],
[/o\s*-\s*o\s*\*\s*\cm/im, 'o / (1 + cm'],
[/currentcityid\)\);/im, 'currentcityid)));']
]); //fix for cometbird
// TODO: seems like getMaximumTrainable breaks the bonus calculations in getRevivalStats - need to find a workaround
uW.getRevivalStats_hook = t.hook;
t.apothFix.setEnable(Options.fixApothTime);
t.apothFixCB.setEnable(Options.fixApothTime);
},
setEnable: function (tf) {
var t = ApothTimeFix;
t.apothFix.setEnable(tf);
t.apothFixCB.setEnable(tf);
},
isAvailable: function () {
var t = ApothTimeFix;
return t.apothFix.isAvailable();
return t.apothFixCB.isAvailable();
},
hook: function (insert) {
var t = ApothTimeFix;
var insert = {};
insert.f = parseInt(uW.seed.citystats["city" + uW.currentcityid].gold[0]);
insert.d = uW.cm.WorldSettings.getSettingAsObject("APOTHECARY_COST");
var equippedItems = equippedthroneItems(equippedItems);
insert.equippedItems = equippedItems;
return insert;
},
}
var TRAetherCostFix = {
aethercostFix: null,
init: function () {
t = TRAetherCostFix;
t.aethercostFix = new CalterUwFunc('cm.ThronePanelController.calcCost', [
[/if\(k\(/im, 'if(cm.ThronePanelController.isLastLevel('],
[/D\.stones\.use\s*=\s*D\.stones\.total/im, 'D.stones.use = A'],
[/if\(D\.stones\.use\s*==/im, 'if(D.stones.use >='],
[/D\.gems\.use\s*=\s*b\(D\.stones\.total\s*-\s*A\)/im, 'var x = + (cm.WorldSettings.getSetting("TR_AETHERSTONE_CONVERSION_COST")), y; D.gems.use = Math.ceil((D.stones.total - A)/x)'],
[/D\.gems\.use\s*=\s*b\(y\[C]\.Stones\)/im, 'var x = + (cm.WorldSettings.getSetting("TR_AETHERSTONE_CONVERSION_COST")), y; D.gems.use = Math.ceil((y[C].Stones)/x)'],
[/if\s*\(k\(/im, 'if(cm.ThronePanelController.isLastLevel('], //fix for cometbird
[/if\s*\(D\.stones\.use\s*==/im, 'if(D.stones.use >=']
]); //fix for cometbird
t.aethercostFix.setEnable(Options.fixTRAetherCost);
},
setEnable: function (tf) {
var t = TRAetherCostFix;
t.aethercostFix.setEnable(tf);
},
isAvailable: function () {
var t = TRAetherCostFix;
return t.aethercostFix.isAvailable();
},
}
var mmbImageFix = {
imageFix: null,
init: function () {
t = mmbImageFix;
t.imageFix = new CalterUwFunc('cm.mww.mmb_share', [
[/img\/items\/130/im, 'img/items/70/'],
[/common_postToProfile\(\"85\"/im, 'template_data_85.img1=template_data_85.media[0].src; common_postToProfile(\"85\"']
]);
t.imageFix.setEnable(Options.fixMMBImage);
},
setEnable: function (tf) {
var t = mmbImageFix;
t.imageFix.setEnable(tf);
},
isAvailable: function () {
var t = mmbImageFix;
return t.imageFix.isAvailable();
},
}
var MapDoubleClickFix = {
doubleClickFix: null,
init: function () {
t = MapDoubleClickFix;
// t.doubleClickFix = new CalterUwFunc ('g_mapObject.populateSlots', [[/that\.controller\.onTileClick\(this\)/im,'setTimeout(that.controller.onTileClick(this),1000)}).off("dblclick", "**").on("dblclick", "a", function(){that.controller.onTileDblClick(this)']]);
// replace with previous map mouse event handler coding
t.doubleClickFix = new CalterUwFunc ('g_mapObject.populateSlots', [[/map1.*Tooltip/img,'map1 a").unbind("click").clicks(function(){setTimeout(that.controller.onTileClick(this),200)}, function(){that.controller.onTileDblClick(this)}).unbind("hover").hover(function(i){that.controller.onTileEnter(this, i)}, function(){removeTooltip']]);
t.doubleClickFix.setEnable(Options.fixMapDblClick);
},
setEnable: function (tf) {
var t = MapDoubleClickFix;
t.doubleClickFix.setEnable(tf);
},
isAvailable: function () {
var t = MapDoubleClickFix;
return t.doubleClickFix.isAvailable();
},
}
var ChatTimeFix = {
ChatTime: null,
init: function () {
t = ChatTimeFix;
uW.ptConvertTime = function (timestr) {
time = timestr.split(/:/);
var AddMins = 480-parseInt(getDST(new Date())/60)-(new Date().getTimezoneOffset()); // convert from local pacific time
var min = (parseInt(time[0]) * 60) + parseInt(time[1]) + AddMins;
if (min >= 1440) {
min = min - 1440;
}
return parseInt(min / 60) + ':' + ('00' + parseInt(min % 60).toString()).slice(-2);
}
t.ChatTime = new CalterUwFunc("Chat.getChat", [
['rslt.data.newChats[i][j][1],', 'ptConvertTime(rslt.data.newChats[i][j][1]),'],
['rslt.data.newChats[i][j][1],', 'ptConvertTime(rslt.data.newChats[i][j][1]),']
]);
t.ChatTime.setEnable(Options.fixChatTime);
},
setEnable: function (tf) {
var t = ChatTimeFix;
t.ChatTime.setEnable(tf);
},
isAvailable: function () {
var t = ChatTimeFix;
return t.ChatTime.isAvailable();
},
}
var bypassMulti = {
MultiBrowserBypass: null,
init: function () {
t = bypassMulti;
// t.MultiBrowserBypass = new CalterUwFunc ('update_seed_ajax', [[/if\(typeof\s*isCancelTraining/im,'var l_lastCallTime = 0; var reload_requests = 0; var l_callIntervalMin = 10; if(typeof isCancelTraining'],[/if\(rslt\.error_code\s*==\s*60\)/im,'return; if(rslt.error_code == 60)']]);
t.MultiBrowserBypass = new CalterUwFunc('update_seed_ajax', [
[/if\s*\(typeof\s*isCancelTraining/im, 'var l_lastCallTime = cm.l_lastCallTime; var reload_requests = cm.reload_requests; var l_callIntervalMin = cm.l_callIntervalMin; if(typeof isCancelTraining'],
[/if\s*\(rslt\.error_code\s*==\s*60\)/im, 'return; if(rslt.error_code == 60)']
]);
t.MultiBrowserBypass.setEnable(Options.allowMultiBroswer);
},
setEnable: function (tf) {
var t = bypassMulti;
t.MultiBrowserBypass.setEnable(tf);
},
isAvailable: function () {
var t = bypassMulti;
return t.MultiBrowserBypass.isAvailable();
},
}
var BarbRaidMarchPatch = {
marchFix: null,
init: function () {
t = BarbRaidMarchPatch;
if (FFVersion.substring(0, 4) > 16)
t.marchFix = new CalterUwFunc ('update_march', [[/D\.toTileLevel,\s*n,\s*M\)/im,'D.toTileLevel, n, M, Math.floor(unixtime()+D.returnEta-D.marchUnixTime))']]);
else
t.marchFix = new CalterUwFunc ('update_march', [['D.toTileLevel, n, M)','D.toTileLevel, n, M, Math.floor(unixtime()+D.returnEta-D.marchUnixTime))']]);
t.marchFix.setEnable(Options.togRaidPatch);
},
setEnable: function (tf) {
var t = BarbRaidMarchPatch;
t.marchFix.setEnable(tf);
},
isAvailable: function () {
var t = BarbRaidMarchPatch;
return t.marchFix.isAvailable();
},
}
var anticd = {
isInited: false,
KOCversion: '?',
init: function () {
if (this.isInited)
return this.KOCversion;
uW.cm.cheatDetector.detect = eval('function a (){}');
var scripts = document.getElementsByTagName('script');
for (var i = 0; i < scripts.length; i++) {
if (scripts[i].src.indexOf('camelotmain') >= 0) {
break;
}
}
if (i < scripts.length) {
var m = scripts[i].src.match(/camelotmain-(.*).js/);
if (m)
this.KOCversion = m[1];
}
this.isInited = true;
// more coming soon :)
},
getKOCversion: function () {
return this.KOCversion;
},
}
anticd.init();
/***
<img src='https://kabam1-a.akamaihd.net/silooneofcamelot/fb/e2/src/img/avatars/25/m16.jpg'/>
<div class='content'>
<div class='info'>
<a class='nm' onclick='Chat.viewProfile(this,9640194,false);return false;'>Lord Sasuke_of_leaf</a>
<span class='time'>17:17</span>
</div>
<div class='clearfix'>
<div class='tx'>
if ur really bored try it
</div>
</div>
</div>
<img src="https://kabam1-a.akamaihd.net/silooneofcamelot/fb/e2/src/img/avatars/25/f9.jpg">
<div class="content">
<div class="info">
<a class="nm" onclick="Chat.viewProfile(this,3813948,false);return false;">Lady Aerwyn</a>
<b style="color: rgb(165, 102, 49); font-size: 9px;"> says to the alliance:</b>
<span class="time">17:32</span>
</div>
<div class="clearfix">
<div class="tx">
ok, heading out to dinner with family... be back laters
</div>
</div>
</div>
WHISPER (chatDivContentHook) .....
<img src='https://kabam1-a.akamaihd.net/silooneofcamelot/fb/e2/src/img/avatars/25/m1.jpg'/>
<div class='content'>
<div class='info'>
<a class='nm' onclick='Chat.viewProfile(this,2282354,false);return false;'>Lord Jetson</a>
<b style='color:#A56631;font-size:9px;'> whispers to you:</b>
<span class='time'>17:46</span>
</div>
<div class='clearfix'>
<div class='tx'>
test
</div>
</div>
</div>
<div class="chatwrap clearfix direct">
<img src="https://kabam1-a.akamaihd.net/silooneofcamelot/fb/e2/src/img/avatars/25/m1.jpg">
<div class="content">
<div class="info">
<span class="nm">Lord Jetson</span>
<b style="color: rgb(165, 102, 49); font-size: 9px;"> whispers to <a onclick="Chat.viewProfile(this,2282354); return false;" class="nm">jetson</a>:</b>
<span class="time">20:47</span>
</div>
<div class="clearfix">
<div class="tx">
test
</div>
</div>
</div>
</div>
****/
var ChatStuff = {
chatDivContentFunc: null,
getChatFunc: null,
leaders: {},
init: function () {
var t = ChatStuff;
if (getMyAlliance()[0] > 0)
t.getAllianceLeaders();
// [[/h\s*=\s*cm.formatModel\.exe\(h,\s*true\);/,'h=chatDivContent_hook2(h);h = cm.formatModel.exe(h, true);'],
t.chatDivContentFunc = new CalterUwFunc ('Chat.chatDivContent', [['return f.join("")', 'var msg = f.join("");\n msg=chatDivContent_hook(msg,d);\n return msg;']]);
uW.chatDivContent_hook = t.chatDivContentHook;
uW.chatDivContent_hook2 = t.chatDivContentHook2;
uW.ptChatIconClicked = t.e_iconClicked;
uW.ptChatReportClicked = Rpt.FindReport;
t.setEnable(Options.chatEnhance);
if (Options.chatglobal) {
document.getElementById('mod_comm_list1').className += ' ptChatGlobal ';
}
if (Options.chatalliance) {
document.getElementById('mod_comm_list2').className += ' ptChatAlliance ';
}
},
isAvailable: function () {
var t = ChatStuff;
t.chatDivContentFunc.isAvailable();
},
setEnable: function (tf) {
var t = ChatStuff;
t.chatDivContentFunc.setEnable(tf);
},
e_iconClicked: function (name) {
if (document.getElementById('bot_comm_input'))
var e = document.getElementById('bot_comm_input');
else
var e = document.getElementById('mod_comm_input');
name = name.replace(/°°/g, "'");
e.value = '@' + name + ' ';
},
chatDivContentHook2: function (msg) {
var div = document.createElement('div');
div.innerHTML = msg;
div.innerText = div.innerHTML;
msg = div.innerHTML.toString();
return msg.htmlSpecialCharsDecode();
},
chatDivContentHook: function (msg, type) {
var t = ChatStuff;
var element_class = '';
var alliance = false;
var whisper = false;
var m = /div class=\'info\'>.*<\/div>/im.exec(msg);
if (m == null)
return msg;
if (type != null) {
if (type.indexOf('says to the alliance') > 0) {
alliance = true;
}
if (type.indexOf('whispers to you') > 0) {
whisper = true;
}
}
var whisp = m[0];
if (whisper) {
if (Options.chatwhisper) {
element_class += ' ptChatWhisper ';
}
} else { //Global & Alliance
if (Options.chatbold)
element_class += ' ptChatBold ';
}
var suid = /viewProfile\(this,([0-9]+),false/i.exec(m[0]);
if (!suid)
suid = uW.tvuid;
else
suid = suid[1];
if (Options.chatLeaders) {
if (t.leaders[suid]) element_class += ' ptChat' + t.leaders[suid];
}
if (rats.indexOf(suid) >= 0 && suid != uW.tvuid) element_class += ' ptChatRat';
if (scripters.indexOf(suid) >= 0) {
//msg = msg.replace (/\bhttps\:\/\/[-a-z].*\'\/\>/i, 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAIAAABLixI0AAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sIDwArAkRAgZ4AAAPXSURBVDjLrVRNSDJdFL4zjpqiWZROlkEtsk20cGPqQkQpKIRykTu37aKgFi1cRxZUixat3BQkRCX9UrsUQ0TEhH6IMBcVbpRB58fRmfsubu+UvV98Hx/vszj3cM55zjn3nnsvlkwmBUGo1+s8z/M8z3Ecy7Isy9I0TdN09TcqlQpSGIahaZrjOI7jeJ6v1+uNRkMQBAghkclk6vU69xssyzIMgzjVapWmaYZhGIaRyIgvCIIgCKAZWDabFQRBFEUIYaPREEVRkoiAXAiiKGIYhvTPFBgGIcQwjDg6OhJFUUqBukV8AMBX+a/AdDod4n9t4Vuu/whZo9Hged5kMg0ODjYajXK5TBCEzWbr7e0VBKFSqfzEtFgsfr9/aGioWCw2ha2vr0MIl5aWAAAHBwcQwufnZwzD/jGLXC6Px+PSIV5cXCA7gRa0TZ7nZ2ZmpqamKIoaHh7+aYPRaNRut7Msu729rdVqSZJscq+trUEIw+EwKtXf34/sGo0mEomwLFur1aLRaEdHh8FgQDEmkwnFtLa2fs8lTTAUCkn2+/t7COHDw0M2m4UQvr29ORwOCGE+n/9xBKiv/f19VHNkZAQAQJIkhLBcLqOYQqEAIfT7/d/ulwRc0iCEiUQCHX8sFjMYDNVqFW1TpVIBANra2gAAV1dX7+/voiimUqmxsTGfz7e1tfW9L1EUFxcXUbQoiq+vrwCAnZ0d+AXn5+cAgIGBAY7jJOPx8fHH/foYJ0EUCoXr6+tCoRCJRBQKRSaT0Wq1y8vL+XxeFMXHx8fNzc35+XkAQKlUCoVCtVqtVqvlcrlwOPz4+Aj+Lj76crvdXq83mUwGAgGbzabRaFwu1+3trdPptNvtZrO5q6vL4/F0d3e73W6ZTOb1ejUazcvLSzAYpCiqWCx+5orFYnNzc4FAgCTJm5ubYDCYTqddLtfk5KTH46nX6xRFLSwsJBIJs9l8eHi4urpqtVqVSqVarU4kEk1vaGJi4unp6eTkhCAIdLPv7u5Iktzd3c3lcmdnZzKZLB6POxyOdDo9OjpKUdTp6SkazsrKStMb8vl8FEVtbGxcXl7GYjG1Wr23t4cqUxQ1Pj4OAFCpVDiOl0qlSqWSSqWMRuP09HQmk7FarU3HptfrDQYDUvr6+jo7OwEARqOxvb0d6cjV0tLS09Oj0+n0er1arVYqlRaL5fP/+isTRD8KNjs7+//I6F+WEgEACKfT+WeFP+MAADiOo2eIYZjklYDjOPZTWRzHcRyXfQFBEJKUy+WSgqBQKDCZTIZqYhiGQgmCkCKUSqVCoUDyKxBZoVAQBCFZfgGv35yL3q6pzwAAAABJRU5ErkJggg=='+'\'\/\>');
element_class += ' ptChatScripter';
}
if (Options.ChatIcons) {
if (ChatIcons[suid]) {
msg = msg.replace(/\bhttps\:\/\/[-a-z].*\'\/\>/i, "https://graph.facebook.com/" + ChatIcons[suid] + "/picture\'\/\>");
} else {
t.getfbid(suid);
}
}
var fchar = new RegExp(atob('rQ=='), "g");
msg = msg.replace(fchar, "").replace(/\&\#8232\;/g, "");
if (alliance) {
if (m[0].indexOf('My embassy has') >= 0 && Options.chatAttack)
element_class = ' ptChatAttack';
if (m[0].indexOf('My wilderness at') >= 0 && Options.chatAttack)
element_class = ' ptChatAttack';
//barcode style catch
if (m[0].indexOf('..:.') >= 0 && Options.chatAttack) {
element_class = ' ptChatAttack';
var f = msg.indexOf('<div class=\'tx\'>');
if (f >= 0) {
msg = msg.replace(/<div class=\'tx\'>/, '<div class=\'tx\'><center><table border="1" cellpadding="0"><tr><td>')
msg = msg.replace(/\|\|/g, '</td></tr><tr><td>');
var a = msg.indexOf('</div>', f);
msg = msg.slice(0, a) + '</td></tr></table></center>' + msg.slice(a);
}
msg = msg.replace(/\|/g, '<br>');
msg = msg.replace('..:.', '');
if (Options.enableTowerAlert) {
AudioManager.setSource(SOUND_FILES.alert);
AudioManager.play();
setTimeout(function () {
AudioManager.stop();
}, 5000);
}
}
if (m[0].indexOf('.::.') >= 0 && Options.chatAttack) {
element_class = ' ptChatRecall';
var f = msg.indexOf('<div class=\'tx\'>');
if (f >= 0) {
msg = msg.replace(/<div class=\'tx\'>/, '<div class=\'tx\'><center><table border="1" cellpadding="0"><tr><td>')
msg = msg.replace(/\|\|/g, '</td></tr><tr><td>');
var a = msg.indexOf('</div>', f);
msg = msg.slice(0, a) + '</td></tr></table></center>' + msg.slice(a);
}
msg = msg.replace(/\|/g, '<br>');
msg = msg.replace('.::.', '');
}
}
//tables for other use
if (m[0].indexOf(':::.') >= 0) {
var f = msg.indexOf('<div class=\'tx\'>');
if (f >= 0) {
msg = msg.replace(/<div class=\'tx\'>/, '<div class=\'tx\'><center><table border="1" cellpadding="0"><tr><td>')
msg = msg.replace(/\|\|/g, '</td></tr><tr><td>');
var a = msg.indexOf('</div>', f);
msg = msg.slice(0, a) + '</td></tr></table></center>' + msg.slice(a);
}
msg = msg.replace(/\|/g, '<br>');
msg = msg.replace(':::.', '');
}
msg = msg.replace("class=\'content\'", "class='content " + element_class + "'");
msg = msg.replace(/(\bReport\sNo\:\s([0-9]+))/g, '<a onclick=\'ptChatReportClicked($2,0)\'>$1</a>');
msg = msg.replace(/(\bRpt\:([0-9]+))/g, '<a onclick=\'ptChatReportClicked($2,0)\'>$1</a>');
msg = msg.replace(/#([0-9]+)#/g, '<a onclick=\'ptChatReportClicked($1,0)\'>$1</a>');
msg = msg.replace(/(\byoutu([0-9a-z\.\?\/\=\-\_]+))/gi, '<a onclick=\"window.open\(\'http\:\/\/www\.$1\',\'_blank\'\)\">$1</a>');
msg = msg.replace(/(\W)(bot)(\W)/gi, '$1<a onclick=window.open("https://userscripts.org/scripts/show/101052")>$2</a>$3');
msg = msg.replace(/(\W)(tools)(\W)/gi, '$1<a onclick=window.open("https://userscripts.org/scripts/show/116541")>$2</a>$3');
msg = msg.replace(/(\W)(tro)(\W)/gi, '$1<a onclick=window.open("https://userscripts.org/scripts/show/132329")>$2</a>$3');
msg = msg.replace(/(\W)(kocers\.com)(\W)/gi, '$1<a onclick=window.open("https://kocscripters.com")>kocscripters.com</a> $3');
msg = msg.replace(/(\W)(forums)(\W)/gi, '$1<a onclick=window.open("http://community.kabam.com/forums/forumdisplay.php?4-Kingdoms-of-Camelot")>$2</a>$3');
var m = /(Lord|Lady) (.*?)</im.exec(msg);
if (m != null)
m[2] = m[2].replace(/\'/g, "°°");
msg = msg.replace(/<img (.*?>)/img, '<A onclick=\"ptChatIconClicked(\'' + m[2] + '\')\"><img class=\"ptChatIcon\" $1</a>');
if (whisper && Options.enableWhisperAlert) {
AudioManager.setSource(eval('SOUND_FILES.' + Options.whisperplay));
AudioManager.play();
setTimeout(function () {
AudioManager.stop();
}, 2500);
}
if (alliance) {
if (whisp.indexOf('My embassy has') >= 0 && Options.enableTowerAlert) {
AudioManager.setSource(SOUND_FILES.alert);
AudioManager.play();
setTimeout(function () {
AudioManager.stop();
}, 5000);
}
if (whisp.indexOf('My wilderness at') >= 0 && Options.enableTowerAlert) {
AudioManager.setSource(SOUND_FILES.alert);
AudioManager.play();
setTimeout(function () {
AudioManager.stop();
}, 5000);
}
t.sendToIRC(suid, m[2], msg);
}
//lets remove the null character which could be a problem when copy and paste web addresses Null:"Â",UnicodeLS:"
",
return msg;
},
getAllianceLeaders: function () {
var t = ChatStuff;
var params = unsafeWindow.Object.clone(unsafeWindow.g_ajaxparams);
new MyAjaxRequest(unsafeWindow.g_ajaxpath + "ajax/allianceGetLeaders.php" + unsafeWindow.g_ajaxsuffix, {
method: "post",
parameters: params,
loading: true,
onSuccess: function (rslt) {
if (rslt.officers) {
for (uid in rslt.officers) {
var user = rslt.officers[uid];
t.leaders[user.userId] = user.type.substr(0, 4);
}
}
},
onFailure: function () {}
});
},
getfbid: function (uid) {
Tabs.AllianceList.fetchPlayerCourt(uid, ChatStuff.addfbuid);
},
addfbuid: function (rslt) {
var t = ChatStuff;
if (rslt.ok) {
var uid = parseInt(rslt.playerInfo.userId);
var fbid = parseInt(rslt.playerInfo.fbuid);
ChatIcons[uid] = fbid;
saveChatIconsOptions();
}
},
sendToIRC: function (uid, name, msg) {
Tabs.IRC.grabChat(uid, name, msg);
},
}
var AudioManager = {
player: null,
volume: 100,
type: 'html5',
alertdiv: null,
init: function () {
var t = AudioManager;
if ( !! document.createElement("audio").canPlayType) {
t.player = new Audio();
t.type = 'html5';
t.player.addEventListener("ended", function () {
t.player.currentTime = 0
}, false);
t.setVolume(t.volume);
} else {
t.creatediv();
t.type = 'swf';
}
},
setVolume: function (vol) {
var t = AudioManager;
t.volume = vol;
t.player.volume = t.volume * 0.01;
},
play: function () {
var t = AudioManager;
if (t.type == 'html5') {
if (!t.player.paused) {
t.stop();
}
t.player.play();
} else {
t.alertdiv.innerHTML = t.source;
}
},
stop: function () {
var t = AudioManager;
if (t.type == 'html5') {
t.player.pause();
if (t.player.readyState === 4) {
t.player.currentTime = 0
}
} else {
t.alertdiv.innerHTML = '<b style=\'color: rgb(165, 102, 49); font-size: 9px;\'>Audio Alert Played</b>';
}
},
pause: function () {
var t = AudioManager;
t.player.pause();
},
setSource: function (src) {
var t = AudioManager;
if (t.type == 'html5') {
t.player.src = src.OGG;
t.source = src.OGG;
} else
t.source = src.DEFAULT;
},
toggleMute: function () {
var t = AudioManager;
t.player.muted = !t.player.muted;
},
creatediv: function () {
var t = AudioManager;
var div = document.getElementsByTagName('div');
for (var i = 0; i < div.length - 1; i++)
if (div[i].className == 'mod_comm_forum')
e = div[i];
t.alertdiv = document.createElement("span");
e.appendChild(t.alertdiv);
},
}
var Rpt = {
FindReport: function (rpId, pageNum) {
var t = Rpt;
var params = uW.Object.clone(uW.g_ajaxparams);
params.rid = rpId;
new MyAjaxRequest(uW.g_ajaxpath + "ajax/fetchReport.php" + uW.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (rslt) {
var rpt = rslt['index'];
rpt.Side0PlayerId = rslt['index']['side0PlayerId'];
rpt.Side0AllianceId = rslt['index']['side0AllianceId'];
rpt.Side1PlayerId = rslt['index']['side1PlayerId'];
t.GetNames(rpId, rpt);
},
onFailure: function () {
alert('kabam is having issues');
},
}, false);
},
GetNames: function (rpId, rpt) {
var t = Rpt;
var params = uW.Object.clone(uW.g_ajaxparams);
params.uid = rpt.Side1PlayerId;
new MyAjaxRequest(uW.g_ajaxpath + "ajax/getUserGeneralInfo.php" + uW.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (rslt) {
rpt.side1Name = rslt['userInfo']['0']['name'];
if (rpt.Side0PlayerId) {
if (rpt.Side0PlayerId != 0) {
var params = uW.Object.clone(uW.g_ajaxparams);
params.uid = rpt.Side0PlayerId;
new MyAjaxRequest(uW.g_ajaxpath + "ajax/getUserGeneralInfo.php" + uW.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (rslt) {
rpt.side0Name = rslt['userInfo']['0']['name'];
t.GetReport(rpId, rpt);
},
onFailure: function () {
alert('kabam is having issues');
},
}, false);
} else {
rpt.side0Name = "Enemy";
t.GetReport(rpId, rpt);
}
} else {
rpt.side0Name = "Enemy";
t.GetReport(rpId, rpt);
}
},
onFailure: function () {
alert('kabam is having issues');
},
}, false);
},
GetReport: function (rpId, rpt) {
var t = Rpt;
var params = uW.Object.clone(uW.g_ajaxparams);
params.side = 1;
if (rpt.Side0PlayerId == uW.tvuid) {
params.side = 0;
} else {
if (rpt.Side1PlayerId == uW.tvuid) {
params.side = 1;
} else {
if (Seed.allianceDiplomacies) {
if (parseInt(rpt.side0AllianceId) == parseInt(Seed.allianceDiplomacies.allianceId)) {
params.side = 0;
} else {
params.side = 1;
}
}
}
}
rpt.sideId = params.side;
params.rid = rpId;
new MyAjaxRequest(uW.g_ajaxpath + "ajax/fetchReport.php" + uW.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (rslt) {
if (rslt.error_code)
alert('found report but kabam would not let me see it');
else
t.ReportPopup(rslt, rpt, rpId);
},
onFailure: function (rslt) {},
}, false);
},
ReportPopup: function (rslt, rpt, reportId) {
var t = Rpt;
var popReport = null;
//need the info from the list query
var m = '';
var unitImg = [];
for (var ui in uW.cm.UNIT_TYPES) {
i = uW.cm.UNIT_TYPES[ui];
unitImg[i] = '<img src=https://kabam1-a.akamaihd.net/silooneofcamelot//fb/e2/src/img/units/unit_' + i + '_30.jpg></TD><TD>' + uW.unitcost['unt' + i][0];
}
unitImg[53] = '<img src=https://kabam1-a.akamaihd.net/silooneofcamelot/fb/e2/src/img/units/unit_53_30.png></TD><TD>Crossbows';
unitImg[55] = '<img src=https://kabam1-a.akamaihd.net/silooneofcamelot/fb/e2/src/img/units/unit_55_30.png></TD><TD>Trebuchet';
unitImg[60] = '<img src=https://kabam1-a.akamaihd.net/silooneofcamelot/fb/e2/src/img/units/unit_60_30.png></TD><TD>Trap';
unitImg[61] = '<img src=https://kabam1-a.akamaihd.net/silooneofcamelot/fb/e2/src/img/units/unit_61_30.png></TD><TD>Caltrops';
unitImg[62] = '<img src=https://kabam1-a.akamaihd.net/silooneofcamelot/fb/e2/src/img/units/unit_62_30.png></TD><TD>Spiked Barrier';
for (var i = 101; i < 111; i++)
unitImg[i] = '<img src=https://kabam1-a.akamaihd.net/silooneofcamelot//fb/e2/src/img/units/unit_' + i + '_30.jpg></TD><TD>' + eval("uW.g_js_strings.monsterUnitsNames.m" + i);
goldImg = GameIcons.goldImg + '</TD><TD>Gold';
foodImg = GameIcons.foodImg + '</TD><TD>Food';
woodImg = GameIcons.woodImg + '</TD><TD>Wood';
stoneImg = GameIcons.stoneImg + '</TD><TD>Stone';
oreImg = GameIcons.oreImg + '</TD><TD>Ore';
astoneImg = GameIcons.astoneImg + '</TD><TD>Aetherstone';
var unitImg2 = [];
for (var ui in uW.cm.UNIT_TYPES) {
i = uW.cm.UNIT_TYPES[ui];
unitImg2[i] = '<img src=https://kabam1-a.akamaihd.net/silooneofcamelot//fb/e2/src/img/units/unit_' + i + '_30.jpg></TD><TD>';
}
unitImg2[53] = '<img src=https://kabam1-a.akamaihd.net/silooneofcamelot/fb/e2/src/img/units/unit_53_30.png></TD><TD>';
unitImg2[55] = '<img src=https://kabam1-a.akamaihd.net/silooneofcamelot/fb/e2/src/img/units/unit_55_30.png></TD><TD>';
unitImg2[60] = '<img src=https://kabam1-a.akamaihd.net/silooneofcamelot/fb/e2/src/img/units/unit_60_30.png></TD><TD>';
unitImg2[61] = '<img src=https://kabam1-a.akamaihd.net/silooneofcamelot/fb/e2/src/img/units/unit_61_30.png></TD><TD>';
unitImg2[62] = '<img src=https://kabam1-a.akamaihd.net/silooneofcamelot/fb/e2/src/img/units/unit_62_30.png></TD><TD>';
for (var i = 101; i < 111; i++)
unitImg2[i] = '<img src=https://kabam1-a.akamaihd.net/silooneofcamelot//fb/e2/src/img/units/unit_' + i + '_30.jpg></TD><TD>';
var trEffect = [];
/*
trEffect[1] = 'Attack';
trEffect[2] = 'Defense';
trEffect[3] = 'Life';
trEffect[4] = 'Combat Speed';
trEffect[5] = 'Range';
trEffect[6] = 'Load';
trEffect[7] = 'Accuracy';
trEffect[8] = 'Bonus to PvP on Defense';
trEffect[9] = 'Bonus to PvP on Offense';
trEffect[10] = 'Bonus vs. Wilds';
trEffect[11] = 'Bonus vs. Barbarian Camps';
trEffect[12] = 'Bonus vs. Dark Forests';
trEffect[13] = 'Bonus to Traps';
trEffect[14] = 'Bonus to Spiked Barriers';
trEffect[15] = 'Bonus to Wall Mounted Crossbows';
trEffect[16] = 'Bonus to Wall';
trEffect[17] = 'Attack Debuff';
trEffect[18] = 'Defense Debuff';
trEffect[19] = 'Life Debuff';
trEffect[20] = 'Combat Speed Debuff';
trEffect[21] = 'Range Debuff';
trEffect[22] = 'Load Debuff';
trEffect[23] = 'Accuracy Debuff';
trEffect[24] = 'Infantry Attack';
trEffect[25] = 'Infantry Defense';
trEffect[26] = 'Infantry Life';
trEffect[27] = 'Infantry Combat Speed';
trEffect[28] = 'Infantry Accuracy Bonus';
trEffect[29] = 'Infantry Attack Debuff';
trEffect[30] = 'Infantry Defense Debuff';
trEffect[31] = 'Infantry Life Debuff';
trEffect[32] = 'Infantry Combat Speed Debuff';
trEffect[33] = 'Infantry Accuracy Bonus Debuff';
trEffect[34] = 'Ranged Attack';
trEffect[35] = 'Ranged Defense';
trEffect[36] = 'Ranged Life';
trEffect[37] = 'Ranged Range';
trEffect[38] = 'Ranged Accuracy Bonus';
trEffect[39] = 'Ranged Attack Debuff';
trEffect[40] = 'Ranged Defense Debuff';
trEffect[41] = 'Ranged Life Debuff';
trEffect[42] = 'Ranged Range Debuff';
trEffect[43] = 'Ranged Accuracy Bonus Debuff';
trEffect[44] = 'Horsed Attack';
trEffect[45] = 'Horsed Defense';
trEffect[46] = 'Horsed Life';
trEffect[47] = 'Horsed Combat Speed';
trEffect[48] = 'Horsed Load';
trEffect[49] = 'Horsed Accuracy Bonus';
trEffect[50] = 'Horsed Attack Debuff';
trEffect[51] = 'Horsed Defense Debuff';
trEffect[52] = 'Horsed Life Debuff';
trEffect[53] = 'Horsed Combat Speed Debuff';
trEffect[54] = 'Horsed Load Debuff';
trEffect[55] = 'Horsed Accuracy Bonus Debuff';
trEffect[56] = 'Siege Attack';
trEffect[57] = 'Siege Combat Speed';
trEffect[58] = 'Siege Range';
trEffect[59] = 'Siege Load';
trEffect[60] = 'Siege Accuracy';
trEffect[61] = 'Siege Attack Debuff';
trEffect[62] = 'Siege Combat Speed Debuff';
trEffect[63] = 'Siege Range Debuff';
trEffect[64] = 'Siege Load Debuff';
trEffect[65] = 'Siege Accuracy Debuff';
trEffect[66] = 'March Size';
trEffect[67] = 'March Speed';
trEffect[68] = 'Attack March Speed';
trEffect[69] = 'Reinforcement March Speed';
trEffect[70] = 'Transport March Speed';
trEffect[71] = 'Reassign March Speed';
trEffect[72] = 'Scout March Speed';
trEffect[73] = 'Combat';
trEffect[74] = 'Intelligence';
trEffect[75] = 'Politics';
trEffect[76] = 'Resourcefulness';
trEffect[77] = 'Troop Training Speed';
trEffect[78] = 'Construction Speed';
trEffect[79] = 'Upkeep Reduction';
trEffect[80] = 'Research Speed';
trEffect[81] = 'Crafting Speed';
trEffect[82] = 'Resource Production';
trEffect[83] = 'Food Production';
trEffect[84] = 'Wood Production';
trEffect[85] = 'Stone Production';
trEffect[86] = 'Ore Production';
trEffect[87] = 'Broad Resource Cap';
trEffect[88] = 'Aetherstone Cap';
trEffect[89] = 'Storehouse Protection';
trEffect[90] = 'Morale Boost';
trEffect[91] = 'Chance to Find Items';
trEffect[92] = 'Chance to Find Items in Dark Forests';
trEffect[93] = 'Chance to Find Items in PvP';
trEffect[94] = 'Druid Bonus 1'
trEffect[95] = 'Fey Bonus 1'
trEffect[96] = 'Briton Bonus 1'
*/
for (var k in uW.cm.thronestats.effects)
trEffect[k] = uW.cm.thronestats.effects[k][1];
var chEffect = ["hpm", "hpr", "dam", "arm", "str", "dex", "con", "hit", "cri", "blk"];
var chEffectName = [uW.g_js_strings.champion_stats.hp, uW.g_js_strings.report_view.hp_remaining, uW.g_js_strings.champion_stats.damage, uW.g_js_strings.effects.name_203, uW.g_js_strings.effects.name_204, uW.g_js_strings.effects.name_205, uW.g_js_strings.effects.name_206, uW.g_js_strings.effects.name_207, uW.g_js_strings.effects.name_208, uW.g_js_strings.effects.name_209];
rpt.marchName = '?';
if (rpt.marchType == 0)
rpt.marchName = 'Desertion';
else if (rpt.marchType == 1)
rpt.marchName = 'Transport';
else if (rpt.marchType == 2)
rpt.marchName = 'Reinforce';
else if (rpt.marchType == 3) {
if (rpt.sideId == 0)
rpt.marchName = 'Anti-Scout';
else
rpt.marchName = 'Scout';
} else if (rpt.marchType == 4) {
if (rpt.sideId == 0)
rpt.marchName = 'Defend';
else
rpt.marchName = 'Attack';
} else if (rpt.marchType == 9)
rpt.marchName = 'Raid';
else if (rpt.marchType == 10)
rpt.marchName = 'Dark Forest';
if (parseInt(rpt.side0TileType) == 10)
rpt.side0TileTypeText = 'Grass';
else if (parseInt(rpt.side0TileType) == 11)
rpt.side0TileTypeText = 'Lake';
else if (parseInt(rpt.side0TileType) == 20)
rpt.side0TileTypeText = 'Woods';
else if (parseInt(rpt.side0TileType) == 30)
rpt.side0TileTypeText = 'Hills';
else if (parseInt(rpt.side0TileType) == 40)
rpt.side0TileTypeText = 'Mount';
else if (parseInt(rpt.side0TileType) == 50)
rpt.side0TileTypeText = 'Plain';
else if (parseInt(rpt.side0CityId) == 0)
rpt.side0TileTypeText = 'Barb';
else
rpt.side0TileTypeText = 'City';
function MonitorLink(n, cl) {
var m = [];
if (uW.btLoaded) {
if (cl)
m.push('<a class="' + cl + '" onclick="btMonitorExternalCall (\'');
else
m.push('<a onclick="btMonitorExternalCall (\'');
m.push(n);
m.push('\'); return false">');
m.push(n);
m.push('</a>');
} else {
m.push(n);
}
return m.join('');
}
function MonitorLinkUID(n, cl) {
var m = [];
if (uW.btLoaded) {
if (cl)
m.push('<a class="' + cl + '" onclick="btMonitorExternalCallUID (\'');
else
m.push('<a onclick="btMonitorExternalCallUID (\'');
m.push(n);
m.push('\'); return false">');
m.push(n);
m.push('</a>');
} else {
m.push(n);
}
return m.join('');
}
function buildHeader() {
var h = '<div id=reportHeader style="width:100%;">';
h += '<div id=reportHeaderLeft style="float:left;width:30%;text-align:left;">';
h += formatUnixTime(rpt.reportUnixTime, '24hour');
h += '<br>';
h += '<b>Glory Gained: ';
if (rslt['glory'])
h += addCommas(rslt['glory']);
else
h += '0';
h += '</b></div>';
h += '<div id=reportHeaderCenter style="float:left;width:40%;text-align:center;">';
if (rpt.side0TileTypeText != 'City' && rpt.side0TileTypeText != 'Barb' && rpt.marchName == 'Attack') {
if (rslt['conquered'] == 1)
h += '<FONT color="#CC0000"><B>Conquered</B></font>';
else if (rslt['conquered'] == 0)
h += '<FONT color="#080"><B>Secured</B></font>';
} else if ((rslt['winner'] == 1 && rpt.sideId == 0) || (rslt['winner'] == 0 && rpt.sideId == 1)) {
if (rpt.marchName == 'Scout')
h += '<FONT color="#CC0000"><B>Scouting Failed</B></font>';
else
h += '<FONT color="#CC0000"><B>You were defeated</B></font>';
} else if (rslt['winner'] == 0 && rpt.sideId == 0)
h += '<FONT color="#080"><B>You defended successfully!</B></font>';
else if (rslt['winner'] == 1 && rpt.sideId == 1) {
if (rpt.marchName == 'Scout')
h += '<FONT color="#080"><B>Scouting Report</B></font>';
else
h += '<FONT color="#080"><B>You were victorious!</B></font>';
}
h += '</div>';
h += '<div id=reportHeaderRight style="float:right;width:30%;text-align:right;">';
h += 'Report No: ' + reportId;
h += '<br><input id=ptpostreportid onclick="Chat.sendChat(\'/a Report No: ' + reportId + '\')" style="font-size:' + Options.overviewFontSize + 'px" type="submit" value="Post To Chat"></div>';
h += '</div><div style="clear:both;"></div>';
return h;
}
function buildBattle() {
var m = '';
//header
m += '<div class="ptdivHeader" style="background: #99CCFF;" align=left>Battle Results:</div>';
//summary
m += '<div id=battleSummaryContainer>';
//summary - attacker
m += '<div style="width:50%;float:left;">';
m += '<B>Attackers:</B> ' + MonitorLink(rpt.side1Name) + ' (<A onclick="ptGotoMap(' + rpt.side1XCoord + ',' + rpt.side1YCoord + ')">' + rpt.side1XCoord + ',' + rpt.side1YCoord + '</a>) ';
if (rslt['winner'] == 1)
m += '<FONT color="#CC0000"><B> Winner</B></FONT>';
m += '<br>';
if (rpt.side1PlayerId && (rpt.side1PlayerId != 0)) m += 'UID:' + MonitorLinkUID(rpt.side1PlayerId) + '<br>';
if (rpt.marchName == 'Attack' || rpt.marchName == 'Defend')
m += 'Knight Combat Skill: ' + rslt['s1KCombatLv'] + '<br>';
if (rslt['fght']["s1"]) {
var atkmight = 0;
for (var ui in uW.cm.UNIT_TYPES) {
i = uW.cm.UNIT_TYPES[ui];
if (rslt['fght']["s1"]['u' + i]) {
if (rslt['fght']["s1"]['u' + i][0] > rslt['fght']["s1"]['u' + i][1]) {
atkmight += parseInt(uW.unitmight['unt' + i] * (parseInt(rslt['fght']["s1"]['u' + i][0]) - parseInt(rslt['fght']["s1"]['u' + i][1])));
} else {
atkmight += 0;
}
}
}
}
if (rslt['s1spell'] && (rslt['s1spell'] != "0")) {
m += 'Spell Used: <b>' + eval('uW.g_js_strings.spells.name_' + rslt['s1spell']) + '</b><br>';
}
m += 'Might Lost: ' + addCommas(atkmight) + '</div>';
//summary - defender
m += '<div style="width:50%;float:left;">';
m += '<B>Defenders</B> ' + MonitorLink(rpt.side0Name) + ' (<A onclick="ptGotoMap(' + rpt.side0XCoord + ',' + rpt.side0YCoord + ')">' + rpt.side0XCoord + ',' + rpt.side0YCoord + '</a>) ';
if (rslt['winner'] == 0)
m += '<FONT color="#CC0000"><B> Winner</B></FONT>';
m += '<br>';
if (rpt.side0PlayerId && (rpt.side0PlayerId != 0)) m += 'UID:' + MonitorLinkUID(rpt.side0PlayerId) + '<br>';
if (rpt.marchName == 'Attack' || rpt.marchName == 'Defend')
m += 'Knight Combat Skill: ' + rslt['s0KCombatLv'] + '<br>';
if (rslt['s0spell'] && (rslt['s0spell'] != "0")) {
m += 'Spell Used: <b>' + eval('uW.g_js_strings.spells.name_' + rslt['s0spell']) + '</b><br>';
}
if (rslt['fght']["s0"]) {
var defmight = 0;
if (rslt.overwhelmed) {
for (var ui in uW.cm.UNIT_TYPES) {
i = uW.cm.UNIT_TYPES[ui];
if (rslt['fght']["s0"]['u' + i]) {
if (rslt['fght']["s0"]['u' + i][0] > rslt['fght']["s0"]['u' + i][1]) {
defmight += parseInt(uW.unitmight['unt' + i] * parseInt(rslt['fght']["s0"]['u' + i][0]));
} else {
defmight += 0;
}
}
}
for (var i = 53; i <= 55; i++) {
if (rslt['fght']["s0"]['f' + i]) {
if (rslt['fght']["s0"]['f' + i][0] > rslt['fght']["s0"]['f' + i][1]) {
if (i == 53) {
defmight += 4 * (parseInt(rslt['fght']["s0"]['f53'][0]))
};
if (i == 55) {
defmight += 7 * (parseInt(rslt['fght']["s0"]['f55'][0]))
};
} else {
defmight += 0;
}
}
}
for (var i = 60; i < 63; i++) {
if (rslt['fght']["s0"]['f' + i]) {
if (rslt['fght']["s0"]['f' + i][0] > rslt['fght']["s0"]['f' + i][1]) {
if (i == 60) {
defmight += 3 * (parseInt(rslt['fght']["s0"]['f60'][0]))
};
if (i == 61) {
defmight += (parseInt(rslt['fght']["s0"]['f61'][0]))
};
if (i == 62) {
defmight += 2 * (parseInt(rslt['fght']["s0"]['f62'][0]))
};
} else {
defmight += 0;
}
}
}
} else {
for (var ui in uW.cm.UNIT_TYPES) {
i = uW.cm.UNIT_TYPES[ui];
if (rslt['fght']["s0"]['u' + i]) {
if (rslt['fght']["s0"]['u' + i][0] > rslt['fght']["s0"]['u' + i][1]) {
defmight += parseInt(uW.unitmight['unt' + i] * (parseInt(rslt['fght']["s0"]['u' + i][0]) - parseInt(rslt['fght']["s0"]['u' + i][1])));
} else {
defmight += 0;
}
}
}
for (var i = 53; i <= 55; i++) {
if (rslt['fght']["s0"]['f' + i]) {
if (rslt['fght']["s0"]['f' + i][0] > rslt['fght']["s0"]['f' + i][1]) {
if (i == 53) {
defmight += 4 * (parseInt(rslt['fght']["s0"]['f53'][0]) - parseInt(rslt['fght']["s0"]['f53'][1]))
};
if (i == 55) {
defmight += 7 * (parseInt(rslt['fght']["s0"]['f55'][0]) - parseInt(rslt['fght']["s0"]['f55'][1]))
};
} else {
defmight += 0;
}
}
}
for (var i = 60; i < 63; i++) {
if (rslt['fght']["s0"]['f' + i]) {
if (rslt['fght']["s0"]['f' + i][0] > rslt['fght']["s0"]['f' + i][1]) {
if (i == 60) {
defmight += 3 * (parseInt(rslt['fght']["s0"]['f60'][0]) - parseInt(rslt['fght']["s0"]['f60'][1]))
};
if (i == 61) {
defmight += (parseInt(rslt['fght']["s0"]['f61'][0]) - parseInt(rslt['fght']["s0"]['f61'][1]))
};
if (i == 62) {
defmight += 2 * (parseInt(rslt['fght']["s0"]['f62'][0]) - parseInt(rslt['fght']["s0"]['f62'][1]))
};
} else {
defmight += 0;
}
}
}
}
m += 'Might Lost: ' + addCommas(defmight) + '<br>';
}
m += 'Rounds: ' + rslt['rnds'] + '<br>';
if (rslt['darkForestConflict']) {
m += 'The forests twisted and changed.';
} else {
if (rpt.side0TileTypeText != 'City' && rpt.sideId == 0) {
if (rslt['conquered'] == 1)
m += 'Attackers conquered the wilderness.';
else if (rslt['conquered'] == 0)
m += 'Attackers did not conquer the wilderness.';
} else {
if (rslt['wall']) {
if (rslt['wall'] == 100)
m += 'Attackers breached the walls.';
else
m += 'Attackers did not breach the walls. The walls are ' + rslt['wall'] + '% damaged';
}
}
}
m += '</div>';
m += '</div>'; //end battlesummary div
//troops
m += '<div id=battleTroopsContainer style="clear:both">';
//troops - attacker
m += '<div style="width:50%;float:left;"><TABLE class=ptTab width=100%>';
if (rslt['fght']["s1"]) {
m += '<TR><TH></TH><TH align=left>Troops</TH><TH align=center>Fought</TH><TH align=center>Survived</TH><TH align=center>Killed</TH></TR>';
for (var ui in uW.cm.UNIT_TYPES) {
i = uW.cm.UNIT_TYPES[ui];
if (rslt['fght']["s1"]['u' + i]) {
if (rslt['fght']["s1"]['u' + i][0] > rslt['fght']["s1"]['u' + i][1]) {
m += '<TR><TD>' + unitImg[i] + '</td>';
m += '<TD align=center>' + addCommas(rslt['fght']["s1"]['u' + i][0]) + '</td>';
m += '<TD align=center><font color="#CC0000">' + addCommas(rslt['fght']["s1"]['u' + i][1]) + '</font></td>';
m += '<TD align=center><font color="#CC0000">(' + addCommas((rslt['fght']["s1"]['u' + i][0]) - (rslt['fght']["s1"]['u' + i][1])) + ')</font></td></tr>';
} else {
m += '<TR><TD>' + unitImg[i] + '</td>';
m += '<TD align=center>' + addCommas(rslt['fght']["s1"]['u' + i][0]) + '</td>';
m += '<TD align=center>' + addCommas(rslt['fght']["s1"]['u' + i][1]) + '</td></tr>';
}
}
}
}
m += '</table></div>';
//troops - defender
m += '<div style="width:50%;float:left;">';
m += '<TABLE class=ptTab width=100%>';
if (rslt['fght']["s0"]) {
if (rslt.overwhelmed) {
m += '<TR><TH></TH><TH align=left>Troops</TH><TH align=center>Fought</TH><TH align=center>Survived</TH><TH align=center>Killed</TH></TR>';
for (var ui in uW.cm.UNIT_TYPES) {
i = uW.cm.UNIT_TYPES[ui];
if (rslt['fght']["s0"]['u' + i] && (rslt['fght']["s0"]['u' + i][0] != null)) {
m += '<TR><TD>' + unitImg[i] + '</td>';
m += '<TD align=center>???</td>';
m += '<TD align=center>???</td>';
if (rslt['fght']["s0"]['u' + i][0] > 0) {
m += '<TD align=center><FONT color="#CC0000">(' + addCommas(rslt['fght']["s0"]['u' + i][0]) + ')</FONT></td></tr>';
} else {
m += '<TD align=center>0</td></tr>';
}
}
}
for (var i = 53; i <= 55; i++) {
if (rslt['fght']["s0"]['f' + i]) {
m += '<TR><TD>' + unitImg[i] + '</td>';
m += '<TD align=center>???</td>';
m += '<TD align=center>???</td>';
if (rslt['fght']["s0"]['f' + i][0] > 0) {
m += '<TD align=center><FONT color="#CC0000">(' + addCommas(rslt['fght']["s0"]['f' + i][0]) + ')</FONT></td></tr>';
} else {
m += '<TD align=center>0</td></tr>';
}
}
}
for (var i = 60; i <= 63; i++) {
if (rslt['fght']["s0"]['f' + i]) {
m += '<TR><TD>' + unitImg[i] + '</td>';
m += '<TD align=center>???</td>';
m += '<TD align=center>???</td>';
if (rslt['fght']["s0"]['f' + i][0] > 0) {
m += '<TD align=center><FONT color="#CC0000">(' + addCommas(rslt['fght']["s0"]['f' + i][0]) + ')</font></td></tr>';
} else {
m += '<TD align=center>0</td></tr>';
}
}
}
for (var i = 101; i <= 110; i++) {
if (rslt['fght']["s0"]['m' + i]) {
m += '<TR><TD>' + unitImg[i] + '</td>';
m += '<TD align=center>???</td>';
m += '<TD align=center>???</td>';
if (rslt['fght']["s0"]['m' + i][0] > 0) {
m += '<TD align=center><FONT color="#CC0000">(' + addCommas(rslt['fght']["s0"]['m' + i][0]) + ')</font></td></tr>';
} else {
m += '<TD align=center>0</td></tr>';
}
}
}
} else {
m += '<TR><TH></TH><TH align=left>Troops</TH><TH align=center>Fought</TH><TH align=center>Survived</TH><TH align=center>Killed</TH></TR>';
for (var ui in uW.cm.UNIT_TYPES) {
i = uW.cm.UNIT_TYPES[ui];
if (rslt['fght']["s0"]['u' + i] && (rslt['fght']["s0"]['u' + i][0] != null)) {
if (rslt['fght']["s0"]['u' + i][0] > rslt['fght']["s0"]['u' + i][1]) {
m += '<TR><TD>' + unitImg[i] + '</td>';
m += '<TD align=center>' + addCommas(rslt['fght']["s0"]['u' + i][0]) + '</td>';
m += '<TD align=center><FONT color="#CC0000">' + addCommas(rslt['fght']["s0"]['u' + i][1]) + '</FONT></td>';
m += '<TD align=center><FONT color="#CC0000">(' + addCommas((rslt['fght']["s0"]['u' + i][0]) - (rslt['fght']["s0"]['u' + i][1])) + ')</FONT></td></tr>';
} else {
m += '<TR><TD>' + unitImg[i] + '</td>';
m += '<TD align=center>' + addCommas(rslt['fght']["s0"]['u' + i][0]) + '</td>';
m += '<TD align=center>' + addCommas(rslt['fght']["s0"]['u' + i][1]) + '</td></tr>';
}
}
}
for (var i = 53; i <= 55; i++) {
if (rslt['fght']["s0"]['f' + i]) {
if (rslt['fght']["s0"]['f' + i][0] > rslt['fght']["s0"]['f' + i][1]) {
m += '<TR><TD>' + unitImg[i] + '</td>';
m += '<TD align=center>' + addCommas(rslt['fght']["s0"]['f' + i][0]) + '</td>';
m += '<TD align=center><FONT color="#CC0000">' + addCommas(rslt['fght']["s0"]['f' + i][1]) + '</font></td>';
m += '<TD align=center><FONT color="#CC0000">(' + addCommas((rslt['fght']["s0"]['f' + i][0]) - (rslt['fght']["s0"]['f' + i][1])) + ')</FONT></td></tr>';
} else {
m += '<TR><TD>' + unitImg[i] + '</td>';
m += '<TD align=center>' + addCommas(rslt['fght']["s0"]['f' + i][0]) + '</td>';
m += '<TD align=center>' + addCommas(rslt['fght']["s0"]['f' + i][1]) + '</td></tr>';
}
}
}
for (var i = 60; i <= 63; i++) {
if (rslt['fght']["s0"]['f' + i]) {
if (rslt['fght']["s0"]['f' + i][0] > rslt['fght']["s0"]['f' + i][1]) {
m += '<TR><TD>' + unitImg[i] + '</td>';
m += '<TD align=center>' + addCommas(rslt['fght']["s0"]['f' + i][0]) + '</td>';
m += '<TD align=center><FONT color="#CC0000">' + addCommas(rslt['fght']["s0"]['f' + i][1]) + '</font></td>';
m += '<TD align=center><FONT color="#CC0000">(' + addCommas((rslt['fght']["s0"]['f' + i][0]) - (rslt['fght']["s0"]['f' + i][1])) + ')</FONT></td></tr>';
} else {
m += '<TR><TD>' + unitImg[i] + '</td>';
m += '<TD align=center>' + addCommas(rslt['fght']["s0"]['f' + i][0]) + '</td>';
m += '<TD align=center>' + addCommas(rslt['fght']["s0"]['f' + i][1]) + '</td></tr>';
}
}
}
for (var i = 101; i <= 110; i++) {
if (rslt['fght']["s0"]['m' + i]) {
if (rslt['fght']["s0"]['m' + i][0] > rslt['fght']["s0"]['m' + i][1]) {
m += '<TR><TD>' + unitImg[i] + '</td>';
m += '<TD align=center>' + addCommas(rslt['fght']["s0"]['m' + i][0]) + '</td>';
m += '<TD align=center><FONT color="#CC0000">' + addCommas(rslt['fght']["s0"]['m' + i][1]) + '</font></td>';
m += '<TD align=center><FONT color="#CC0000">(' + addCommas((rslt['fght']["s0"]['m' + i][0]) - (rslt['fght']["s0"]['m' + i][1])) + ')</FONT></td></tr>';
} else {
m += '<TR><TD>' + unitImg[i] + '</td>';
m += '<TD align=center>' + addCommas(rslt['fght']["s0"]['m' + i][0]) + '</td>';
m += '<TD align=center>' + addCommas(rslt['fght']["s0"]['m' + i][1]) + '</td></tr>';
}
}
}
}
} else
m += '<TR><TD>No Troops Defended</TD></TR>';
m += '</table>';
m += '</div>';
m += '</div>'; //end troops div
m += '<div style="clear:both"></div>';
return m;
}
function buildTroopStats() {
var m = '';
if (rslt['bonus']) {
//header
m += '<div class="ptdivHeader" style="background: #99CCFF;" align=left><a id=reportTroopStatsHdr class=ptdivLink >Troop Stats: <img id=reportTroopStatsArrow height="10" src="' + GameIcons.RightArrow + '"></a></div>';
//stats
m += '<div id=reportTroopStats class="ptdivHide">';
//troops - attacker - stats
m += '<div style="width:50%;float:left;">';
if (rslt['fght']["s1"]) {
for (var ui in uW.cm.UNIT_TYPES) {
i = uW.cm.UNIT_TYPES[ui];
if (rslt['fght']["s1"]['u' + i]) {
m += '<div style="float:left;width:10%;clear:both;">' + unitImg2[i] + '</div>';
m += '<div style="float:left;width:90%;"><table class=ptTab width=100%><tr><td style="width:33%;" align=left><font size="1"><b>HP: </b>' + addCommas(rslt['bonus']['mod']['s1']['u' + i]['hp'][1]) + '</font></td>';
if (rslt['bonus']['mod']['s1']['u' + i]['atk']) m += '<TD style="width:33%;" align=left><font size="1"><b>Atk: </b>' + addCommas(rslt['bonus']['mod']['s1']['u' + i]['atk'][1]) + '</font></td>';
if (rslt['bonus']['mod']['s1']['u' + i]['def']) m += '<TD style="width:33%;" align=left><font size="1"><b>Def: </b>' + addCommas(rslt['bonus']['mod']['s1']['u' + i]['def'][1]) + '</font></td></tr><tr>';
if (rslt['bonus']['mod']['s1']['u' + i]['spd']) m += '<TD style="width:33%;" align=left><font size="1"><b>Spd: </b>' + addCommas(rslt['bonus']['mod']['s1']['u' + i]['spd'][1]) + '</font></td>';
if (rslt['bonus']['mod']['s1']['u' + i]['rng']) m += '<TD style="width:33%;" align=left><font size="1"><b>Rng: </b>' + addCommas(rslt['bonus']['mod']['s1']['u' + i]['rng'][1]) + '</font></td>';
if (rslt['bonus']['mod']['s1']['u' + i]['ld']) m += '<TD style="width:33%;" align=left><font size="1"><b>Ld: </b>' + addCommas(rslt['bonus']['mod']['s1']['u' + i]['ld'][1]) + '</font></td>';
m += '</tr></table></div>';
}
}
}
m += '</div>';
//troops - defender - stats
m += '<div style="width:50%;float:left;">';
if (rslt['fght']["s0"]) {
for (var ui in uW.cm.UNIT_TYPES) {
i = uW.cm.UNIT_TYPES[ui];
if (rslt['fght']["s0"]['u' + i]) {
if (rslt['fght']["s0"]['u' + i] && rslt['bonus']['mod']["s0"]['u' + i]) {
m += '<div style="float:left;width:10%;clear:both;">' + unitImg2[i] + '</div>';
m += '<div style="float:left;width:90%;"><table class=ptTab width=100%><tr><td style="width:33%;" align=left><font size="1"><b>HP: </b>' + addCommas(rslt['bonus']['mod']['s0']['u' + i]['hp'][1]) + '</font></td>';
if (rslt['bonus']['mod']['s0']['u' + i]['atk']) m += '<TD style="width:33%;" align=left><font size="1"><b>Atk: </b>' + addCommas(rslt['bonus']['mod']['s0']['u' + i]['atk'][1]) + '</font></td>';
if (rslt['bonus']['mod']['s0']['u' + i]['def']) m += '<TD style="width:33%;" align=left><font size="1"><b>Def: </b>' + addCommas(rslt['bonus']['mod']['s0']['u' + i]['def'][1]) + '</font></td></tr><tr>';
if (rslt['bonus']['mod']['s0']['u' + i]['spd']) m += '<TD style="width:33%;" align=left><font size="1"><b>Spd: </b>' + addCommas(rslt['bonus']['mod']['s0']['u' + i]['spd'][1]) + '</font></td>';
if (rslt['bonus']['mod']['s0']['u' + i]['rng']) m += '<TD style="width:33%;" align=left><font size="1"><b>Rng: </b>' + addCommas(rslt['bonus']['mod']['s0']['u' + i]['rng'][1]) + '</font></td>';
m += '</tr></table></div>';
}
}
}
for (var i = 53; i <= 55; i++) {
if (rslt['fght']["s0"]['f' + i]) {
m += '<div style="float:left;width:10%;clear:both;">' + unitImg2[i] + '</div>';
m += '<div style="float:left;width:90%;"><table class=ptTab width=100%><tr><td style="width:33%;" align=left><font size="1"><b>HP: </b>' + addCommas(rslt['bonus']['mod']['s0']['f' + i]['hp'][1]) + '</font></td>';
m += '<TD style="width:33%;" align=left><font size="1"><b>Atk: </b>' + addCommas(rslt['bonus']['mod']['s0']['f' + i]['atk'][1]) + '</font></td>';
m += '<TD style="width:33%;" align=left><font size="1"><b>Def: </b>' + addCommas(rslt['bonus']['mod']['s0']['f' + i]['def'][1]) + '</font></td></tr><tr>';
m += '<TD style="width:33%;" align=left><font size="1"><b>Spd: </b>' + addCommas(rslt['bonus']['mod']['s0']['f' + i]['spd'][1]) + '</font></td>';
m += '<TD style="width:33%;" align=left><font size="1"><b>Rng: </b>' + addCommas(rslt['bonus']['mod']['s0']['f' + i]['rng'][1]) + '</font></td></tr></table></div>';
}
}
for (var i = 60; i <= 63; i++) {
if (rslt['fght']["s0"]['f' + i]) {
m += '<div style="float:left;width:10%;clear:both;">' + unitImg2[i] + '</div>';
m += '<div style="float:left;width:90%;"><table class=ptTab width=100%><tr><td style="width:33%;" align=left><font size="1"><b>HP: </b>' + addCommas(rslt['bonus']['mod']['s0']['f' + i]['hp'][1]) + '</font></td>';
m += '<td style="width:33%;" align=left><font size="1"><b>Atk: </b>' + addCommas(rslt['bonus']['mod']['s0']['f' + i]['atk'][1]) + '</font></td>';
m += '<TD style="width:33%;" align=left><font size="1"><b>Def: </b>' + addCommas(rslt['bonus']['mod']['s0']['f' + i]['def'][1]) + '</font></td></tr><tr>';
m += '<TD style="width:33%;" align=left><font size="1"><b>Spd: </b>' + addCommas(rslt['bonus']['mod']['s0']['f' + i]['spd'][1]) + '</font></td>';
m += '<TD style="width:33%;" align=left><font size="1"><b>Rng: </b>' + addCommas(rslt['bonus']['mod']['s0']['f' + i]['rng'][1]) + '</font></td></tr></table></div>';
}
}
for (var i = 101; i <= 110; i++) {
if (rslt['fght']["s0"]['m' + i]) {
m += '<div style="float:left;width:10%;clear:both;">' + unitImg2[i] + '</div>';
m += '<div style="float:left;width:90%;"><table class=ptTab width=100%><tr><td style="width:33%;" align=left><font size="1"><b>HP: </b>' + addCommas(rslt['bonus']['mod']['s0']['m' + i]['hp'][1]) + '</font></td>';
if (rslt['bonus']['mod']['s0']['m' + i]['atk']) m += '<td style="width:33%;" align=left><font size="1"><b>Atk: </b>' + addCommas(rslt['bonus']['mod']['s0']['m' + i]['atk'][1]) + '</font></td>';
if (rslt['bonus']['mod']['s0']['m' + i]['def']) m += '<TD style="width:33%;" align=left><font size="1"><b>Def: </b>' + addCommas(rslt['bonus']['mod']['s0']['m' + i]['def'][1]) + '</font></td></tr><tr>';
if (rslt['bonus']['mod']['s0']['m' + i]['spd']) m += '<TD style="width:33%;" align=left><font size="1"><b>Spd: </b>' + addCommas(rslt['bonus']['mod']['s0']['m' + i]['spd'][1]) + '</font></td>';
if (rslt['bonus']['mod']['s0']['m' + i]['rng']) m += '<TD style="width:33%;" align=left><font size="1"><b>Rng: </b>' + addCommas(rslt['bonus']['mod']['s0']['m' + i]['rng'][1]) + '</font></td>';
m += '</tr></table></div>';
}
}
}
m += '</div>';
m += '<div style="clear:both"> </div>';
m += '</div>'; //end reportTroopStats div
}
return m;
}
function buildChampDuel() {
var m = '';
if (rslt['champion_stats']) {
s1name = rslt.champion_stats['s1'].nam;
s1win = rslt.champion_stats['s1'].won;
s0name = rslt.champion_stats['s0'].nam;
s0win = rslt.champion_stats['s0'].won;
if ((s1name != '') || (s0name != '')) {
//header
m += '<div class="ptdivHeader" style="background: #99CCFF;" align=left><a id=reportChampDuelHdr class=ptdivLink >Champion Duel: <img id=reportChampDuelArrow height="10" src="' + GameIcons.DownArrow + '"></a></div>';
//summary
m += '<div id=reportChampDuel>';
m += '<div id=ChampStatContainer>';
m += '<div style="width:50%;float:left;">';
if (s1name == '') {
s1name = 'No Champion';
}
if (s1win) {
s1name += ' (Winner)';
}
m += '<b>' + s1name + '</b><br>';
for (var i = 1; i < chEffect.length; i++) {
if (rslt.champion_stats['s1'][chEffect[i]]) {
m += chEffectName[i] + ': ' + rslt.champion_stats['s1'][chEffect[i]] + '<br>';
}
}
m += '</div>'; //attacker
m += '<div style="width:50%;float:left;">';
if (s0name == '') {
s0name = 'No Champion';
}
if (s0win) {
s0name += ' (Winner)';
}
m += '<b>' + s0name + '</b><br>';
for (var i = 1; i < chEffect.length; i++) {
if (rslt.champion_stats['s0'][chEffect[i]]) {
m += chEffectName[i] + ': ' + rslt.champion_stats['s0'][chEffect[i]] + '<br>';
}
}
m += '</div>'; //defender
m += '</div>'; //ChampStatContainer
m += '<div style="clear:both"> </div>';
if (rslt.bonus) {
if (rslt.bonus['cmp']) {
m += '<div id=ChampAdjContainer style="clear:both">';
m += '<div style="width:50%;float:left;">';
// rather than fix the index for life, kabam remapped efects
// 0:g_js_strings.effects.name_3,
// 1:g_js_strings.effects.name_1,
// 2:g_js_strings.effects.name_2,
// 3:g_js_strings.commonstr.speed,
// 4:g_js_strings.effects.name_5,
// 5:g_js_strings.effects.name_6,
// 6:g_js_strings.effects.name_7
m += '<b>Champion Adjustments</b><br><TABLE class=ptTab width=100%>';
for (var i = 0; i < 24; i++) {
if (rslt.bonus['cmp']['s1'][i]) {
if (i == 0) m += '<TR><TD colspan=4>Life: ' + rslt.bonus['cmp']['s1'][i] + '</TD></TR>';
else if (i < 3) m += '<TR><TD colspan=4>' + trEffect[i] + ': ' + rslt.bonus['cmp']['s1'][i] + '</TD></TR>';
else m += '<TR><TD colspan=4>' + trEffect[i + 1] + ': ' + rslt.bonus['cmp']['s1'][i] + '</TD></TR>';
}
}
m += '</table></br>'
m += '</div>'; //attacker
m += '<div style="width:50%;float:left;">';
m += '<b>Champion Adjustments</b><br><TABLE class=ptTab width=100%>';
for (var i = 0; i < 24; i++) {
if (rslt.bonus['cmp']['s0'][i]) {
if (i == 0) m += '<TR><TD colspan=4>Life: ' + rslt.bonus['cmp']['s0'][i] + '</TD></TR>';
else if (i < 3) m += '<TR><TD colspan=4>' + trEffect[i] + ': ' + rslt.bonus['cmp']['s0'][i] + '</TD></TR>';
else m += '<TR><TD colspan=4>' + trEffect[i + 1] + ': ' + rslt.bonus['cmp']['s0'][i] + '</TD></TR>';
}
}
m += '</table></br>'
m += '</div>'; //defender
m += '</div>'; //ChampAdjContainer
m += '<div style="clear:both"> </div>';
}
}
m += '</div>'; //reportChampDuel
}
}
return m;
}
function buildThroneStats() {
var m = '';
var LineStyle = '';
var EndStyle = '';
var GlobalEffects = [1, 2, 3, 4, 5, 6, 7, 17, 18, 19, 20, 21, 22, 23, 102, 103, 8, 9, 73];
var AttackEffects = [1, 17, 24, 29, 34, 39, 44, 50, 56, 61, 102];
var DefenceEffects = [2, 18, 25, 30, 35, 40, 45, 51, 104];
var LifeEffects = [3, 19, 26, 31, 36, 41, 46, 52];
var RangeEffects = [5, 21, 37, 42, 58, 63];
var SpeedEffects = [4, 20, 27, 32, 47, 53, 57, 62];
var AccuracyEffects = [7, 23, 28, 33, 38, 43, 49, 55, 60, 65];
var OtherCombatEffects = [8, 9, 13, 14, 15, 16, 73];
var OtherPVPEffects = [6, 22, 48, 54, 59, 64];
var DebuffEffects = [17, 18, 19, 20, 22, 21, 23, 29, 39, 50, 54, 61, 30, 40, 51, 31, 41, 52, 42, 63, 64, 32, 53, 62];
//header
m += '<div class="ptdivHeader" style="background: #99CCFF;" align=left><a id=reportThroneHdr class=ptdivLink >Throne Stats: <img id=reportThroneArrow height="10" src="' + GameIcons.DownArrow + '"></a></div>';
//summary
m += '<div id=reportThrone>';
m += '<div style="width:50%;float:left;">';
if (rslt['s1ThroneRoomBoosts']) {
for (var i = 1; i < trEffect.length + 1; i++) {
if (rslt['s1ThroneRoomBoosts'][i]) {
LineStyle = '<span style="color:#888;">';
if (AttackEffects.indexOf(parseInt(i)) > -1)
LineStyle = '<span style="color:#800;">';
if (DefenceEffects.indexOf(parseInt(i)) > -1)
LineStyle = '<span style="color:#008;">';
if (LifeEffects.indexOf(parseInt(i)) > -1)
LineStyle = '<span style="color:#088;">';
if (RangeEffects.indexOf(parseInt(i)) > -1)
LineStyle = '<span style="color:#080;">';
if (SpeedEffects.indexOf(parseInt(i)) > -1)
LineStyle = '<span style="color:#000;">';
if (AccuracyEffects.indexOf(parseInt(i)) > -1)
LineStyle = '<span style="color:#f80;">';
if (OtherCombatEffects.indexOf(parseInt(i)) > -1)
LineStyle = '<span style="color:#808;">';
if (GlobalEffects.indexOf(parseInt(i)) > -1) {
LineStyle = LineStyle + '<strong>';
EndStyle = '</strong>' + EndStyle;
}
if (DebuffEffects.indexOf(parseInt(i)) > -1) {
LineStyle = LineStyle + '<i>';
EndStyle = '</i>' + EndStyle;
}
m += LineStyle + trEffect[i] + ': ' + rslt['s1ThroneRoomBoosts'][i] + '%' + EndStyle + '</span><br>';
}
}
}
m += '</div>'; //attacker
m += '<div style="width:50%;float:left;">';
if (rslt['s0ThroneRoomBoosts']) {
for (var i = 1; i < trEffect.length + 1; i++) {
if (rslt['s0ThroneRoomBoosts'][i]) {
LineStyle = '<span style="color:#888;">';
if (AttackEffects.indexOf(parseInt(i)) > -1)
LineStyle = '<span style="color:#800;">';
if (DefenceEffects.indexOf(parseInt(i)) > -1)
LineStyle = '<span style="color:#008;">';
if (LifeEffects.indexOf(parseInt(i)) > -1)
LineStyle = '<span style="color:#088;">';
if (RangeEffects.indexOf(parseInt(i)) > -1)
LineStyle = '<span style="color:#080;">';
if (SpeedEffects.indexOf(parseInt(i)) > -1)
LineStyle = '<span style="color:#000;">';
if (AccuracyEffects.indexOf(parseInt(i)) > -1)
LineStyle = '<span style="color:#f80;">';
if (OtherCombatEffects.indexOf(parseInt(i)) > -1)
LineStyle = '<span style="color:#808;">';
if (GlobalEffects.indexOf(parseInt(i)) > -1) {
LineStyle = LineStyle + '<strong>';
EndStyle = '</strong>' + EndStyle;
}
if (DebuffEffects.indexOf(parseInt(i)) > -1) {
LineStyle = LineStyle + '<i>';
EndStyle = '</i>' + EndStyle;
}
m += LineStyle + trEffect[i] + ': ' + rslt['s0ThroneRoomBoosts'][i] + '%' + EndStyle + '</span><br>';
}
}
}
m += '</div>'; //defender
m += '<div style="clear:both"> </div>';
m += '</div>'; //throne container
return m;
}
function buildBoosts() {
var m = '';
//header
m += '<div class="ptdivHeader" style="background: #99CCFF;" align=left><a id=reportBoostsHdr class=ptdivLink >Troop Adjustments: <img id=reportBoostsArrow height="10" src="' + GameIcons.DownArrow + '"></a></div>';
//summary
m += '<div id=reportBoosts>';
if (rslt['s1atkBoost'] || rslt['s1defBoost'] || rslt['s0atkBoost'] || rslt['s0defBoost']) {
m += '<div style="width:50%;float:left;">';
m += '<b>Item Boosts</b><br>';
if (rslt['s1atkBoost'])
m += 'Attack Boosted: ' + 100 * rslt['s1atkBoost'] + '%<br>';
if (rslt['s1defBoost'])
m += 'Defense Boosted: ' + 100 * rslt['s1defBoost'] + '%<br>';
m += '</div>'; //attacker
m += '<div style="width:50%;float:left;">';
m += '<b>Item Boosts</b><br>';
if (rslt['s0atkBoost'])
m += 'Attack Boosted: ' + 100 * rslt['s0atkBoost'] + '%<br>';
if (rslt['s0defBoost'])
m += 'Defense Boosted: ' + 100 * rslt['s0defBoost'] + '%<br>';
m += '</div>'; //defender
m += '<div style="clear:both"> </div>';
}
if (rslt['s1guardianAtkBoost'] || rslt['s1guardianDefBoost'] || rslt['s1guardianMarchBoost'] || rslt['s1guardianTrainBoost'] || rslt['s0guardianAtkBoost'] || rslt['s0guardianDefBoost'] || rslt['s0guardianMarchBoost'] || rslt['s0guardianTrainBoost']) {
m += '<div style="width:50%;float:left;">';
m += '<b>Guardian Boosts</b><br>';
if (rslt['s1guardianAtkBoost'])
m += 'Guardian Attack Boost: ' + parseFloat(100 * rslt['s1guardianAtkBoost']).toFixed(1) + '%<br>';
if (rslt['s1guardianDefBoost'])
m += 'Guardian Life Boost: ' + parseFloat(100 * rslt['s1guardianDefBoost']).toFixed(1) + '%<br>';
if (rslt['s1guardianMarchBoost'])
m += 'Guardian March Speed Boost: ' + parseFloat(100 * rslt['s1guardianMarchBoost']).toFixed(1) + '%<br>';
if (rslt['s1guardianTrainBoost'])
m += 'Guardian Training Boost: ' + parseFloat(100 * rslt['s1guardianTrainBoost']).toFixed(1) + '%<br>';
m += '</div>'; //attacker
m += '<div style="width:50%;float:left;">';
m += '<b>Guardian Boosts</b><br>';
if (rslt['s0guardianAtkBoost'])
m += 'Guardian Attack Boost: ' + parseFloat(100 * rslt['s0guardianAtkBoost']).toFixed(1) + '%<br>';
if (rslt['s0guardianDefBoost'])
m += 'Guardian Life Boost: ' + parseFloat(100 * rslt['s0guardianDefBoost']).toFixed(1) + '%<br>';
if (rslt['s0guardianMarchBoost'])
m += 'Guardian March Speed Boost: ' + parseFloat(100 * rslt['s0guardianMarchBoost']).toFixed(1) + '%<br>';
if (rslt['s0guardianTrainBoost'])
m += 'Guardian Training Boost: ' + parseFloat(100 * rslt['s0guardianTrainBoost']).toFixed(1) + '%<br>';
m += '</div>'; //defender
m += '<div style="clear:both"> </div>';
}
if (rslt.bonus) {
if (rslt.bonus['tch'] || rslt.bonus['tch2']) {
m += '<div style="width:50%;float:left;">';
m += '<b>Research</b><br>';
if (rslt.bonus['tch']) {
for (var t1l in rslt.bonus.tch.s1) {
var normaltech = '';
if (t1l == 'hp') normaltech = 'Health';
if (t1l == 'atk') normaltech = 'Attack';
if (t1l == 'def') normaltech = 'Defense';
if (t1l == 'spd') normaltech = 'Speed';
if (t1l == 'rng') normaltech = 'Range';
if (t1l == 'ld') normaltech = 'Load';
if (normaltech != '')
m += normaltech + ': ' + parseFloat(rslt.bonus.tch.s1[t1l] * 100).toFixed(0) + '%<br>';
}
}
if (rslt.bonus['tch2']) {
for (var t2l in rslt.bonus.tch2.s1) {
var britontech = '';
if (t2l == 'ic') britontech = 'Improved Cartography';
if (t2l == 'id') britontech = 'Improved Defenses';
if (t2l == 'sr') britontech = 'Strengthen Ranks';
if (t2l == 'if') britontech = 'Improved Fletching';
if (britontech != '')
m += britontech + ': ' + parseFloat(rslt.bonus.tch2.s1[t2l] * 100).toFixed(0) + '%<br>';
}
}
m += '</div>'; //attacker
m += '<div style="width:50%;float:left;">';
m += '<b>Research</b><br>';
if (rslt.bonus['tch']) {
for (var t1l in rslt.bonus.tch.s0) {
var normaltech = '';
if (t1l == 'hp') normaltech = 'Health';
if (t1l == 'atk') normaltech = 'Attack';
if (t1l == 'def') normaltech = 'Defense';
if (t1l == 'spd') normaltech = 'Speed';
if (t1l == 'rng') normaltech = 'Range';
if (normaltech != '')
m += normaltech + ': ' + parseFloat(rslt.bonus.tch.s0[t1l] * 100).toFixed(0) + '%<br>';
}
}
if (rslt.bonus['tch2']) {
for (var t2l in rslt.bonus.tch2.s0) {
var britontech = '';
if (t2l == 'ic') britontech = 'Improved Cartography';
if (t2l == 'id') britontech = 'Improved Defenses';
if (t2l == 'sr') britontech = 'Strengthen Ranks';
if (t2l == 'if') britontech = 'Improved Fletching';
if (britontech != '')
m += britontech + ': ' + parseFloat(rslt.bonus.tch2.s0[t2l] * 100).toFixed(0) + '%<br>';
}
}
}
m += '</div>'; //defender
m += '<div style="clear:both"> </div>';
}
m += '</div>'; //boosts
m += '<div style="clear:both"></div>';
return m;
}
function handleLoot() {
var m = '';
if (rslt['loot']) {
m += '<div class="ptdivHeader" style="background: #99CCFF;" align=left>Loot:</div><TABLE style="width:100%;" class=ptTab>';
m += '<TR><TD style="width:18%">' + GameIcons.goldImgTiny;
if (rslt['loot'][0] > 0)
m += addCommas(parseFloat(rslt['loot'][0]).toFixed(0)) + '</TD>';
else
m += '0</td>'
m += '<TD style="width:18%">' + GameIcons.foodImgTiny;
if (rslt['loot'][1] > 0)
m += addCommas(parseFloat(rslt['loot'][1]).toFixed(0)) + '</TD>';
else
m += '0</TD>';
m += '<TD style="width:18%">' + GameIcons.woodImgTiny;
if (rslt['loot'][2] > 0)
m += addCommas(parseFloat(rslt['loot'][2]).toFixed(0)) + '</TD>';
else
m += '0</td>'
m += '<TD style="width:18%">' + GameIcons.stoneImgTiny;
if (rslt['loot'][3] > 0)
m += addCommas(parseFloat(rslt['loot'][3]).toFixed(0)) + '</TD>';
else
m += '0</TD>';
m += '<TD style="width:18%">' + GameIcons.oreImgTiny;
if (rslt['loot'][4] > 0)
m += addCommas(parseFloat(rslt['loot'][4]).toFixed(0)) + '</TD>';
else
m += '0</td>'
m += '<TD style="width:15%">' + GameIcons.astoneImgTiny;
if (rslt['loot'][6] > 0)
m += addCommas(parseFloat(rslt['loot'][6]).toFixed(0)) + '</TD>';
else
m += '0 </TD>';
m += '</tr>'
if (rslt['loot'][5]) {
for (var crest = 1101; crest < 1116; crest++) {
if (rslt['loot'][5][crest] == 1)
m += '<tr><td colspan=5><img width=20 src=https://kabam1-a.akamaihd.net/silooneofcamelot/fb/e2/src/img/items/70/' + crest + '.png>' + crestname[crest] + '</TD></TR>';
}
}
//if (rslt['throneRoomDrop'] { } // to do ... throne room items
m += '</TABLE><br>';
}
return m;
}
function handleTransportLoot() {
var m = '';
m += '<div class="ptdivHeader" style="background: #99CCFF;" align=left>Loot:</div><TABLE style="width:100%;" class=ptTab>';
m += '<TR><TD style="width:18%">' + GameIcons.goldImgTiny;
if (rslt['gold'] > 0)
m += addCommas(rslt['gold']) + '</TD>';
else
m += '0</td>'
m += '<TD style="width:18%">' + GameIcons.foodImgTiny;
if (rslt['resource1'] > 0)
m += addCommas(rslt['resource1']) + '</TD>';
else
m += '0</TD>';
m += '<TD style="width:18%">' + GameIcons.woodImgTiny;
if (rslt['resource2'] > 0)
m += addCommas(rslt['resource2']) + '</TD>';
else
m += '0</td>'
m += '<TD style="width:18%">' + GameIcons.stoneImgTiny;
if (rslt['resource3'] > 0)
m += addCommas(rslt['resource3']) + '</TD>';
else
m += '0</TD>';
m += '<TD style="width:18%">' + GameIcons.oreImgTiny;
if (rslt['resource4'] > 0)
m += addCommas(rslt['resource4']) + '</TD>';
else
m += '0</td>'
m += '<TD style="width:15%">' + GameIcons.astoneImgTiny;
if (rslt['resource5'] > 0)
m += addCommas(rslt['resource5']) + '</TD>';
else
m += '0</TD>';
m += '</tr>'
m += '</TABLE><br>';
return m;
}
function handleunts() { // Troops sent to Reinforce or troops found on a Scout (also show destination for transports)
var m = '';
//header
if (rpt.marchName == 'Reinforce')
m += '<div class="ptdivHeader" style="background: #99CCFF;" align=left>Reinforcement:</div>';
else
if (rpt.marchName == 'Transport')
m += '<div class="ptdivHeader" style="background: #99CCFF;" align=left>Destination:</div>';
else
m += '<div class="ptdivHeader" style="background: #99CCFF;" align=left>Scout Report:</div>';
//summary
m += '<div id=battleSummaryContainer>';
//summary - attacker
m += '<div style="width:50%;float:left;">';
if (rpt.marchName == 'Reinforce')
m += '<B>Ally:</B> ' + MonitorLink(rpt.side1Name) + ' (<A onclick="ptGotoMap(' + rpt.side1XCoord + ',' + rpt.side1YCoord + ')">' + rpt.side1XCoord + ',' + rpt.side1YCoord + '</a>)<br>';
if (rslt['unts'] != undefined) {
m += '<TABLE class=ptTab>';
for (var ui in uW.cm.UNIT_TYPES) {
i = uW.cm.UNIT_TYPES[ui];
if (rslt['unts']['u' + i] != undefined)
m += '<TR><TD>' + unitImg[i] + '</TD><TD align=right>' + addCommas(rslt['unts']['u' + i]) + '</TD></TR>';
}
m += '</TABLE>';
}
if (rpt.marchName != 'Reinforce')
m += handlefrt();
m += ' </div>';
//summary - defender
m += '<div style="width:50%;float:left;">';
if ((rpt.marchName == 'Reinforce') || (rpt.marchName == 'Transport'))
m += '<B>Destination</B> ' + MonitorLink(rpt.side0Name) + ' (<A onclick="ptGotoMap(' + rpt.side0XCoord + ',' + rpt.side0YCoord + ')">' + rpt.side0XCoord + ',' + rpt.side0YCoord + '</a>)<br>';
else {
m += '<TABLE class=ptTab width=100%>';
m += '<TR><TD>' + MonitorLink(rpt.side0Name) + ' (<A onclick="ptGotoMap(' + rpt.side0XCoord + ',' + rpt.side0YCoord + ')">' + rpt.side0XCoord + ',' + rpt.side0YCoord + '</a>)</td></tr>';
if (rslt['lstlgn']) {
if (!rslt['lstlgn'])
m += '<TR><TD>Last Login: Not recorded</TD></TR>';
else
m += '<TR><TD>Last Login: ' + formatUnixTime(rslt['lstlgn']) + '</TD></TR>';
}
m += '<TR><TD>Marshall Combat: ';
if (rslt['knt'])
m += rslt['knt']['cbt'];
else
m += 'None';
m += '</TD></TR>';
if (rslt['pop'])
m += '<TR><TD>Population: ' + addCommas(rslt['pop']) + '</TD></TR>';
if (rslt['hap'])
m += '<TR><TD>Happiness: ' + addCommas(rslt['hap']) + '</TD></TR></TABLE>';
if (rslt['blds']) {
if (rslt['blds']['b1'] || rslt['blds']['b2'] || rslt['blds']['b3'] || rslt['blds']['b4']) {
m += '<TABLE class=ptTab><TR><TH colspan=2 align=left>Fields</TH></TR>';
for (var i = 1; i < 5; i++)
if (rslt['blds']['b' + i])
m += handleblds(i);
m += '</TABLE>';
}
}
if (rslt['tch']) {
m += '<TABLE class=ptTab><TR><TH colspan=2 align=left>Research</TH></TR>';
for (var tl in rslt.tch) {
tid = /[0-9]+/.exec(tl);
m += '</TD></TR><TR><TD>' + uW.techcost['tch' + tid[0]][0] + '</TD><TD align=right>' + rslt.tch[tl] + '</TD></TR>';
}
m += '</TABLE>';
}
m += '</TD></TR></TABLE>';
}
m += '</div>';
m += '</div>'; //end battlesummary div
m += '<div style="clear:both"></div>';
return m;
}
function handlersc() { // Resources brought with reinforcements or found on a Scout
var m = '';
if (rslt['rsc'] != undefined) {
if (rslt['rsc']['r1'] > 0 || rslt['rsc']['r2'] > 0 || rslt['rsc']['r3'] > 0 || rslt['rsc']['r4'] > 0) {
if (rpt.marchName == 'Reinforce')
m += '<div class="ptdivHeader" style="background: #99CCFF;" align=left>Goodies Brought:</div><TABLE style="width:100%;" class=ptTab>';
else
m += '<div class="ptdivHeader" style="background: #99CCFF;" align=left>Goodies Found:</div><TABLE style="width:100%;" class=ptTab>';
m += '<TR><TD style="width:18%">' + GameIcons.goldImgTiny;
if (rslt['gld'] > 0)
m += addCommas(parseFloat(rslt['gld']).toFixed(0)) + '</TD>';
else
m += '0</td>';
m += '<TD style="width:18%">' + GameIcons.foodImgTiny;
if (rslt['rsc']['r1'] > 0)
m += addCommas(parseFloat(rslt['rsc']['r1']).toFixed(0)) + '</TD>';
else
m += '0</td>';
m += '<TD style="width:18%">' + GameIcons.woodImgTiny;
if (rslt['rsc']['r2'] > 0)
m += addCommas(parseFloat(rslt['rsc']['r2']).toFixed(0)) + '</TD>';
else
m += '0</td>';
m += '<TD style="width:18%">' + GameIcons.stoneImgTiny;
if (rslt['rsc']['r3'] > 0)
m += addCommas(parseFloat(rslt['rsc']['r3']).toFixed(0)) + '</TD>';
else
m += '0</td>';
m += '<TD style="width:18%">' + GameIcons.oreImgTiny;
if (rslt['rsc']['r4'] > 0)
m += addCommas(parseFloat(rslt['rsc']['r4']).toFixed(0)) + '</TD>';
else
m += '0</td>';
m += '<TD style="width:15%">' + GameIcons.astoneImgTiny;
if (rslt['rsc']['r5'] > 0)
m += addCommas(parseFloat(rslt['rsc']['r5']).toFixed(0)) + '</TD>';
else
m += '0</td>';
m += '</TABLE>';
}
}
return m;
}
function handlefrt() { // Fortifications found on a Scout
var hfrt = '',
th = '',
tc = '',
tf = '';
if (rslt['frt']) {
if (rslt['frt']['f53'] != undefined || rslt['frt']['f55'] != undefined || rslt['frt']['f60'] != undefined || rslt['frt']['f61'] != undefined || rslt['frt']['f62'] != undefined) {
th = '<TABLE class=ptTab><TR><TH colspan=3 align=left>Defenses Found</TH></TR>';
if (rslt['frt']['f53'] != undefined)
tc += '<TR><TD>' + unitImg[53] + '</TD><TD align=right>' + addCommas(rslt['frt']['f53']) + '</TD></TR>';
if (rslt['frt']['f55'] != undefined)
tc += '<TR><TD>' + unitImg[55] + '</TD><TD align=right>' + addCommas(rslt['frt']['f55']) + '</TD></TR>';
if (rslt['frt']['f60'] != undefined)
tc += '<TR><TD>' + unitImg[60] + '</TD><TD align=right>' + addCommas(rslt['frt']['f60']) + '</TD></TR>';
if (rslt['frt']['f61'] != undefined)
tc += '<TR><TD>' + unitImg[61] + '</TD><TD align=right>' + addCommas(rslt['frt']['f61']) + '</TD></TR>';
if (rslt['frt']['f62'] != undefined)
tc += '<TR><TD>' + unitImg[62] + '</TD><TD align=right>' + addCommas(rslt['frt']['f62']) + '</TD></TR>';
tf = '</TABLE>';
}
}
if (tc != '')
hfrt = th + tc + tf;
return hfrt;
}
function handleblds(bType) {
if (rslt['blds']) {
var blds = rslt['blds']['b' + bType];
b = '<TR><TD>';
arField = [], firstbld = true;
if (bType == 1)
b += 'Farm';
else if (bType == 2)
b += 'Sawmill';
else if (bType == 3)
b += 'Quarry';
else if (bType == 4)
b += 'Mine';
b += '</TD><TD>';
for (var i = 1; i < 12; i++)
arField[i] = 0;
for (var i = 0; i < blds.length; i++)
arField[blds[i]]++
for (var i = 11; i > 0; i--) {
if (arField[i] > 0) {
if (firstbld)
firstbld = false;
else
b += ', ';
if (arField[i] > 1)
b += arField[i] + ' x ';
b += ' ' + i;
}
}
b += '</TD></TR>';
return b;
}
}
if (t.popReport) {
t.popReport.show(false);
if (t.popReport.onClose) t.popReport.onClose();
t.popReport.destroy();
t.popReport = null;
}
if (rpt.marchName == 'Reinforce') {
t.popReport = new CPopup('pbReportPopup', reportpos.x, reportpos.y, 750, 240, true, function () {
reportpos = t.popReport.getLocation();
clearTimeout(1000);
});
m += '<DIV style="height:185px">';
} else if (rpt.marchName == 'Transport') {
t.popReport = new CPopup('pbReportPopup', reportpos.x, reportpos.y, 750, 240, true, function () {
reportpos = t.popReport.getLocation();
clearTimeout(1000);
});
m += '<DIV style="height:185px">';
} else if (rpt.marchName == 'Scout' && rslt['winner'] == 1 && rpt.sideId == 1) {
t.popReport = new CPopup('pbReportPopup', reportpos.x, reportpos.y, 750, 680, true, function () {
reportpos = t.popReport.getLocation();
clearTimeout(1000);
});
m += '<DIV style="max-height:645px; height:645px; overflow-y:scroll">';
} else {
t.popReport = new CPopup('pbReportPopup', reportpos.x, reportpos.y, 750, 680, true, function () {
reportpos = t.popReport.getLocation();
clearTimeout(1000);
});
m += '<DIV style="max-height:645px; height:645px; overflow-y:scroll">';
}
if ((reportpos.x == -999) && (reportpos.y == -999)) {
t.popReport.centerMe(mainPop.getMainDiv());
}
m += buildHeader();
if (rpt.marchName == 'Transport') { // Transport
m += handleTransportLoot();
m += handleunts();
}
m += handleLoot();
if (rpt.marchName == 'Reinforce') {
m += handlersc();
m += handleunts();
}
if (rpt.marchName == 'Scout' && rslt['winner'] == 1) {
m += handlersc();
m += handleunts();
}
if (rslt['fght']) {
m += buildBattle();
m += buildTroopStats();
m += buildChampDuel();
m += buildThroneStats();
m += buildBoosts();
}
m += '</DIV>';
t.popReport.getMainDiv().innerHTML = m;
t.popReport.getTopDiv().innerHTML = '<DIV align=center><B>' + rpt.marchName + ' Report</B></DIV>';
if (document.getElementById('reportTroopStatsHdr')) {
document.getElementById('reportTroopStatsHdr').addEventListener('click', function () {
ToggleDivDisplay(500, 500, "reportTroopStats");
}, false);
}
if (document.getElementById('reportChampDuelHdr')) {
document.getElementById('reportChampDuelHdr').addEventListener('click', function () {
ToggleDivDisplay(500, 500, "reportChampDuel");
}, false);
}
if (document.getElementById('reportThroneHdr')) {
document.getElementById('reportThroneHdr').addEventListener('click', function () {
ToggleDivDisplay(500, 500, "reportThrone");
}, false);
}
if (document.getElementById('reportBoostsHdr')) {
document.getElementById('reportBoostsHdr').addEventListener('click', function () {
ToggleDivDisplay(500, 500, "reportBoosts");
}, false);
}
t.popReport.show(true);
},
};
/********************** Tournament Tab *******************************************/
// useless :( ......
/***/
/***
RSLT:
(string) s0Kid = 57526
(string) s1Kid = 35216
(string) s1KLv = 1
(number) s0KCombatLv = 0
(string) s1KCombatLv = Higher
(object) fght = [object Object]
(object) s1 = [object Object]
(array) u2 = 89000,89000
(string) 0 = 89000
(number) 1 = 89000
(array) u9 = 1000,1000
(string) 0 = 1000
(number) 1 = 1000
(number) rnds = 3
(number) winner = 1
(number) wall = 100
(number) s0atkBoost = 0
(number) s0defBoost = 0
(number) s1atkBoost = 0
(number) s1defBoost = 0.2
(boolean) conquered = false
(array) loot = 111139,763000,643000,78000,138000
(number) 0 = 111139
(number) 1 = 763000
(number) 2 = 643000
(number) 3 = 78000
(number) 4 = 138000
(string) errorMsg = Something has gone wrong! Please try again, or refresh if this message reappear
***/
Tabs.Tournament = {
tabOrder: 100,
cont: null,
displayTimer: null,
init: function (div) {
var t = Tabs.Tournament;
t.cont = div;
t.tourneyPos = 0;
uW.ptSetTourneyPos = function (tab) {
var t = Tabs.Tournament;
t.tourneyPos = tab;
t.show();
};
},
hide: function () {
var t = Tabs.Tournament;
clearTimeout(t.displayTimer);
},
getContent: function () {
var t = Tabs.Tournament;
return t.cont;
},
show: function () {
var t = Tabs.Tournament;
t.cont.style.overflowY = 'auto';
t.cont.style.maxHeight = '650px';
clearTimeout(t.displayTimer);
t.cont.innerHTML = "<div class='tourny_modal_upsell'></div>";
var mhtl = "<DIV class=ptstat>POPULATION AND PRODUCTION INFORMATION</div><table width=100% class=pdxTab><tr><td colspan=8> </td></tr><tr><td></td>";
for (var i = 0; i < Cities.numCities; i++) {
mhtl += "<TD align=center valign=bottom width=60px><B>" + Cities.cities[i].name + "</B></TD>";
}
mhtl += "</tr><tr><td>";
mhtl += '<SELECT id="TTroopsPerHr">';
for (y in uW.unitnamedesctranslated) {
if (!Options.TourneyTroopType) {
Options.TourneyTroopType = 2;
saveOptions();
}
if (y.substr(3) == Options.TourneyTroopType)
mhtl += '<option selected value="' + y.substr(3) + '">' + uW.unitnamedesctranslated[y][0] + '</option>';
else
mhtl += '<option value="' + y.substr(3) + '">' + uW.unitnamedesctranslated[y][0] + '</option>';
if (y.substr(3) > 4) break; // only 1 pop per troop makes sense here
}
mhtl += '</select>';
mhtl += " /h</td>";
var temps = [];
for (var i = 0; i < Cities.numCities; i++) {
temps[i] = ((Cities.cities[i]['Troop' + Options.TourneyTroopType + 'Time'] > 0) ? (3600 / Cities.cities[i]['Troop' + Options.TourneyTroopType + 'Time']) : 0);
temps[i] = temps[i] + parseInt(temps[i] * equippedthronestats(77) / 100);
mhtl += "<td>" + addCommas(parseInt(temps[i])) + "</td>";
}
mhtl += "</tr><tr><td><img height=18 src=https://kabam1-a.akamaihd.net/kingdomsofcamelot/fb/e2/src/img/population_40.png title=Population> Population/h</td>";
var pop = [];
for (var i = 0; i < Cities.numCities; i++) {
cityID = 'city' + Cities.cities[i].id;
pop[i] = parseInt(Seed.citystats[cityID]["pop"][1]) / 2;
mhtl += "<td>" + addCommas(parseInt(pop[i])) + "</td>";
}
mhtl += "</tr><tr><td><b>Difference</b></td>";
var diff = 0;
for (var i = 0; i < Cities.numCities; i++) {
if (temps[i] <= 0) {
diff = 'N/A';
}
diff = parseInt(pop[i] - temps[i]);
var couleur = " style='font-color:green' ";
if (diff < 0) couleur = " style='background-color:red' ";
if (temps[i] <= 0) {
mhtl += "<td style='background-color:red'><center><b>n/a</b></center></td>";
} else {
mhtl += "<td " + couleur + "><b>" + addCommas(parseInt(diff)) + "</b></td>";
}
}
mhtl += "</tr><tr><td><img height=18 src=https://kabam1-a.akamaihd.net/kingdomsofcamelot/fb/e2/src/img/happiness.png title=happiness> happiness</td>";
for (var i = 0; i < Cities.numCities; i++) {
cityID = 'city' + Cities.cities[i].id;
var bon = parseInt(Seed.citystats[cityID]["pop"][2]);
var bonc = "red";
if (bon > 99) bonc = "green";
mhtl += "<td style='background-color:" + bonc + "'><center><b>" + bon + "</td>";
}
var now = unixTime();
mhtl += "</tr><tr><td><b>Queue</b></td>";
for (var i = 0; i < Cities.numCities; i++) {
cityID = 'city' + Cities.cities[i].id;
var totTime = 0;
var q = Seed.queue_unt[cityID];
if (q != null && q.length > 0)
totTime = q[q.length - 1][3] - now;
if (totTime < 0) totTime = 0;
if (totTime < 3600)
var bonc = "style='background-color:red'";
else
var bonc = "";
mhtl += "<td " + bonc + "><center><b>" + timestr(totTime) + "</td>";
}
mhtl += "</tr></table><br>";
t.cont.innerHTML += mhtl;
var params = unsafeWindow.Object.clone(unsafeWindow.g_ajaxparams);
params.format = 2;
params.tournyPos = t.tourneyPos;
new AjaxRequest(unsafeWindow.g_ajaxpath + "ajax/getLeaderboard.php" + unsafeWindow.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (transport) {
var rslt = eval("(" + transport.responseText + ")");
if (rslt.ok) {
var prevs = [];
for (var s = 0; s < 4; s++) {
w = rslt["previous" + s];
if (w && w > -1) {
prevs.push(uW.formatDateByUnixTime(w));
}
}
if (!rslt.data) {
t.cont.innerHTML += "<div class=ptstat>TOURNAMENT CHECK</div><div class='tourny_modal_upsell'><br><center><b>No Active Tournaments!</b></center></div>";
for (var s = 0; s < prevs.length; s++) {
t.cont.innerHTML += "<div class='tourny_modal_upsell'><br><center><b><a onclick='ptSetTourneyPos(" + s + 1 + ")'>Show Tournament that ended on " + prevs[s] + "</a></b></center></div>";
}
} else { // rslt.data
var tournyhtml = new Array();
if (rslt.name) {
tournyhtml.push("<div class=ptstat><center>" + rslt.name.replace('The Tournament of Might', 'THE TOURNAMENT OF MIGHT') + "</center></div>")
} else {
tournyhtml.push("<div class='tournymodaltitle'><center>" + unsafeWindow.g_js_strings.commonstr.tournament + "</div>")
}
tournyhtml.push("<div>");
if (t.tourneyPos != 0) {
tournyhtml.push("<div class='tourny_modal_upsell'><br><center><b><a onclick='ptSetTourneyPos(0)'>Show Current Tournament (if any)</a></b></center></div>");
}
for (var s = 0; s < prevs.length; s++) {
if (t.tourneyPos != (s + 1)) {
tournyhtml.push("<div class='tourny_modal_upsell'><br><center><b><a onclick='ptSetTourneyPos(" + s + 1 + ")'>Show Tournament that ended on " + prevs[s] + "</a></b></center></div>");
}
}
tournyhtml.push("<div> </div>");
if (rslt.startDate && rslt.endDate) {
var startTime = rslt.startDate;
var endTime = rslt.endDate;
var now = parseInt(new Date().getTime() / 1000);
tournyhtml.push("<table width=100% align=center class=pbTab><tr bgcolor=#FE8888><td width=40%><b>Starts</td><td width=40%><b>Ends</td><td width=20%><b>Time Left</td></tr>");
dt = new Date();
dt.setTime(startTime * 1000);
dtf = new Date();
dtf.setTime(endTime * 1000);
var restant = endTime - now;
tournyhtml.push("<tr><td>");
tournyhtml.push("" + dt.toLocaleDateString() + " - " + dt.toLocaleTimeString());
tournyhtml.push("</td><td>");
tournyhtml.push("" + dtf.toLocaleDateString() + " - " + dtf.toLocaleTimeString());
if (restant > 0) {
tournyhtml.push("</td><td>" + timestr(restant, 1) + "</td></tr></table>");
} else {
tournyhtml.push("</td><td>ENDED!</td></tr></table>");
}
tournyhtml.push("<br>");
}
if ((Options.TourneyBoardType != 2) || !rslt.worldData) {
tourneystats = rslt.data;
Options.TourneyBoardType = 1;
saveOptions();
} else {
tourneystats = rslt.worldData;
}
mhtl = '<center><table width="90%" cellpadding="0" cellspacing="0" border="0"><tr><td width="40%"><div align=left><b> ';
if (Options.TourneyBoardType != 2) {
mhtl += rslt.bracketName;
} else {
mhtl += 'Domain Leaders';
}
mhtl += '</b></div></td><td>';
if (rslt.worldData) {
mhtl += "<div align=center ><input type=button id='BTLeaders' value='-'></div>";
}
mhtl += '</td><td width="40%">';
if (rslt.lastUpdated && (t.tourneyPos == 0)) {
var now = parseInt(new Date().getTime() / 1000);
var updated = now - rslt.lastUpdated;
mhtl += "<div align=right >Last updated " + timestr(updated, 1) + " ago.</div>";
}
mhtl += '</td></tr></table></center>';
tournyhtml.push(mhtl);
tournyhtml.push("<center><table class='tourny_list_table' cellpadding='0' cellspacing='0' border='0' width=90% style='margin:5px'>");
tournyhtml.push("<thead>");
tournyhtml.push("<tr>");
if (rslt.type == 24) {
tournyhtml.push("<td class='rankcol' style='background-color:red'>");
tournyhtml.push("<div><input type=button id='BOTournoiPM' value='-'> " + unsafeWindow.g_js_strings.commonstr.ranking + "</div>");
tournyhtml.push("</td>");
tournyhtml.push("<td style='background-color:red'>");
tournyhtml.push("<div>Chancellor</div>");
tournyhtml.push("</td>");
tournyhtml.push("<td style='background-color:red'>");
tournyhtml.push("<div>" + unsafeWindow.g_js_strings.commonstr.alliance + "</div>");
tournyhtml.push("</td>");
tournyhtml.push("<td style='background-color:red'>");
tournyhtml.push("<div>" + unsafeWindow.g_js_strings.modal_tourny_changetab.mightgained + "</div>");
tournyhtml.push("</td style='background-color:red'>");
tournyhtml.push("<td style='background-color:red'> ");
tournyhtml.push("<div>" + unsafeWindow.g_js_strings.modal_tourny_changetab.rewardperplayer + "</div>");
tournyhtml.push("</td>")
} else {
tournyhtml.push("<td class='rankcol' style='background-color:red'>");
tournyhtml.push("<div><input type=button id='BOTournoiPM' value='-'> " + unsafeWindow.g_js_strings.commonstr.ranking + "</div>");
tournyhtml.push("</td>");
tournyhtml.push("<td style='background-color:red'>");
tournyhtml.push("<div>Player</div>");
tournyhtml.push("</td>");
tournyhtml.push("<td style='background-color:red'>");
tournyhtml.push("<div>" + unsafeWindow.g_js_strings.commonstr.alliance + "</div>");
tournyhtml.push("</td>");
tournyhtml.push("<td style='background-color:red'>");
if (rslt.type == 31)
tournyhtml.push("<div>" + unsafeWindow.g_js_strings.modal_tourny_changetab.mightgained + "</div>");
else
tournyhtml.push("<div>" + rslt.contestcategory + "</div>");
tournyhtml.push("</td>");
tournyhtml.push("<td style='background-color:red'>");
tournyhtml.push("<div>" + unsafeWindow.g_js_strings.commonstr.reward + "</div>");
tournyhtml.push("</td>")
}
tournyhtml.push("</tr>");
tournyhtml.push("</thead>");
tournyhtml.push("</tbody>");
var nb = tourneystats.length;
var votrepuissance = 0;
for (var i = 0; i < tourneystats.length; i++) {
var row = tourneystats[i];
if (rslt.type == 24) { // Tournament
if (getMyAlliance()[1] == row.alliance) {
votrepuissance = row.contestValue;
break;
}
} else {
if (Seed.player.prefix + ' ' + Seed.player.name == row.name) {
votrepuissance = row.contestValue;
break;
}
}
}
for (var i = 0; i < Options.TournoiLigne; i++) {
if (tourneystats[i] == null) break;
var row = tourneystats[i];
var rewardString = " ";
if (row.itemType) {
rewardString = row.itemCount + " ";
if (row.itemType == 0) {
rewardString += unsafeWindow.g_js_strings.commonstr.gems;
} else {
rewardString += unsafeWindow.itemlist["i" + row.itemType].name;
}
}
var couleur = "";
if (rslt.type == 24) { //Alliance Tournament
if (getMyAlliance()[1] == row.alliance) {
couleur = " style='background-color:#FF0000' ";
}
} else {
if (Seed.player.prefix + ' ' + Seed.player.name == row.name) {
couleur = " style='background-color:#FF0000' ";
}
}
if (i % 2 == 1) {
tournyhtml.push("<tr>")
} else {
tournyhtml.push("<tr class='stripe'>")
}
tournyhtml.push("<td class='rankcol' " + couleur + ">");
tournyhtml.push("<div><b>" + row.ranking + "</b></div>");
tournyhtml.push("</td>");
tournyhtml.push("<td " + couleur + ">");
tournyhtml.push("<div>" + row.name + "</div>");
tournyhtml.push("</td>");
tournyhtml.push("<td " + couleur + ">");
tournyhtml.push("<div>" + (row.alliance || "----") + "</div>");
tournyhtml.push("</td>");
tournyhtml.push("<td " + couleur + ">");
tournyhtml.push("<div>" + addCommas(row.contestValue));
if (votrepuissance > 0) {
var ecartavecvous = parseInt(row.contestValue - votrepuissance);
if (ecartavecvous > 0) {
tournyhtml.push(" (+" + addCommas(ecartavecvous) + ")");
}
if (ecartavecvous < 0) {
tournyhtml.push(" (" + addCommas(ecartavecvous) + ")");
}
}
tournyhtml.push("</div>");
tournyhtml.push("</td>");
tournyhtml.push("<td " + couleur + ">");
tournyhtml.push("<div>" + rewardString + "</div>");
tournyhtml.push("</td>");
tournyhtml.push("</tr>")
} // fin du for
if (rslt.type != 24) {
for (var i = Options.TournoiLigne; i < tourneystats.length; i++) {
if (tourneystats[i] == null) break;
var row = tourneystats[i];
var couleur = "";
if (Seed.player.prefix + ' ' + Seed.player.name == row.name) {
couleur = " style='background-color:#FF0000' ";
var rewardString = " ";
if (row.itemType) {
rewardString = row.itemCount + " ";
if (row.itemType == 0) {
rewardString += unsafeWindow.g_js_strings.commonstr.gems;
} else {
rewardString += unsafeWindow.itemlist["i" + row.itemType].name;
}
}
tournyhtml.push("<tr class='stripe' >")
tournyhtml.push("<td class='rankcol' " + couleur + ">");
tournyhtml.push("<div><b>" + row.ranking + "</b></div>");
tournyhtml.push("</td>");
tournyhtml.push("<td " + couleur + ">");
tournyhtml.push("<div>" + row.name + "</div>");
tournyhtml.push("</td>");
tournyhtml.push("<td " + couleur + ">");
tournyhtml.push("<div>" + (row.alliance || "----") + "</div>");
tournyhtml.push("</td>");
tournyhtml.push("<td " + couleur + ">");
tournyhtml.push("<div>" + addCommas(row.contestValue) + "</div>");
tournyhtml.push("</td>");
tournyhtml.push("<td " + couleur + ">");
tournyhtml.push("<div>" + rewardString + "</div>");
tournyhtml.push("</td>");
tournyhtml.push("</tr>")
}
}
}
tournyhtml.push("</tbody>");
tournyhtml.push("</table>");
tournyhtml.push("</div>");
t.cont.innerHTML += tournyhtml.join("");
document.getElementById('BOTournoiPM').addEventListener('click', function () {
var lg = tourneystats.length;
if (rslt.type != 24) lg = 250;
t.plusmoins(lg);
}, false);
if ((Options.TournoiLigne == 5 && rslt.type != 24) || (Options.TournoiLigne == 5 && rslt.type == 24)) {
document.getElementById('BOTournoiPM').value = "Maximize";
} else {
document.getElementById('BOTournoiPM').value = "Minimize";
}
if (Options.TourneyBoardType != 2) {
document.getElementById('BTLeaders').value = "Show Domain Leaders";
} else {
document.getElementById('BTLeaders').value = "Show Your Bracket (" + rslt.bracketName + ")";
}
document.getElementById('BTLeaders').addEventListener('click', function () {
t.leadertoggle();
}, false);
} // fin rslt.data
} else {
t.cont.innerHTML = "<div class='tourny_modal_upsell'><center>No Info</div>";
}
document.getElementById('TTroopsPerHr').addEventListener('change', function () {
t.changetroops(this);
}, false);
},
onFailure: function () {
t.cont.innerHTML = "<div class='tourny_modal_upsell'><center>No Info</div>";
}
});
t.displayTimer = setTimeout(t.show, 240000);
},
plusmoins: function (lg) {
var t = Tabs.Tournament;
if (document.getElementById('BOTournoiPM').value == "Maximize") {
document.getElementById('BOTournoiPM').value = "Minimize";
Options.TournoiLigne = lg;
} else {
document.getElementById('BOTournoiPM').value = "Maximize";
Options.TournoiLigne = 5;
}
saveOptions();
clearTimeout(t.displayTimer);
t.show();
},
leadertoggle: function () {
var t = Tabs.Tournament;
if (document.getElementById('BTLeaders').value == "Show Domain Leaders") {
Options.TourneyBoardType = 2;
} else {
Options.TourneyBoardType = 1;
}
saveOptions();
clearTimeout(t.displayTimer);
t.show();
},
changetroops: function (el) {
var t = Tabs.Tournament;
Options.TourneyTroopType = el.value;
saveOptions();
clearTimeout(t.displayTimer);
t.show();
},
/*
checktourney: function() {
var t = Tabs.Tournament;
var params = unsafeWindow.Object.clone(unsafeWindow.g_ajaxparams);
params.format=2;
params.tournyPos=0;
new AjaxRequest(unsafeWindow.g_ajaxpath+"ajax/getLeaderboard.php"+unsafeWindow.g_ajaxsuffix, {
method:"post", parameters:params,
onSuccess:function(transport){
var rslt=eval("("+transport.responseText+")");
if(rslt.name){
var t = Tabs.Tournament;
AddTowerTab('Turnier', t.showTournament, 10);
};
},
});
},
showTournament: function() {
// Options.currentTab = culang.tournament;
// saveOptions();
mainPop.show (true);
// setTimeout(function(){document.getElementById('pbtc'+culang.tournament).e_clickedTab}, 3000);
// tabManager.e_clickedTab(e);
},
*/
}
/*************** WILDS TAB *********************/
var wildNames = {
0: 'Bog',
10: 'Grassland',
11: 'Lake',
20: 'Woods',
30: 'Hills',
40: 'Mountain',
50: 'Plain',
};
var mercNames = {
0: 'None',
1: 'Novice',
2: 'Intermediate',
3: 'Veteran',
};
Tabs.Wilds = {
tabOrder: 35,
tabLabel: 'Wilds',
cont: null,
// state : null,
upGoldTimer: null,
wildList: [],
buildList: {},
init: function (div) {
var t = Tabs.Wilds;
t.cont = div;
uW.ptButMaxTraps = t.e_butMaxTraps;
uW.ptInpWildTraps = t.e_inpTraps;
uW.ptButWildSet = t.e_butWildSet;
uW.ptButAbandon = t.e_abandon;
t.cont.innerHTML = '<DIV id=wildContent style="maxheight:700px; height:700px; overflow-y:auto">';
// t.show ();
},
hide: function () {
var t = Tabs.Wilds;
clearTimeout(t.upGoldTimer);
},
show: function () {
var t = Tabs.Wilds;
clearTimeout(t.upGoldTimer);
m = '<CENTER>' + strButton20('RESET', 'id=ptwref') + '</center><TABLE cellspacing=0 cellpadding=0 class=ptTabPad align=center>';
for (var c = 0; c < Cities.numCities; c++) {
var city = Cities.cities[c];
var cWilds = Seed.wilderness['city' + city.id];
t.wildList[c] = [];
var castle = parseInt(Seed.buildings['city' + city.id].pos0[1]);
if (castle == 11) castle = 12;
else if (castle == 12) castle = 14;
var totw = 0;
if (matTypeof(cWilds) == 'object') {
for (var k in cWilds)
++totw;
}
m += '<TD width = "100px" ; border:none"><a href="https://code.google.com/p/koc-power-tools/wiki/HowToWilds" target="_blank">HELP</a></td></tr>';
m += '<TR><TD colspan=20><DIV class=ptstat><TABLE class=ptNoPad width=100%><TR><TD width=100></td><TD width=90% align=center>' + city.name + ' (' + city.x + ',' + city.y + ')</td><TD width=100 align=right>Wilds: ' + totw + ' of ' + castle + ' </TD></tr></table></div></td></tr>';
var row = 0;
var sortem = [];
if (matTypeof(cWilds) != 'array') {
m += '<TR style="background-color:white; font-weight:bold;" align=right><TD align=left>Wild Type</td><TD></td><TD align=left>Coords</td><TD>Traps</td><TD align=left>Mercs</td><TD>Abandon</td>\
<TD width=15></td><TD colspan=3 class=entry>' + htmlTitleLine(' CHANGE DEFENSES ') + '</td></tr>';
for (var k in Seed.wilderness['city' + city.id])
sortem.push(Seed.wilderness['city' + city.id][k]);
sortem.sort(function (a, b) {
var x;
if ((x = b.tileLevel - a.tileLevel) != 0)
return x;
return a.tileType - b.tileType;
});
for (i = 0; i < sortem.length; i++) {
var wild = sortem[i];
var wildDef = Seed.wildDef['t' + wild.tileId];
if (wildDef == undefined || !wildDef)
wildDef = {
fort60Count: 0,
mercLevel: 0
};
var maxTraps = parseInt(wild.tileLevel) * 100;
var maxBuild = maxTraps - parseInt(wildDef.fort60Count);
t.wildList[c][i] = [wild.tileId, maxBuild];
//
m += '<TR align=right' + (row++ % 2 ? '' : ' class=ptOddrow') + '><TD align=left>' + wildNames[wild.tileType] + '</td>\
<TD>' + wild.tileLevel + '</td><TD align=center><A onclick="ptGotoMap(' + wild.xCoord + ',' + wild.yCoord + ')">' + wild.xCoord + ',' + wild.yCoord + '</a></td>\
<TD align=right><B>' + wildDef.fort60Count + '</b></td><TD align=center><B>' + mercNames[wildDef.mercLevel] + '</b></td><TD align=center>' + strButton14('Abandon', 'onclick="ptButAbandon(' + wild.tileId + ',' + wild.xCoord + ',' + wild.yCoord + ',' + city.id + ')" id=tileId_' + wild.tileId) + '</td>\
<TD></td><TD align=left class=ptentry><B>Build Traps:</b> <INPUT onchange="ptInpWildTraps(this)" id=ptwt_' + c + '_' + i + (maxBuild == 0 ? ' DISABLED ' : '') + ' style="margin:0px; padding:0px" type=text size=3 maxlength=4></td>'
if (wildDef.fort60Count < maxTraps)
m += '<TD class=ptentry style="padding:0px">' + strButton14('Max', 'id=ptwx_' + c + '_' + i + ' onclick="ptButMaxTraps(this)"') + '</td>';
else
m += '<TD class=ptentry></td>';
m += '<TD class=ptentry> <B>Mercs:</b> ' + htmlSelector(mercNames, wildDef.mercLevel, 'id=ptwm_' + c + '_' + i) + ' </td></tr>';
}
m += '<TR><TD colspan=6></td><TD></td><TD class=ptentry align=center colspan=3><TABLE><TR><TD width=40% align=left>Cost: <SPAN id=ptwgc_' + c + '>0</span></td>\
<TD width=10%>' + strButton20("SET DEFENSES", 'onclick="ptButWildSet(' + c + ')"') + '<TD width=40% align=right>Gold: <SPAN id=ptwgt_' + c + '>0</span></td></td></tr></table></td></tr>';
} else {
m += '<TR><TD colspan=9> </td></tr>';
}
}
document.getElementById('wildContent').innerHTML = m + '</table></div>';
document.getElementById('ptwref').addEventListener('click', t.show, false);
t.updateGold();
},
e_abandon: function (tileId, xCoord, yCoord, cityId) {
var t = Tabs.Wilds;
var params = uW.Object.clone(uW.g_ajaxparams);
params.tid = tileId;
params.x = xCoord;
params.y = yCoord;
params.cid = cityId;
new MyAjaxRequest(uW.g_ajaxpath + "ajax/abandonWilderness.php" + uW.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (rslt) {
if (rslt.ok) {
delete Seed.wilderness["city" + cityId]["t" + tileId];
t.show();
if (rslt.updateSeed) {
uW.update_seed(rslt.updateSeed);
}
}
},
onFailure: function () {},
});
},
e_butWildSet: function (c) {
var t = Tabs.Wilds;
var totTraps = 0;
var cid = Cities.cities[c].id;
t.buildList = {
cityId: cid,
list: []
};
for (var w = 0; w < t.wildList[c].length; w++) {
var wild = Seed.wilderness['city' + cid]['t' + t.wildList[c][w][0]];
var wildDef = Seed.wildDef['t' + t.wildList[c][w][0]];
// TODO: Seed.wildDef is null if just aquired
if (wildDef == undefined || !wildDef)
wildDef = {
fort60Count: 0,
mercLevel: 0
};
var numTraps = parseInt(document.getElementById('ptwt_' + c + '_' + w).value, 10);
if (isNaN(numTraps))
numTraps = 0;
totTraps += numTraps;
if (numTraps > 0)
t.buildList.list.push(['T', wild.tileId, numTraps]);
var mercId = document.getElementById('ptwm_' + c + '_' + w).value;
if (wildDef.mercLevel != mercId)
t.buildList.list.push(['M', wild.tileId, mercId, wildDef.mercLevel]);
}
var totCost = totTraps * 200;
if (totCost > parseInt(Seed.citystats['city' + cid].gold[0])) {
document.getElementById('ptwgc_' + c).innerHTML = '<SPAN class=boldRed>' + addCommasInt(totCost) + '</span>';
return;
}
if (t.buildList.list.length == 0)
return;
t.setCurtain(true);
var popDiv = t.setPopup(true);
popDiv.innerHTML = '<TABLE class=ptTab width=100% height=100%><TR><TD>\
<DIV class=ptstat>Setting Wilderness Defenses</div>\
<DIV id=ptWildBuildDiv class=ptDiv style="padding:10px; height:225px; max-height:225px; overflow-y:auto"></div>\
</td></tr><TR><TD align=center>' + strButton20('CANCEL', 'id=ptWildCancel') + '</td></tr></table>';
document.getElementById('ptWildCancel').addEventListener('click', t.e_buildCancel, false);
t.processQue(null);
},
e_buildCancel: function () {
var t = Tabs.Wilds;
t.setCurtain(false);
t.setPopup(false);
t.show();
},
processQue: function (errMsg) {
var t = Tabs.Wilds;
var what = t.buildList.list.shift();
var div = document.getElementById('ptWildBuildDiv');
if (what == null || errMsg) {
if (errMsg)
div.innerHTML += '<BR><SPAN style="white-space:normal;" class=boldRed>ERROR: ' + errMsg + '</span>';
else
div.innerHTML += 'Done.<BR>';
document.getElementById('ptWildCancel').firstChild.innerHTML = 'CLOSE';
return;
}
if (div.innerHTML != '')
div.innerHTML += 'Done.<BR>';
var wild = Seed.wilderness['city' + t.buildList.cityId]['t' + what[1]];
if (what[0] == 'T') {
div.innerHTML += 'Building ' + what[2] + ' traps for ' + Cities.byID[t.buildList.cityId].name + '\'s wilderness at ' + wild.xCoord + ',' + wild.yCoord + ' ... ';
t.postBuyTraps(t.buildList.cityId, what[1], what[2], t.processQue);
} else {
div.innerHTML += 'Setting Mercenaries to ' + mercNames[what[2]] + ' for ' + Cities.byID[t.buildList.cityId].name + '\'s wilderness at ' + wild.xCoord + ',' + wild.yCoord + ' ... ';
t.postHireMercs(t.buildList.cityId, what[1], what[2], what[3], t.processQue);
}
},
setPopup: function (onoff) {
var t = Tabs.Wilds;
if (onoff) {
var div = document.createElement('div');
div.id = 'ptWildPop';
div.style.backgroundColor = '#fff';
div.style.zindex = mainPop.div.zIndex + 2;
div.style.opacity = '1';
div.style.border = '3px outset red';
div.style.width = '550px';
div.style.height = '300px';
div.style.display = 'block';
div.style.position = 'absolute';
div.style.top = '100px';
div.style.left = '100px';
t.cont.appendChild(div);
return div;
} else {
t.cont.removeChild(document.getElementById('ptWildPop'));
}
},
setCurtain: function (onoff) {
var t = Tabs.Wilds;
if (onoff) {
var off = getAbsoluteOffsets(t.cont);
var curtain = document.createElement('div');
curtain.id = 'ptWildCurtain';
curtain.style.zindex = mainPop.div.zIndex + 1;
curtain.style.backgroundColor = "#000000";
curtain.style.opacity = '0.5';
curtain.style.width = t.cont.clientWidth + 'px';
curtain.style.height = t.cont.clientHeight + 'px';
curtain.style.display = 'block';
curtain.style.position = 'absolute';
curtain.style.top = off.top + 'px';
curtain.style.left = off.left + 'px';
t.cont.appendChild(curtain);
} else {
t.cont.removeChild(document.getElementById('ptWildCurtain'));
}
},
e_butMaxTraps: function (e) {
var t = Tabs.Wilds;
var c = e.id.substr(5, 1);
var w = e.id.substr(7);
var inp = document.getElementById('ptwt_' + c + '_' + w);
inp.value = t.wildList[c][w][1];
t.e_inpTraps(inp);
},
e_inpTraps: function (e) {
var t = Tabs.Wilds;
var c = e.id.substr(5, 1);
var w = e.id.substr(7);
var tot = 0;
for (var i = 0; i < t.wildList[c].length; i++) {
var val = parseInt(document.getElementById('ptwt_' + c + '_' + i).value, 10);
if (isNaN(val))
val = 0;
tot += val;
}
document.getElementById('ptwgc_' + c).innerHTML = addCommasInt(tot * 200);
if (isNaN(e.value) || e.value < 0 || e.value > t.wildList[c][w][1]) {
e.value = '';
e.style.backgroundColor = '#ffaaaa';
} else
e.style.backgroundColor = null;
},
updateGold: function () {
var t = Tabs.Wilds;
for (var c = 0; c < Cities.numCities; c++) {
var e = document.getElementById('ptwgt_' + c + '');
if (e)
e.innerHTML = addCommasInt(Seed.citystats['city' + Cities.cities[c].id].gold[0]);
}
t.upGoldTimer = setTimeout(t.updateGold, 2000);
},
postBuyTraps: function (cid, tid, quant, notify) {
if (DISABLE_POST_DEFENSES) {
setTimeout(function () {
notify(null)
}, 1500);
return;
}
var params = uW.Object.clone(uW.g_ajaxparams);
params.cid = cid;
params.tid = tid;
params.quant = quant;
new MyAjaxRequest(uW.g_ajaxpath + "ajax/buyWildTraps.php" + uW.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (rslt) {
if (rslt.ok) {
if (!Seed.wildDef["t" + tid])
Seed.wildDef["t" + tid] = {
tileId: tid,
fort60Count: 0,
mercLevel: 0
};
Seed.wildDef["t" + tid].fort60Count = parseInt(Seed.wildDef["t" + tid].fort60Count) + parseInt(quant);
}
if (notify)
notify(rslt.errorMsg);
},
onFailure: function () {
if (notify)
notify('AJAX ERROR');
},
});
},
postHireMercs: function (cid, tid, newLevel, oldLevel, notify) {
if (DISABLE_POST_DEFENSES) {
setTimeout(function () {
notify('OK, so it\'s not really an error, it\'s just George playing around to see how the error message looks. It\'s a long one, how does it fit? Is it OK? Are you sure? JANE! Get me off of this thing!')
}, 1500);
return;
}
var params = uW.Object.clone(uW.g_ajaxparams);
params.cid = cid;
params.tid = tid;
params.lv = newLevel;
params.olv = oldLevel;
new MyAjaxRequest(uW.g_ajaxpath + "ajax/hireWildMerc.php" + uW.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (rslt) {
if (rslt.ok) {
if (!Seed.wildDef["t" + tid])
Seed.wildDef["t" + tid] = {
tileId: tid,
fort60Count: 0,
mercLevel: 0
};
Seed.wildDef["t" + tid].mercLevel = newLevel;
}
if (notify)
notify(rslt.errorMsg);
},
onFailure: function () {
if (notify)
notify('AJAX ERROR');
},
});
},
}
/*************** KNIGHTS TAB *********************/
Tabs.Knights = {
tabOrder: 30,
tabLabel: uW.g_js_strings.commonstr.knight,
cont: null,
displayTimer: null,
action: 0,
init: function (div) {
var t = Tabs.Knights;
t.cont = div;
uW.ptAssignSkill = t.clickedAssignPoints;
uW.ptAssignTunes = t.clickedAssignTune;
uW.ptButDismiss = t.postDismissKnight;
t.cont.innerHTML = '<STYLE>table.ptTabPad tr.ptwpad {background-color:#ffffff; padding-left:15px}</style>\
<DIV id=ptknightdiv style="max-height:736px; height:736px; max-width:745px; width:745px; overflow-y:auto">';
},
hide: function () {
var t = Tabs.Knights;
clearTimeout(t.displayTimer);
},
show: function () {
var t = Tabs.Knights;
clearTimeout(t.displayTimer);
function _dispKnight(roleId, knight, numcid) {
var rid = roleId;
if (roleId == null)
rid = 1;
var sty = '';
if (row++ % 2)
sty = 'class=ptOddrow ';
m = '<TR ' + sty + 'valign=top align=right><TD><B>' + (roleId == null ? '' : knightRoles[rid][0]) + '</b></td><TD align=left>';
if (knight == null) {
m += '--------</td><TD colspan=4></td><TD class=ptentry colspan=5></td><TD colspan=2></td></tr>';
} else {
var level = parseInt(Math.sqrt(parseInt(knight.experience) / 75)) + 1;
var unpoints = level - parseInt(knight.skillPointsApplied);
var salary = (parseInt(knight.skillPointsApplied) + 1) * 20;
totSalary += salary;
var ass = '';
if (knight.knightStatus == 10) {
ass = '<TD class=ptentry align=left colspan=4>Marching</td>';
} else {
if (unpoints > 0) {
unpoints = '<SPAN class="boldRed">' + unpoints + '</span>';
for (var i = 0; i < 4; i++) {
var sty = 'padding-left:1px;';
if (i == rid) // bold it
sty += 'font-weight:bold;color:#116654';
if (t.action == 2) {
t.clickedAssignPoints(null, cid, knight.knightId, i);
}
if (t.action == 1) {
t.clickedAssignPoints(null, cid, knight.knightId, 1);
}
ass += '<td class="ptentry" align="left" style="' + sty + '">';
if (knight[knightRoles[i][1]] < 300) {
ass += '<a title="' + uW.g_js_strings.modaltitles.assignskills + '" style="' + sty + '" onclick="ptAssignSkill(this,' + cid + ',' + knight.knightId + ',' + i + ')">[' + knightRoles[i][2] + ']</a>';
} else {
ass += '<span style="color: #006600; font-size: 10px; font-weight: normal;">(max)</span>';
}
ass += '</td>';
}
} else
ass = '<TD class=ptentry colspan=4></td>';
}
var skills = [];
for (var i = 0; i < 4; i++) {
if (i == rid)
skills[i] = '<B>' + knight[knightRoles[i][1]] + '</b>';
else
skills[i] = knight[knightRoles[i][1]];
}
var item211 = "0";
var item221 = "0";
var item231 = "0";
var item241 = "0";
if (Seed.items.i211) item211 = '<a onclick="citysel_click(document.getElementById(\'citysel_' + (numcid + 1) + '\'));setTimeout (function (){ boost_modal(1,' + knight.knightId + ');return false;}, 500);">' + Seed.items.i211 + '</a>';
if (Seed.items.i221) item221 = '<a onclick="citysel_click(document.getElementById(\'citysel_' + (numcid + 1) + '\'));setTimeout (function (){ boost_modal(2,' + knight.knightId + ');return false;}, 500);">' + Seed.items.i221 + '</a>';
if (Seed.items.i231) item231 = '<a onclick="citysel_click(document.getElementById(\'citysel_' + (numcid + 1) + '\'));setTimeout (function (){ boost_modal(3,' + knight.knightId + ');return false;}, 500);">' + Seed.items.i231 + '</a>';
if (Seed.items.i241) item241 = '<a onclick="citysel_click(document.getElementById(\'citysel_' + (numcid + 1) + '\'));setTimeout (function (){ boost_modal(4,' + knight.knightId + ');return false;}, 500);">' + Seed.items.i241 + '</a>';
m += '<a title="Assigner un role" onclick="citysel_click(document.getElementById(\'citysel_' + (numcid + 1) + '\'));setTimeout (function (){ assign_role_modal(' + knight.knightId + ');return false;}, 500);">' + knight.knightName + '</td><TD>' + strButton14('Dismiss', 'onclick="ptButDismiss(' + knight.knightId + ',' + cid + ')" id=tileId_') + '</td><TD>' + skills[0] + ' (' + item211 + ')</td><TD>' + skills[1] + ' (' + item221 + ')</td><TD>' + skills[2] + ' (' + item231 + ')</td><TD>' + skills[3] + ' (' + item241 + ')</td><TD class=ptentry>' + unpoints + '</td>' + ass + '<TD><a title="EXP Boost" onclick="citysel_click(document.getElementById(\'citysel_' + (numcid + 1) + '\'));setTimeout (function (){ xpBoost_modal(' + knight.knightId + ');return false; }, 500);">' + level + '</a></td><td><a onclick="citysel_click(document.getElementById(\'citysel_' + (numcid + 1) + '\'));setTimeout (function (){ loyalBoost_modal(' + knight.knightId + ');return false;}, 500);">' + knight.loyalty + '</a></td><TD>' + addCommas(salary) + '</td></tr>';
}
return m;
}
var totSalary = 0;
var m = '<TABLE cellspacing=0 align=center class=ptTabPad><TBODY>';
m += '<TR><TD colspan=15><DIV class=ptstat>Knight Assign Methods - <input style="height:20px;font-size:9px;" type=button value="Add Default Skill" id="ptknight_def"><input style="height:20px;font-size:9px;" type=button value="Add Combat Skill" id="ptknight_com"></div></td></tr>';
for (var c = 0; c < Cities.numCities; c++) {
var cid = Cities.cities[c].id;
m += '<TR><TD colspan=15><DIV class=ptstat>' + Cities.cities[c].name + '</div></td></tr>\
<TR class=ptwpad style="font-weight:bold" align=right><TD width=70>Role</td><TD width=140 align=center>Name</td><TD widith=70>Dismiss</td><TD width=26>Pol</td><TD width=26>Com</td>\
<TD width=26>Int</td><TD width=26>Res</td><TD width=90 align=center colspan=5>--- Unassigned ---</td><TD width=35>Level</td><td>Loyalty</td><TD width=40 align=right> Salary </td></tr>';
totSalary = 0;
var did = {};
var row = 0;
for (var i = 0; i < knightRoles.length; i++) {
var leader = Seed.leaders['city' + cid][knightRoles[i][1] + 'KnightId'];
if (leader == 0)
m += _dispKnight(i, null, c);
else {
m += _dispKnight(i, Seed.knights['city' + cid]['knt' + leader], c);
did['knt' + leader] = true;
}
}
var list = [];
for (k in Seed.knights['city' + cid]) {
if (!did[k])
list.push(Seed.knights['city' + cid][k]);
}
list.sort(function (a, b) {
return parseInt(b.combat) - parseInt(a.combat)
});
for (i = 0; i < list.length; i++)
m += _dispKnight(null, list[i], c, cid);
m += '<TR align=right><TD colspan=13><B>Total Salary:</b></td><TD>' + addCommas(totSalary) + '</td></tr>';
}
document.getElementById('ptknightdiv').innerHTML = m + '</tbody></table></div>';
t.action = 0;
document.getElementById('ptknight_com').addEventListener('click', function () {
t.action = 1;
t.show();
}, false);
document.getElementById('ptknight_def').addEventListener('click', function () {
t.action = 2;
t.show();
}, false);
t.displayTimer = setTimeout(t.show, 10000);
},
postDismissKnight: function (kid, cid) {
var t = Tabs.Knights;
var params = uW.Object.clone(uW.g_ajaxparams);
params.cid = cid;
params.kid = kid;
new MyAjaxRequest(uW.g_ajaxpath + "ajax/fireKnight.php" + uW.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (rslt) {
if (rslt.ok) {
if (rslt.updateSeed) {
delete Seed.knights["city" + cid]["knt" + kid];
if (rslt.updateSeed) {
uW.update_seed(rslt.updateSeed)
}
t.show();
}
}
},
onFailure: function () {},
});
},
clickedAssignPoints: function (e, cid, kid, rid) {
var t = Tabs.Knights;
clearTimeout(t.displayTimer);
var knight = Seed.knights['city' + cid]['knt' + kid];
if (knight.knightStatus == 10 && e != null) {
var row = e.parentNode.parentNode;
row.childNodes[7].innerHTML = 'Marching';
return;
}
sk = [];
var unassigned = parseInt(Math.sqrt(parseInt(knight.experience) / 75)) + 1 - parseInt(knight.skillPointsApplied);
for (var i = 0; i < 4; i++) {
sk[i] = parseInt(knight[knightRoles[i][1]]);
if (i == rid)
sk[i] += unassigned;
if (sk[i] > 300) {
sk[i] = 300;
unassigned = parseInt(300 - parseInt(knight[knightRoles[i][1]]));
}
}
if (unassigned == 0) return;
if (e != null) {
var row = e.parentNode.parentNode;
for (i = row.cells.length - 1; i >= 1; i--)
row.deleteCell(i);
var newCell = row.insertCell(-1);
newCell.colSpan = 12;
newCell.align = 'left';
newCell.style.padding = '1px 5px 1px 10px';
var div = document.createElement('div');
div.style.backgroundColor = '#ffffff';
div.style.textAlign = 'center';
div.style.border = '1px solid';
div.style.width = '98%';
div.style.whiteSpace = 'normal';
newCell.appendChild(div);
div.innerHTML = 'Assigning ' + unassigned + ' skill points to ' + knightRoles[rid][1] + ' ... ';
}
t.postSkillPoints(cid, kid, sk[0], sk[1], sk[2], sk[3], function (r) {
t.postDone(r, div)
});
},
postDone: function (rslt, div) {
var t = Tabs.Knights;
clearTimeout(t.displayTimer);
if (rslt.ok) {
div.innerHTML += '<B>Done.</b>';
t.displayTimer = setTimeout(t.show, 5000);
} else {
div.innerHTML += '<BR><SPAN class=boldRed>ERROR: ' + rslt.errorMsg + '</span>';
t.displayTimer = setTimeout(t.show, 10000);
}
},
postSkillPoints: function (cid, kid, pol, com, int, res, notify) {
var params = uW.Object.clone(uW.g_ajaxparams);
params.cid = cid;
params.kid = kid;
params.p = pol;
params.c = com;
params.i = int;
params.r = res;
if (DISABLE_POST_KNIGHT_SKILLS) {
setTimeout (function (){notify({ok:true})}, 1500);
// setTimeout ( function (){notify({ok:false, errorMsg:"FAKE ERROR message, a long one, to test how it will fit and overflow! Perhaps you'll need to retry?"})} , 2000);
return;
}
new MyAjaxRequest(uW.g_ajaxpath + "ajax/skillupKnight.php" + uW.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (rslt) {
if (rslt.ok) {
var knight = Seed.knights["city" + cid]["knt" + kid];
var up = pol + com + int + res - knight.politics - knight.combat - knight.intelligence - knight.resourcefulness;
knight.politics = pol;
knight.combat = com;
knight.intelligence = int;
knight.resourcefulness = res;
knight.skillPointsApplied = (parseInt(knight.skillPointsApplied) + up).toString();
}
if (notify)
notify(rslt);
},
onFailure: function () {
if (notify)
notify(rslt);
},
});
},
};
/**************/
var towho = {
mmFunc: null,
init: function () {
t = towho;
t.mmFunc = new CalterUwFunc('cm.messageController.messageWide', [
[/params\.subject\s*=\s*..".modal_msg_write_subj".\.val.../im, 'params.subject = cm.messageController.escape\(allianceall?"{"+g_js_strings.commonstr.alliance+"}"+document.getElementById(\'modal_msg_write_subj\').value:"{"+g_js_strings.commonstr.officers+"}"+document.getElementById(\'modal_msg_write_subj\').value\);'],
[/\$\("#modal_msg_write_to/im, 'jQuery("#modal_msg_write_to']
]);
t.mmFunc.setEnable(true);
}
}
var messageNav = {
mmFunc: null,
mmsFunc: null,
init: function () {
t = messageNav;
t.mmFunc = new CalterUwFunc ('modal_messages', [[/}\s*$/, 'setTimeout(messageNav_hook,0); }']]);
t.mmsFunc = new CalterUwFunc ('modal_messages_send', [[/{\s*var params/i, '{\nif (modal_messages_send_hook()) return;\nvar params']]);
uW.messageNav_hook = messageNav.hook;
uW.modal_messages_send_hook = messageNav.msgSendHook;
// t.mmFunc.setEnable (true);
// t.mmsFunc.setEnable (true);
},
setEnable : function (tf){
},
isAvailable: function () {
t = messageNav;
//return t.mmFunc.isAvailable();
return false;
},
hook: function () {
if (!Options.enhanceMsging)
return;
var div = document.getElementById('modal_msg_view_actions');
var but = makeButton20('Forward');
div.appendChild(but);
but.addEventListener('click', messageNav.eventForward, false);
div = document.getElementById('modal_msg_write_to').parentNode;
div.innerHTML = '<TABLE><TR><TD class=xtab><b>To:</b> <INPUT type=text id=modal_msg_write_to></td><TD class=xtab><SPAN id=ptfwdbut></span></td></tr></table>';
var button = makeButton20('All Officers');
document.getElementById('ptfwdbut').appendChild(button);
button.addEventListener('click', function () {
document.getElementById("modal_msg_write_to").value = "<officers>"
}, false);
},
eventForward: function () {
document.getElementById('modal_msg_write_subj').value = "fwd: " + document.getElementById('modal_msg_view_subj').innerHTML.toString().stripTags();
document.getElementById('modal_msg_write_to').value = '';
var from = document.getElementById('modal_msg_view_from').children[0].innerHTML;
var body = document.getElementById('modal_msg_view_body').innerHTML.replace(/\n/g, '').replace(/<br>/gi, '\n').stripTags().replace(/back$/i, '');
document.getElementById('modal_msg_write_txt').value = '[Original message from ' + from + ' follows:]\n' + body;
uW.modal_messages_compose();
},
msgSendHook: function () {
if (!Options.enhanceMsging)
return;
var to = document.getElementById("modal_msg_write_to").value.trim();
if (to.toLowerCase() != '<officers>' || getMyAlliance()[0] == 0)
return false;
var params = uW.Object.clone(uW.g_ajaxparams);
params.toIds = getMyAlliance()[0];
params.subject = document.getElementById("modal_msg_write_subj").value + ' [Sent to all officers]';
params.message = document.getElementById("modal_msg_write_txt").value;
params.type = 'alliance';
new AjaxRequest(uW.g_ajaxpath + "ajax/sendMessage.php" + uW.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (message) {
var rslt = eval("(" + message.responseText + ")");
if (rslt.ok) {
uW.Modal.showAlert(uW.g_js_strings.modal_messages_send.msgsent);
document.getElementById('modal_msg_write_to').value = "";
document.getElementById('modal_msg_write_subj').value = "";
document.getElementById('modal_msg_write_txt').value = ""
} else {
uW.Modal.showAlert(uW.g_js_strings.modal_messages_send.enterexistingname)
}
},
onFailure: function () {
uW.Modal.showAlert(uW.g_js_strings.modal_messages_send.oopscompose)
},
});
return true;
},
}
var AttackDialog = {
init: function () {
var t = AttackDialog;
t.modal_attackFunc = new CalterUwFunc ('modal_attack', [[/}\s*$/, '; attackDialog_hook(); }']]);
uW.attackDialog_hook = t.modalAttackHook;
t.modal_attackFunc.setEnable(true);
},
setEnable : function (){
},
isKnightSelectAvailable: function () {
var t = AttackDialog;
return t.modal_attackFunc.isAvailable();
},
isAttackCityPickerAvailable: function () {
var t = AttackDialog;
return t.modal_attackFunc.isAvailable();
},
modalAttackHook: function () {
var t = AttackDialog;
if (Options.fixKnightSelect || Options.attackCityPicker) {
for (var i = 1; i < 6; i++)
document.getElementById('modal_attack_tab_' + i).addEventListener('click', t.e_changeMarchType, false);
}
if (Options.attackCityPicker) {
setTimeout(t.initCityPicker, 0);
}
},
initCityPicker: function () {
var t = AttackDialog;
var div = document.getElementById('modal_attack_target_numflag'); // as of KofC version 96;
var mySpan;
if (div) {
div.parentNode.innerHTML += ' <SPAN id=modal_attack_citybuts></span>';
} else {
var span = document.getElementById('modal_attack_target_coords'); // KofC version 116+;
span.parentNode.parentNode.firstChild.innerHTML += ' <SPAN id=modal_attack_citybuts></span>';
}
new CdispCityPicker('ptatp', document.getElementById('modal_attack_citybuts'), false, t.e_CityButton);
var cityIdx = Cities.byID[uW.currentcityid].idx;
thisCityBut = document.getElementById('ptatp_' + cityIdx);
thisCityBut.style.opacity = '0.5';
thisCityBut.disabled = true;
if (document.getElementById('modal_attack_tab_4').className == 'selected' || document.getElementById('modal_attack_tab_3').className == 'selected') // don't do for attack or scout
document.getElementById('modal_attack_citybuts').style.display = 'none';
},
e_CityButton: function (city) {
document.getElementById('modal_attack_target_coords_x').value = city.x;
document.getElementById('modal_attack_target_coords_y').value = city.y;
uW.modal_attack_update_time();
},
e_changeMarchType: function (evt) {
var t = AttackDialog;
var marchType = parseInt(evt.target.id.substr(17));
if (Options.attackCityPicker) {
if (marchType == 3 || marchType == 4)
document.getElementById('modal_attack_citybuts').style.display = 'none';
else
document.getElementById('modal_attack_citybuts').style.display = 'inline';
}
if (Options.fixKnightSelect) {
var knightVal = 0;
var selector = document.getElementById('modal_attack_knight');
if (selector.length > 1 && (marchType == 4 || marchType == 2)) // if 'attack' or 'reinforce'
knightVal = 1;
selector.selectedIndex = knightVal;
}
},
}
var DispReport = {
init: function () {
var t = DispReport;
t.modal_InboxFunc = new CalterUwFunc ('modal_messages_listshow', [['msghtml.join("");', 'msghtml.join("");dispInbox_hook(rslt,boxType,msghtml);']]);
uW.dispInbox_hook = t.ModalInboxHook;
t.modal_InboxFunc.setEnable(Options.enhancedinbox);
t.modal_RptFunc = new CalterUwFunc ('Messages.handleListReports', [['n.join("");', 'n.join("");dispRpt_hook(l,n);']]);
uW.dispRpt_hook = t.ModalReportListHook;
t.modal_RptFunc.setEnable(Options.enhancedinbox);
},
setEnable: function (tf) {
var t = DispReport;
t.modal_InboxFunc.setEnable(tf);
},
isDispReportAvailable: function () {
var t = DispReport;
return t.modal_InboxFunc.isAvailable();
},
ModalInboxHook: function (rslt, boxType, msghtml) {
var t = DispReport;
if (boxType == 'inbox') {
msgBody = document.getElementById('modal_msg_list');
var a = document.createElement('a');
a.className = 'buttonDown20';
a.innerHTML = '<span>Delete Gift Report</span>';
a.style.float = 'left';
a.addEventListener('click', t.checkinbox, false);
var div = document.createElement('span');
div.appendChild(a);
msgBody.appendChild(div);
var mml = document.getElementById('modal_msg_list');
if (mml != null)
mml.style.minHeight = '400px';
}
},
checkinbox: function () {
var t = DispReport;
var body = document.getElementById('tbl_messages');
var trs = body.getElementsByTagName('tr');
var reports = [];
for (var i = 0; i < trs.length; i++) {
var tds = trs[i].getElementsByTagName('td');
for (var j = 0; j < tds.length; j++) {
if (tds[j].className == 'chkcol') {
var checkbox = tds[j];
}
if (tds[j].className == 'nmcol') {
var sender = tds[j];
}
if (tds[j].className == 'subjcol') {
var subject = tds[j];
}
}
reports.push({
checkbox: checkbox,
sender: sender,
subject: subject
});
}
t.parseGiftReport(reports);
},
parseGiftReport: function (rpts) {
var t = DispReport;
for (var i = 0; i < rpts.length; i++) {
// logit(inspect(rpts[i].subject));
// logit(inspect(rpts[i].sender));
if ((rpts[i].subject.innerHTML.indexOf('¡Nuevo regalo recibido!') >= 0 || rpts[i].subject.innerHTML.indexOf('New Gift Received!') >= 0) && rpts[i].sender.innerHTML.indexOf('Kingdoms Of Camelot') >= 0) {
rpts[i].checkbox.firstChild.checked = true;
}
}
uW.messages_action("delete", "tbl_messages");
},
ModalReportListHook: function (rslt, msghtml) {
var t = DispReport;
unsafeWindow.makeReportLink = makeReportLink;
unsafeWindow.makeReportPopup = makeReportPopup;
if (rslt.ok) {
msgBody = document.getElementById('modal_msg_reports_tablediv');
var a = document.createElement('a');
a.className = 'buttonDown20';
a.innerHTML = '<span>Delete Wild/Barb/Transport</span>';
a.style.float = 'left';
a.addEventListener('click', t.checkreportlist, false);
var div = document.createElement('span');
div.appendChild(a);
msgBody.appendChild(div);
var mml = document.getElementById('modal_msg_list');
if (mml != null) mml.style.minHeight = '400px';
var trs = msgBody.getElementsByTagName('tr');
for (var i = 0; i < trs.length; i++) {
var tds = trs[i].getElementsByTagName('td');
for (var j = 0; j < tds.length; j++) {
if (tds[j].className == 'subjcol') {
var original = tds[j].innerHTML;
original = original.replace("<div>", "");
original = original.replace("</div>", "");
var popup = original.replace("View Report", "Pop-up");
popup = popup.replace("View", "Pop-up");
popup = popup.replace("Messages.viewMarchReport", "makeReportPopup");
var makelink = original.replace("View Report", "Link");
makelink = makelink.replace("View", "Link to FB <a href='https://apps.facebook.com/kocreportview/' target='_blank'><img style='vertical-align:text-top;' width=16 src='http://nicodebelder.eu/favicon.ico'></a>");
makelink = makelink.replace("Messages.viewMarchReport", "makeReportLink");
var newContent = original + " | " + popup + " | " + makelink;
tds[j].innerHTML = "<DIV>" + newContent + "</div>";
}
}
}
}
},
checkreportlist: function () {
var t = DispReport;
var body = document.getElementById('modal_msg_reports_tablediv');
var trs = body.getElementsByTagName('tr');
var reports = [];
for (var i = 0; i < trs.length; i++) {
var tds = trs[i].getElementsByTagName('td');
for (var j = 0; j < tds.length; j++) {
if (tds[j].className == 'chkcol') {
var checkbox = tds[j];
}
if (tds[j].className == 'nmcol') {
var type = tds[j];
}
if (tds[j].className == 'subjcol') {
var view = tds[j];
}
}
reports.push({
checkbox: checkbox,
type: type,
view: view
});
}
t.parseBarbReport(reports);
},
parseBarbReport: function (rpts) {
var t = DispReport;
//Messages.viewMarchReport("25175",1,51,7,0,"Enemy","0","oftheNOOBS","M",4,518,355,1349852870,1,517,346,0,1550996);return false;
// var regex = /Messages.viewMarchReport\((["0-9]+),(["0-9]+),(["0-9]+),(["0-9]+),(["0-9]+),("[^"]+"),("[^"]+"),("[^"]+"),("[^"]+"),(["0-9]+),(["0-9]+),(["0-9]+),(["0-9]+),(["0-9]+),(["0-9]+),(["0-9]+),(["0-9]+),(["0-9]+)\)/;
var regex = /Messages.viewMarchReport\(([^"]+),([0-9]+),([0-9]+),([0-9]+),([0-9]+),([^"]+),([^"]+),([^"]+),([^"]+),([0-9]+),([0-9]+),([0-9]+),([0-9]+),([0-9]+),([0-9]+),([0-9]+),([0-9]+),([0-9]+)/;
for (var i = 0; i < rpts.length; i++) {
var m = regex.exec(rpts[i].view.innerHTML);
if (m) {
if (m[6] == m[8] && m[7] == m[9]) { //Source and target id the same.
// continue; //Infer transport to self
} else if (m[5] != 0) {
continue;
}
rpts[i].checkbox.firstChild.checked = true;
}
}
uW.Messages.deleteCheckedReports();
}
}
function makeReportLink(rptid, side, tiletype, tilelv, defid, defnm, defgen, atknm, atkgen, marchtype, xcoord, ycoord, timestamp, unread, atkxcoord, atkycoord, side0AllianceName, side1AllianceName, link) {
var domain = GetServerId();
var params = unsafeWindow.Object.clone(unsafeWindow.g_ajaxparams);
var Sversion = "";
var tvuid = parseInt(unsafeWindow.tvuid);
params.rid = rptid;
if (tiletype != 999) params.side = side;
new AsyncAjaxRequest(unsafeWindow.g_ajaxpath + "ajax/fetchReport.php" + unsafeWindow.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (transport) {
var rslt = eval("(" + transport.responseText + ")");
if (rslt.ok == false) {
alert(rslt.msg);
return;
}
if (!rslt.error) {
if (typeof GM_getMetadata !== "undefined") Sversion = JSON.stringify(GM_getMetadata("version", true));
if (typeof GM_info !== "undefined") Sversion = JSON.stringify(GM_info.script.version);
var url = '//apps.facebook.com/kocreportview/putData.php?Sname=' + JSON.stringify(SourceName) + '&Sversion=' + Sversion + '&domain=' + domain + '&reportUnixTime=' + timestamp + '&tvuid=' + tvuid + '&side0Player=' + defnm + '&side1Player=' + atknm + '&marchType=' + marchtype + '&tileType=' + tiletype + '&report=' + JSON.stringify(rslt);
window.open(url, '_blank');
} else alert('kabam is having issues with reports...');
},
onFailure: function () {
alert('kabam is having issues with reports...');
},
}, false);
}
function makeReportPopup(rptid, side, tiletype, tilelv, defid, defnm, defgen, atknm, atkgen, marchtype, xcoord, ycoord, timestamp, unread, atkxcoord, atkycoord, side0AllianceName, side1AllianceName, link) {
Rpt.FindReport(rptid, 0);
}
var AllianceReports = {
checkPeriod: 300,
allianceNames: [],
saveArfunc: uW.allianceReports,
init: function () {
t = AllianceReports;
t.enable(Options.enhanceARpts);
t.marvFunc = new CalterUwFunc ('modal_alliance_report_view', [['getReportDisplay', 'getReportDisplay_hook2']]);
t.memListFunc = new CalterUwFunc ('membersInfo', [['commonstr.might','commonstr.might + "</td><td class=colcities>" + g_js_strings.commonstr.cities + "</td><td class=collast>" + g_js_strings.membersInfo.lastonline'],['memberInfo[key].prestige\)', 'memberInfo[key].prestige)+ "</td>");memhtml.push("<td class=colcities>" + memberInfo[key].cities + "</td>");memhtml.push("<td class=collast>" + memberInfo[key].lastLogin']]);
uW.getReportDisplay_hook2 = t.getReportDisplayHook;
uW.getmembersInfo_hook = t.getMembersInfoHook;
t.marvFunc.setEnable(true);
t.enable_viewmembers(Options.enhanceViewMembers);
},
getReportDisplayHook: function (a, b) {
var x = '';
try {
x = uW.getReportDisplay(a, b);
} catch (e) {
x = 'Error formatting report: ' + e;
}
return x;
},
enable_viewmembers: function (tf) {
t = AllianceReports;
t.memListFunc.setEnable(tf);
},
enable: function (tf) {
t = AllianceReports;
if (tf)
uW.allianceReports = t.myAllianceReports;
else
uW.allianceReports = t.saveArfunc;
},
myAllianceReports: function (pageNum) {
var params = uW.Object.clone(uW.g_ajaxparams);
if (pageNum)
params.pageNo = pageNum;
params.group = "a";
new MyAjaxRequest(uW.g_ajaxpath + "ajax/listReports.php" + uW.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (rslt) {
//logit (inspect (rslt, 1, 1));
displayReports(rslt.arReports, rslt.arPlayerNames, rslt.arAllianceNames, rslt.arCityNames, rslt.totalPages);
},
onFailure: function (rslt) {},
}, false);
function displayReports(ar, playerNames, allianceNames, cityNames, totalPages) {
var msg = new Array();
var myAllianceId = getMyAlliance()[0];
msg.push("<STYLE>.msgviewtable tbody .myCol div {margin-left:5px; overflow:hidden; white-space:nowrap; color:#000}\
.msgviewtable tbody .myHostile div {font-weight:600; color:#600}\
.msgviewtable tbody .myGray div {color:#666}\
.msgviewtable tbody .myRein div {color:#050}\
.msgviewtable tbody .myWarn div {font-weight:600; color:#442200}\
</style>");
msg.push("<div class='modal_msg_reports'>");
var rptkeys = uW.Object.keys(ar);
if (matTypeof(ar) != 'array') {
//logit ('displayReports: '+ Options.allowAlterAR);
if (Options.allowAlterAR)
msg.push("<div id='modal_alliance_reports_tablediv' class='modal_msg_list'><table width=675 cellpadding='0' cellspacing='0' class='msgviewtable reportviewtable alliancetable'>");
else
msg.push("<div id='modal_alliance_reports_tabledivNKA' class='modal_msg_list'><table width=675 cellpadding='0' cellspacing='0' class='msgviewtable reportviewtable alliancetable'>");
msg.push("<thead><tr><td width=105>Date</td><td width=40>Type</td><td width=150>Attacker</td><td>Target</td><td>View</td></tr></thead><tbody>");
for (var i = 0; i < rptkeys.length; i++) {
var rpt = ar[rptkeys[i]];
var colClass = '"myCol"';
rpt.marchType = parseInt(rpt.marchType);
rpt.side0AllianceId = parseInt(rpt.side0AllianceId);
var targetDiplomacy = getDiplomacy(rpt.side0AllianceId);
if (rpt.marchType == 2) {
colClass = '"myCol myRein"';
} else if (rpt.side1AllianceId != myAllianceId) {
colClass = '"myCol myHostile"';
} else {
if (parseInt(rpt.side0TileType) < 50) { // if wild
if (parseInt(rpt.side0PlayerId) == 0)
colClass = '"myCol myGray"';
else
colClass = '"myCol myWarn"';
} else if (parseInt(rpt.side0PlayerId) == 0) { // barb
colClass = '"myCol myGray"';
} else {
if (targetDiplomacy == 'friendly')
colClass = '"myCol myWarn"';
}
}
//logit (inspect (ar, 3, 1));
msg.push('<tr valign=top');
if (i % 2 == 0)
msg.push(" class=stripe");
msg.push("><TD class=" + colClass + "><div>");
msg.push(uW.formatDateByUnixTime(rpt.reportUnixTime));
msg.push('<BR>Rpt ');
msg.push("<a onclick='FindReport(" + rpt.reportId + ",0);return false;'>#" + rpt.reportId + "</a>");
msg.push("</div></td><TD class=" + colClass + "><div>");
if (rpt.marchType == 1)
msg.push(uW.g_js_strings.commonstr.transport);
else if (rpt.marchType == 3)
msg.push(uW.g_js_strings.commonstr.scout);
else if (rpt.marchType == 2)
msg.push('Reinf');
else
msg.push(uW.g_js_strings.commonstr.attack);
// attacker ...
msg.push("</div></td><TD class=" + colClass + "><div>");
if (parseInt(rpt.side1PlayerId) != 0)
msg.push(escape(playerNames["p" + rpt.side1PlayerId]))
else
msg.push('?Unknown?');
msg.push(' ');
msg.push(coordLink(rpt.side1XCoord, rpt.side1YCoord));
msg.push('<BR>');
if (rpt.side1AllianceId != myAllianceId) {
msg.push(allianceNames['a' + rpt.side1AllianceId]);
msg.push(' (');
msg.push(getDiplomacy(rpt.side1AllianceId));
msg.push(')');
} else {
msg.push('<BR>');
}
msg.push('</div></td>');
// target ...
msg.push("<TD class=" + colClass + "><DIV>");
var type = parseInt(rpt.side0TileType);
if (type < 50) { // wild
msg.push(uW.g_mapObject.types[type].toString().capitalize());
msg.push(" Lvl " + rpt.side0TileLevel)
if (parseInt(rpt.side0PlayerId) != 0) { // IF OWNED, show owner ...
msg.push(' [');
msg.push(escape(playerNames["p" + rpt.side0PlayerId]));
msg.push('] ');
}
} else {
if (parseInt(rpt.side0PlayerId) == 0) { // barb
msg.push(uW.g_js_strings.commonstr.barbariancamp);
msg.push(" Lvl " + rpt.side0TileLevel)
} else { // city
msg.push(escape(playerNames["p" + rpt.side0PlayerId]));
msg.push(' - ');
msg.push(cityNames['c' + rpt.side0CityId]);
}
}
msg.push(' ');
msg.push(coordLink(rpt.side0XCoord, rpt.side0YCoord));
if (rpt.side0AllianceId != 0 && rpt.side0AllianceId != myAllianceId) {
msg.push('<BR>');
msg.push(allianceNames['a' + rpt.side0AllianceId]);
msg.push(' (');
msg.push(targetDiplomacy);
msg.push(')');
}
/***
MY reports, reins works ...
<div><a href="#" onclick="jQuery('#modal_msg_body').trigger('viewReinforcedReport', ['6076798','67674','Elroy','IV','13412958','Duke_Swan','6329','Erisvil',662,477]);return false;">View Report</a></div>
OK: <a onclick=" $("modal_alliance_reports_tabledivNKA").id="modal_alliance_reports_tablediv"; modal_alliance_report_view("6044155",0,51,9,2282354,"Jetson","M","Joe7z6bq","M",4,668,437,1299747584,0,643,407);return false;">View</a></div>
ERROR (Reinf): <a onclick=" $("modal_alliance_reports_tabledivNKA").id="modal_alliance_reports_tablediv"; modal_alliance_report_view("6043602",1,51,9,13487684,"Fred8135i","M","Jetson","M",2,188,696,1299746211,0,23,518);return false;">View</a>
modal_alliance_report_view("6043602",1,51,9,13487684,"Fred8135i","M","Jetson","M",2,188,696,1299746211,0,23,518);return false;'>View</a>
modal_alliance_report_view("6043602",1,51,9,13487684,"Fred8135i","M","Jetson","M",2,188,696,1299746211,0,23,518);return false;">View Report</a></div>
modal_alliance_report_view("6043602",1,51,9,13487684,"Fred8135i","M","Jetson","M",2,188,696,1299746211,0,23,518);return false;">View Report</a></div>
***/
// 'view report' link ...
if (rpt.marchType != 2) {
if (Options.allowAlterAR)
msg.push("</div></td><TD class=" + colClass + "><div><a onclick=' modal_alliance_report_view(\""); // ONCLICK ???
else
msg.push("</div></td><TD class=" + colClass + "><div><a onclick=' $(\"modal_alliance_reports_tabledivNKA\").id=\"modal_alliance_reports_tablediv\"; modal_alliance_report_view(\""); // ONCLICK ???
msg.push(rpt.reportId);
msg.push('",');
if (parseInt(rpt.side1AllianceId) == parseInt(Seed.allianceDiplomacies.allianceId))
msg.push(1);
else
msg.push(0);
msg.push(",");
msg.push(rpt.side0TileType);
msg.push(",");
msg.push(rpt.side0TileLevel);
msg.push(",");
msg.push(rpt.side0PlayerId);
msg.push(',"');
if (parseInt(rpt.side0PlayerId) != 0)
msg.push(escape(playerNames["p" + rpt.side0PlayerId]));
else
msg.push(uW.g_js_strings.commonstr.enemy);
msg.push('","');
if (parseInt(rpt.side0PlayerId) != 0)
msg.push(escape(playerNames["g" + rpt.side0PlayerId]));
else
msg.push(0)
msg.push('","');
if (parseInt(rpt.side1PlayerId) > 0)
msg.push(escape(playerNames["p" + rpt.side1PlayerId]));
msg.push('","');
if (parseInt(rpt.side1PlayerId) != 0)
msg.push(escape(playerNames["g" + rpt.side1PlayerId]));
msg.push('",');
msg.push(rpt.marchType);
msg.push(",");
msg.push(rpt.side0XCoord);
msg.push(",");
msg.push(rpt.side0YCoord);
msg.push(",");
msg.push(rpt.reportUnixTime);
msg.push(",");
if (parseInt(rpt.reportStatus) == 2)
msg.push(1);
else
msg.push(0);
if (rpt.side1XCoord) {
msg.push(",");
msg.push(rpt.side1XCoord);
msg.push(",");
msg.push(rpt.side1YCoord)
} else {
msg.push(",,");
}
msg.push(");return false;'>View</a></div></td></tr>");
} else {
// reinforcement!!
msg.push("</div></td><TD class=" + colClass + "><div><a onclick='FindReport(\""); // ONCLICK ???
msg.push(rpt.reportId);
msg.push("\",0);return false;'>View</a></div></td></tr>");
}
}
msg.push("</tbody></table></div>");
}
msg.push("</div><div id='modal_report_list_pagination'></div>");
document.getElementById('allianceContent').innerHTML = msg.join("");
if (pageNum) {
uW.ctrlPagination("modal_report_list_pagination", totalPages, "allianceReports", pageNum)
} else {
uW.ctrlPagination("modal_report_list_pagination", totalPages, "allianceReports")
}
}
},
} // end AllianceReports singleton
unsafeWindow.FindReport = Rpt.FindReport;
/************************ Food Alerts *************************/
/*
var FoodAlerts = {
init : function (){
var f = FoodAlerts;
f.e_eachMinute();
},
minuteTimer : null,
e_eachMinute : function (){
var f = FoodAlerts;
var now = unixTime();
row = [];
for(i=0; i < Cities.numCities; i++) {
var rp = getResourceProduction (Cities.cities[i].id);
var foodleft = parseInt(Seed.resources["city" + Cities.cities[i].id]['rec1'][0])/3600;
var usage = rp[1] - parseInt(Seed.resources["city" + Cities.cities[i].id]['rec1'][3]);
row[i] = rp[1] - usage;
var timeLeft = parseInt(Seed.resources["city" + Cities.cities[i].id]['rec1'][0]) / 3600 / (0-usage) * 3600;
var msg = '';
if (usage < 0) {
if (Options.enableFoodTower && timeLeft<(6*3600)) {
msg += 'My city ' + Cities.cities[i].name.substring(0,10) + ' (' +
Cities.cities[i].x +','+ Cities.cities[i].y + ')';
msg += ' is low on food. Remaining: '+addCommasWhole(foodleft)+' ('+timestrShort(timeLeft)+') Upkeep: '+addCommas(usage);
sendChat ("/a " + msg);
}
}
}
f.minuteTimer = setTimeout (f.e_eachMinute, 1800000);
},
}
*/
/************************ Tower Alerts ************************/
var TowerAlerts = {
viewImpendingFunc: null,
generateIncomingFunc: null,
fixTargetEnabled: false,
towerMarches: {}, // track all marches that have been posted to alliance chat
init: function () {
var t = TowerAlerts;
var s = GM_getValue('towerMarches_' + GetServerId());
if (s != null)
t.towerMarches = JSON2.parse(s);
t.viewImpendingFunc = new CalterUwFunc ('attack_viewimpending_view', [[/Modal.showModal\((.*)\)/im, 'Modal.showModal\($1\); ptViewImpending_hook(a);']]);
uW.ptViewImpending_hook = t.viewImpending_hook;
t.viewImpendingFunc.setEnable(true);
t.generateIncomingFunc = new CalterUwFunc ('attack_generateincoming', [[/d\s*=\s*true/i, 'd = ptGenerateIncoming_hook();']]);
uW.ptGenerateIncoming_hook = t.generateIncoming_hook;
},
// fix 'target', add button
viewImpending_hook: function (atkinc) {
var t = TowerAlerts;
var div = document.getElementById('modal_attackimpending_view');
var isFalse = false;
if (t.fixTargetEnabled) {
var city = Cities.byID[atkinc.toCityId];
var target = '';
if (!city || (atkinc.marchType != 3 && atkinc.marchType != 4)) {
target = '<B>FALSE REPORT!</b>';
isFalse = true;
} else if (city.tileId == atkinc.toTileId) {
target = city.name + ' (' + city.x + ',' + city.y + ')';
} else {
wilds = Seed.wilderness['city' + atkinc.toCityId];
m = '';
for (k in wilds) {
if (wilds[k].tileId == atkinc.toTileId) {
m = 'at ' + wilds[k].xCoord + ',' + wilds[k].yCoord;
break;
}
}
target = city.name + ', <B>WILD ' + m + '</b>';
}
div.childNodes[0].innerHTML = '<B>Target: </b>' + target;
}
if (!isFalse) {
var d = document.createElement('div');
d.innerHTML = '<BR><TABLE><TR><TD><a id=towerPostToChat class=button20><span>Post to Alliance Chat</span></a></td></tr></table>';
div.appendChild(d);
document.getElementById('towerPostToChat').addEventListener('click', function () {
t.e_buttonPostToChat(atkinc)
}, false);
}
},
// fix false reports
generateIncoming_hook: function () {
return false;
},
enableFixFalseReports: function (tf) {
var t = TowerAlerts;
t.generateIncomingFunc.setEnable(tf);
},
enableFixTarget: function (tf) {
var t = TowerAlerts;
t.fixTargetEnabled = tf;
},
isFixTargetAvailable: function () {
var t = TowerAlerts;
return t.viewImpendingFunc.isAvailable();
},
isFixFalseReportsAvailable: function () {
var t = TowerAlerts;
return t.generateIncomingFunc.isAvailable();
},
postToChatOptions: {
aChat: false
},
setPostToChatOptions: function (obj) {
var t = TowerAlerts;
t.postToChatOptions = obj;
clearTimeout(t.secondTimer);
},
e_buttonPostToChat: function (march) {
var t = TowerAlerts;
t.postToChat(march, true);
uW.Modal.hideModal();
},
postToChat: function (m, force) {
var t = TowerAlerts;
if (DEBUG_TRACE) logit("checkTower(): INCOMING at " + unixTime() + ": \n" + inspect(m, 8, 1));
if (m.marchType == null) // bogus march (returning scouts)
return;
if (ENABLE_TEST_TAB) Tabs.Test.addDiv("Incoming!<BR><PRE style='margin:0px;'>" + inspect(m, 8, 1) + '</pre>');
if (m.marchType == 3) {
if (!t.postToChatOptions.scouting && !force)
return;
atkType = 'scouted';
} else if (m.marchType == 4) {
atkType = 'attacked';
} else {
return;
}
var target, atkType, who;
var city = Cities.byID[m.toCityId];
if (city.tileId == m.toTileId)
target = 'city at ' + city.x + ',' + city.y;
else {
if (!t.postToChatOptions.wilds && !force)
return;
target = 'wilderness';
for (k in Seed.wilderness['city' + m.toCityId]) {
if (Seed.wilderness['city' + m.toCityId][k].tileId == m.toTileId) {
target += ' at ' + Seed.wilderness['city' + m.toCityId][k].xCoord + ',' + Seed.wilderness['city' + m.toCityId][k].yCoord;
break;
}
}
}
if (Seed.players['u' + m.pid])
who = Seed.players['u' + m.pid].n;
else if (m.players && m.players['u' + m.pid])
who = m.players['u' + m.pid].n;
else
who = 'Unknown';
if (m.fromXCoord)
who += ' at ' + m.fromXCoord + ',' + m.fromYCoord;
var msg = '';
if (!force)
msg = t.postToChatOptions.aPrefix + ' ';
msg += 'My ' + target + ' is being ' + atkType + ' by ' + who + '. Incoming Troops (arriving in ' +
uW.timestr(parseInt(m.arrivalTime - unixTime())) + ') : ';
var totTroops = 0;
for (k in m.unts) {
var uid = parseInt(k.substr(1));
msg += m.unts[k] + ' ' + uW.unitcost['unt' + uid][0] + ', ';
totTroops += m.unts[k];
}
if ((totTroops < t.postToChatOptions.minTroops) && !force)
return;
msg = msg.slice(0, -2);
msg += '.';
if (city.tileId == m.toTileId) {
var emb = getCityBuilding(m.toCityId, 8);
if (emb.count > 0) {
var availSlots = emb.maxLevel;
for (k in Seed.queue_atkinc) {
if (Seed.queue_atkinc[k].marchType == 2 && Seed.queue_atkinc[k].toCityId == m.toCityId && Cities.byID[Seed.queue_atkinc[k].fromCityId] == null) {
// if (Seed.queue_atkinc[k].marchType==2 && Cities.byID[Seed.queue_atkinc[k].fromCityId]==null){
--availSlots;
}
}
msg += ' My embassy has ' + availSlots + ' of ' + emb.maxLevel + ' slots available.';
}
}
if (ENABLE_TEST_TAB) Tabs.Test.addDiv(msg);
if (SEND_ALERT_AS_WHISPER)
sendChat("/" + Seed.player.name + ' ' + msg); // Whisper to myself
else
sendChat("/a " + msg); // Alliance chat
},
}
function parseIntNan(n) {
x = parseInt(n, 10);
if (isNaN(x))
return 0;
return x;
}
function parseIntZero(n) {
if (n == '')
return 0;
return parseInt(n, 10);
}
/*********************************** Players TAB ***********************************/
function officerId2String(oid) {
if (oid == null)
return '';
else if (oid == 3)
return uW.allianceOfficerTypeMapping[3];
else if (oid == 2)
return uW.allianceOfficerTypeMapping[2];
else if (oid == 1)
return uW.allianceOfficerTypeMapping[1];
else if (oid == 4)
return uW.allianceOfficerTypeMapping[4];
return '';
}
Tabs.AllianceList = {
tabOrder: 25,
tabLabel: uW.g_js_strings.commonstr.player,
cont: null,
dat: [],
clickedAlly: false,
lastLogin: 0,
warStatus: 0,
/***
ajax/viewCourt.php:
(boolean) ok = true
(array) courtItems =
(string) dailyActionFlag = 0
(object) playerInfo = [object Object]
(string) datejoinUnixTime = 1294440708
(string) truceExpireUnixTime = 0
(string) userId = 4394121
(string) displayName = Vakasade
(string) email =
(string) fbuid = 100000977751880
(string) playerSex = F
(string) usertype = 1
(string) status = 1
(string) dateJoined = 2011-01-07 14:51:48
(string) lastLogin = 2011-03-13 13:11:34
(string) eventTimestamp = 0000-00-00 00:00:00
(string) eventStatus = 1
(string) warStatus = 1
(string) allianceId = 85
(number) might = 1192710
(string) title = 57
(string) truceExpireTimestamp = 0000-00-00 00:00:00
(string) fogExpireTimestamp = 0000-00-00 00:00:00
(string) cnt_newmsg = 0
(string) cnt_friendreq = 0
(string) cnt_logins = 3910
(string) cnt_passreset = 0
(string) cnt_connections = 0
(string) avatarId = 11
(undefined) photo_host: null = null
(undefined) photo_dir: null = null
(undefined) photo_subdir: null = null
(undefined) photo_name: null = null
(string) allianceName = The Flying Circus
(number) cityCount = 2
(undefined) errorMsg: null = null
***/
fetchPlayerCourt: function (uid, notify) {
var params = uW.Object.clone(uW.g_ajaxparams);
params.pid = uid;
new MyAjaxRequest(uW.g_ajaxpath + "ajax/viewCourt.php" + uW.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (rslt) {
new Sendcourtdata(rslt);
//logit ("ajax/viewCourt.php\n"+ inspect (rslt, 3, 1));
notify(rslt);
},
onFailure: function (rslt) {
notify(rslt);
},
});
},
fetchTEST: function (pageNum, notify) { // as in alliance list, sorted by rank, 10 per page
var params = uW.Object.clone(uW.g_ajaxparams);
params.pageNo = 1;
params.numPerPage = 100;
params.perPage = 100;
params.results = 100;
params.numResults = 100;
new MyAjaxRequest(uW.g_ajaxpath + "ajax/allianceGetMembersInfo.php" + uW.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (rslt) {
logit("ajax/allianceGetMembersInfo.php:\n" + inspect(rslt, 5, 1));
notify(rslt);
},
onFailure: function (rslt) {
notify({
errorMsg: 'AJAX error'
});
},
});
},
init: function (div) {
var t = Tabs.AllianceList;
t.cont = div;
uW.PTgetMembers = t.eventGetMembers;
uW.PTPaintMembers = t.GetDataForMap;
uW.PTpd = t.clickedPlayerDetail;
uW.PTpl = t.clickedPlayerLeaderboard;
uW.PTpl2 = t.clickedPlayerLeaderboard2;
uW.PTalClickPrev = t.eventListPrev;
uW.PTalClickNext = t.eventListNext;
uW.PCplo = t.clickedPlayerGetLastLogin;
uW.PTPlayClick = t.clickedPlayerInAll;
Lastlogin = 0;
t.show();
},
hide: function () {},
show: function () {
var t = Tabs.AllianceList;
if (t.state == null) {
if (getMyAlliance()[0] == 0) {
t.cont.innerHTML = '<BR><BR><CENTER>' + uW.g_js_strings.membersInfo.youmustbelong + '</center>';
t.state = 1;
return;
}
var m = '<DIV class=ptentry><TABLE width=100% cellpadding=0>';
m += '<TD width = "100px" ; border:none"><a href="https://code.google.com/p/koc-power-tools/wiki/HowtoPlayers" target="_blank">HELP</a></td></tr>';
m += '<TR><TD class=xtab align=right></td><TD class=xtab>' + uW.g_js_strings.modal_fow_leaderboard.searchuser + ': </td>';
m += ' <TD width=80% class=xtab><INPUT id=allPlayName size=20 type=text/> ';
m += '<INPUT id=playSubmit type=submit value="' + uW.g_js_strings.modal_fow_leaderboard.finduser + '" /> <INPUT id=ffbuidsubmit type=submit value="UID" /></td>\
<TD class="xtab ptErrText"><SPAN id=ptplayErr></span></td></tr>\
<TR><TD class=xtab></td><TD class=xtab>' + uW.g_js_strings.setDiplomacyWindow.srchalli + ': </td>\
<TD class=xtab><INPUT id=allAllName type=text /> <INPUT id=allSubmit type=submit value="' + uW.g_js_strings.modal_fow_leaderboard.findalli + '" /></td>\
<TD class="xtab ptErrText"><SPAN id=ptallErr></span></td></tr>\
<TR><TD class=xtab><INPUT align=left id=allListSubmit type=submit value="' + uW.g_js_strings.commonstr.alliances + '" /></td>\
<TD class=xtab><INPUT align=right id=idMyAllSubmit type=submit value="' + getMyAlliance()[1] + '"/>\
<TD><INPUT id=pbShowFriendlies type=CHECKBOX>Show Friendlys <INPUT id=pbShowHostiles type=CHECKBOX>Show Hostiles</td>\
<TD class=xtab></td><TD class=xtab><span align=right <b>' + uW.g_js_strings.attack_generateincoming.estimatedarrival + ': </b></span>\
<div><select id="idFindETASelect">\
<option value="0,0" > -- Select -- </option>\
<option value="0,180" >' + uW.unitcost["unt1"][0] + '</option>\
<option value="0,200" > ' + uW.unitcost["unt2"][0] + ' </option>\
<option value="0,3000" > ' + uW.unitcost["unt3"][0] + ' </option>\
<option value="0,300" > ' + uW.unitcost["unt4"][0] + ' </option>\
<option value="0,275" > ' + uW.unitcost["unt5"][0] + ' </option>\
<option value="0,250" > ' + uW.unitcost["unt6"][0] + ' </option>\
<option value="1,1000" > ' + uW.unitcost["unt7"][0] + ' </option>\
<option value="1,750" > ' + uW.unitcost["unt8"][0] + ' </option>\
<option value="1,150" > ' + uW.unitcost["unt9"][0] + ' </option>\
<option value="1,100" > ' + uW.unitcost["unt10"][0] + ' </option>\
<option value="1,120" > ' + uW.unitcost["unt11"][0] + ' </option>\
<option value="1,80" > ' + uW.unitcost["unt12"][0] + ' </option>\
</select></div>\
</td></tr>\
<TR><TD colspan=5><DIV id=pbFriendlyDivs style="max-width:725px; white-space:pre-wrap"></div></td>\
<TR><TD colspan=5><DIV id=pbHostilesDivs style="max-width:725px; white-space:pre-wrap"></div></td>\
</table><span style="vertical-align:middle;" id=altInput></span></div><SPAN id=allListOut></span>';
t.cont.innerHTML = m;
document.getElementById('allPlayName').addEventListener('keypress', function (e) {
if (e.which == 13) document.getElementById('playSubmit').click();
}, false);
document.getElementById('allAllName').addEventListener('keypress', function (e) {
if (e.which == 13) document.getElementById('allSubmit').click();
}, false);
document.getElementById('pbShowFriendlies').addEventListener('change', function () {
if (this.checked) {
t.paintFriendlyDiv();
} else {
document.getElementById('pbFriendlyDivs').innerHTML = '';
}
});
document.getElementById('pbShowHostiles').addEventListener('change', function () {
if (this.checked) {
t.paintHostilesDiv();
} else {
document.getElementById('pbHostilesDivs').innerHTML = '';
}
});
document.getElementById('allSubmit').addEventListener('click', t.eventSubmit, false);
document.getElementById('playSubmit').addEventListener('click', t.eventPlayerSubmit, false);
document.getElementById('ffbuidsubmit').addEventListener('click', t.eventPlayerUIDSubmit, false);
document.getElementById('allAllName').addEventListener('focus', function () {
document.getElementById('ptallErr').innerHTML = '';
}, false);
document.getElementById('allPlayName').addEventListener('focus', function () {
document.getElementById('ptplayErr').innerHTML = '';
}, false);
document.getElementById('allListSubmit').addEventListener('click', t.eventListSubmit, false);
document.getElementById('idMyAllSubmit').addEventListener('click', t.showMyAlliance, false);
document.getElementById('idFindETASelect').addEventListener('click', t.handleEtaSelect, false);
document.getElementById('idFindETASelect').disabled = true;
t.ModelCity = Cities.cities[0];
t.curPage = 0;
t.MaxPage = -1;
t.state = 1;
}
},
paintFriendlyDiv: function () {
var t = Tabs.AllianceList;
var mess = ' ----- Friendlys ----- <BR>';
for (k in Seed.allianceDiplomacies.friendly) {
mess += '<INPUT id=pbFriendly_' + k + ' type=submit value="' + Seed.allianceDiplomacies.friendly[k].allianceName + '"> '; //
}
document.getElementById('pbFriendlyDivs').innerHTML = mess;
for (q in Seed.allianceDiplomacies.friendly) {
document.getElementById('pbFriendly_' + q).addEventListener('click', function () {
//alert(this.id.substr(12))
uW.PTgetMembers(this.id.substr(12))
});
}
},
paintHostilesDiv: function () {
var t = Tabs.AllianceList;
var mess = ' ----- Hostiles ----- <BR>';
for (k in Seed.allianceDiplomacies.hostile) {
mess += '<INPUT id=pbHostile_' + k + ' type=submit value="' + Seed.allianceDiplomacies.hostile[k].allianceName + '"> '; //
}
document.getElementById('pbHostilesDivs').innerHTML = mess;
for (q in Seed.allianceDiplomacies.hostile) {
document.getElementById('pbHostile_' + q).addEventListener('click', function () {
//alert(this.id.substr(11))
uW.PTgetMembers(this.id.substr(11))
});
}
},
pName: '',
eventPlayerSubmit: function () {
var t = Tabs.AllianceList;
document.getElementById('ptplayErr').innerHTML = '';
var name = document.getElementById('allPlayName').value;
name = name.replace(/\'/g, "_").replace(/\,/g, "_").replace(/\-/g, "_");
t.pName = name;
if (name.length < 3) {
document.getElementById('ptplayErr').innerHTML = uW.g_js_strings.getAllianceSearchResults.entryatleast3;
return;
}
document.getElementById('altInput').innerHTML = '';
document.getElementById('allListOut').innerHTML = '<BR><BR><CENTER>' + uW.g_js_strings.commonstr.loadingddd + '</center>';
t.fetchPlayerList(name, t.eventGotPlayerList);
},
eventGotPlayerList: function (rslt) {
var t = Tabs.AllianceList;
if (!rslt.ok) {
// document.getElementById('allListOut').innerHTML = rslt.errorMsg;
document.getElementById('allListOut').innerHTML = rslt.msg;
return;
}
t.playerList = rslt.matchedUsers;
var uList = [];
for (k in rslt.matchedUsers)
uList.push(rslt.matchedUsers[k].userId);
t.fetchPlayerStatus(uList, function (r) {
t.eventGotPlayerOnlineList(r)
});
},
eventGotPlayerOnlineList: function (rslt) {
var t = Tabs.AllianceList;
if (!rslt.ok) {
document.getElementById('allListOut').innerHTML = rslt.errorMsg;
return;
}
var m = '<DIV class=ptstat>' + uW.g_js_strings.recommendSelectedFriends.playersrch + ': <B>"' + t.pName + '"</b></div>\
<DIV style="height:575px; max-height:575px; overflow-y:auto">\
<TABLE width=100% align=center class=ptTab cellspacing=0><TR style="font-weight:bold"><TD>' + uW.g_js_strings.commonstr.nametx + '                  </td>\
<TD align=right>UID              </td><TD>' + uW.g_js_strings.commonstr.might + '    </td><TD> ' + uW.g_js_strings.commonstr.online + '</td><TD> Facebook </td><TD width=75%>' + uW.g_js_strings.commonstr.search + ' </td></tr>';
var row = 0;
var cl = '';
for (k in t.playerList) {
var u = t.playerList[k];
if (++row % 2)
cl = 'class=ptOddrow ';
else
cl = '';
m += '<TR ' + cl + 'valign=top><TD>' + u.genderAndName + '</td><TD><A target="_tab" href="https://kocscripters.com/player/server/' + GetServerId() + '/tvuid/' + u.userId + '/">' + u.userId + '</a></td><TD align=right>' + addCommas(u.might) + '</td>\
<TD>' + (rslt.data[u.userId] ? " <SPAN class=boldDarkRed>" + uW.g_js_strings.commonstr.online + "</span>" : "") + '</td>\
<TD align=center><A target="_tab" href="https://www.facebook.com/profile.php?id=' + u.fbuid + '">' + uW.g_js_strings.commonstr.profile + '</a></td>\
<TD><SPAN onclick="PTpd(this, ' + u.userId + ')"><A>' + uW.g_js_strings.modaltitles.memberdetails + '</a> <BR></span><SPAN onclick="PTpl2(this,' + u.userId + ',' + rslt.data[u.userId] + ')"><A>' + uW.g_js_strings.modaltitles.leaderboard + '</a><BR></span><SPAN onclick="PCplo(this, \'' + u.userId + '\')"><A>' + uW.g_js_strings.modal_messages_viewreports_view.lastlogin + '</a></span></td></tr>';
}
m += '</table></div>';
document.getElementById('allListOut').innerHTML = m;
},
asName: '',
eventPlayerUIDSubmit: function () {
var t = Tabs.AllianceList;
document.getElementById('ptplayErr').innerHTML = '';
var uid = document.getElementById('allPlayName').value;
var params = uW.Object.clone(uW.g_ajaxparams);
params.uid = uid;
AjaxRequest(uW.g_ajaxpath + "ajax/getUserGeneralInfo.php" + uW.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (transport) {
var rslt = eval("(" + transport.responseText + ")");
if (rslt.ok) test = rslt.userInfo[0].name;
else document.getElementById('allListOut').innerHTML = '<BR><BR><CENTER>' + uW.g_js_strings.barbarian.erroroccured + '</center>';
},
onFailure: function (rslt) {
document.getElementById('allListOut').innerHTML = '<BR><BR><CENTER>' + uW.g_js_strings.errorcode.err_602 + '</center>';
return;
},
});
t.pName = t.asName;
document.getElementById('altInput').innerHTML = '';
document.getElementById('allListOut').innerHTML = '<BR><BR><CENTER>' + uW.g_js_strings.commonstr.loadingddd + '</center>';
setTimeout(t.fetchPlayerList, 500, test, t.eventGotPlayerList);
},
clickedPlayerDetail: function (span, uid) {
var t = Tabs.AllianceList;
span.onclick = '';
span.innerHTML = uW.g_js_strings.commonstr.search + ': ' + uW.g_js_strings.modaltitles.memberdetails + " ...";
t.fetchPlayerInfo(uid, function (r) {
t.gotPlayerDetail(r, span)
});
},
clickedPlayerLeaderboard: function (span, uid) {
var t = Tabs.AllianceList;
span.onclick = '';
span.innerHTML = uW.g_js_strings.commonstr.search + ': ' + uW.g_js_strings.modaltitles.leaderboard + " ...";
t.fetchLeaderboard(uid, function (r) {
t.gotPlayerLeaderboard(r, span)
});
},
clickedPlayerLeaderboard2: function (span, uid, status) {
var t = Tabs.AllianceList;
span.onclick = '';
span.innerHTML = uW.g_js_strings.commonstr.search + ': ' + uW.g_js_strings.modaltitles.leaderboard + " ...";
t.fetchLeaderboard(uid, function (r) {
t.gotPlayerLeaderboard2(r, span, uid, status)
});
},
clickedPlayerGetLastLogin: function (span, uid) {
var t = Tabs.AllianceList;
span.onclick = '';
span.innerHTML = uW.g_js_strings.commonstr.search + ': ' + uW.g_js_strings.modal_messages_viewreports_view.lastlogin + " ...";
t.fetchPlayerLastLogin(uid, function (r) {
t.gotPlayerLastLogin(r, span)
});
},
gotPlayerLeaderboard2: function (rslt, span, uid, status) {
var t = Tabs.AllianceList;
var prestige = "";
if (!rslt.ok) {
span.innerHTML = rslt.errorMsg;
return;
}
t.dat = [];
var myA = getMyAlliance();
if (rslt.totalResults == 0) {
t.fetchPlayerLastLogin(uid, function (r) {
t.displayPlayer("", r)
});
return;
}
var p = rslt.results[0];
if (myA[0] == p.allianceId)
t.friendEta = true;
else
t.friendEta = false;
for (var c = 0; c < p.cities.length; c++) {
if (p.cities[c].prestigeType == 0) prestige = "";
if (p.cities[c].prestigeType == 1) prestige = "Druid";
if (p.cities[c].prestigeType == 2) prestige = "Fey";
if (p.cities[c].prestigeType == 3) prestige = "Briton";
if (p.cities[c].prestigeLevel == 0) {
prestigelvl = "";
} else {
prestigelvl = " (" + p.cities[c].prestigeLevel + ")";
}
ExpTime = t.convertTime(new Date(p.cities[c].prestigeBuffExpire.replace(" ", "T")));
if ((ExpTime + (3600 * 24) < unixTime()) || isNaN(ExpTime)) {
prestigeexp = "";
} else {
prestigeexp = t.getDuration(p.cities[c].prestigeBuffExpire);
}
t.dat.push([p.displayName, parseInt(p.might), p.officerType, parseInt(p.numCities), parseInt(p.cities[c].tileLevel),
parseInt(p.cities[c].xCoord), parseInt(p.cities[c].yCoord), p.cities[c].cityName, 0, status, 0, p.userId, prestige, p.userId, prestigelvl, prestigeexp, p.cities[c].prestigeBuffExpire, prestige + prestigelvl
]);
}
t.setDistances(Cities.cities[0].x, Cities.cities[0].y);
t.ModelCity = Cities.cities[0];
t.setEta();
t.fetchPlayerLastLogin(uid, function (r) {
t.displayPlayer(p.allianceName, r)
});
//t.fetchPlayerLastLogin();
//t.displayPlayer (p.allianceId);
},
gotPlayerLeaderboard: function (rslt, span) {
var t = Tabs.AllianceList;
if (!rslt.ok) {
span.innerHTML = rslt.errorMsg;
return;
}
if (rslt.totalResults == 0) {
span.innerHTML = '<B>' + uW.g_js_strings.commonstr.leaderboard + ': </b>' + uW.itemlist.i10021.name + '?<BR>';
return;
}
var p = rslt.results[0];
var an = p.allianceName;
if (!an || an == '')
an = 'none';
else
an += ' (' + officerId2String(p.officerType) + ')';
pStr = JSON2.stringify(p);
//logit (pStr);
m = '<TABLE cellspacing=0 class=ptTab><TR><TD><B>' + uW.g_js_strings.commonstr.leaderboard + ': </b></td><TD colspan=2>' + uW.g_js_strings.commonstr.might + ': ' + p.might + ' ' + uW.g_js_strings.commonstr.alliance + ': ' + an + '</td></tr>';
for (var i = 0; i < p.cities.length; i++) {
var c = p.cities[i];
var created = '';
if (c.dateCreated && c.dateCreated.substr(0, 2) == '20')
created = ' created: ' + c.dateCreated.substr(0, 10);
m += '<TR><TD align=right><B>City #' + (i + 1) + ':</b></td><TD> ' + c.cityName + ' (<a onclick="ptGotoMap (' + c.xCoord + ',' + c.yCoord + ')">' + c.xCoord + ',' + c.yCoord + '</a>)</td><TD width=75%> level: ' + c.tileLevel + ' status: ' + cityStatusString(c.cityStatus) + created + '</td></tr>';
}
span.innerHTML = m + '</table>';
},
gotPlayerDetail: function (rslt, span) {
var t = Tabs.AllianceList;
if (!rslt.ok) {
span.innerHTML = rslt.errorMsg;
return;
}
var u = rslt.userInfo[0];
var a = 'None';
if (u.allianceName)
a = u.allianceName + ' (' + getDiplomacy(u.allianceId) + ')';
var m = '<DIV style="max-width:375x; width:375px; overflow-y:auto"><TABLE cellspacing=0 class=ptTab><TR><TD><B>Details:</b> </td><TD>' + uW.g_js_strings.commonstr.alliance + ': ' + a + ' ' + uW.g_js_strings.commonstr.cities + ': ' + u.cities + ' ' + uW.g_js_strings.commonstr.population + ': ' + u.population + '</td></tr><TR><TD></td><TD></div>' + uW.g_js_strings.commonstr.province + ': ';
var pids = u.provinceIds.split(',');
var p = [];
for (var i = 0; i < pids.length; i++)
p.push(uW.provincenames['p' + pids[i]]);
span.innerHTML = m + p.join(', ') + '</td></tr></table>';
},
eventMyAllianceSubmit: function () {
var t = Tabs.AllianceList;
document.getElementById('allListOut').innerHTML = '<BR><BR><CENTER>' + uW.g_js_strings.commonstr.loadingddd + '</center>';
t.fetchAllianceMemberList(getMyAlliance()[0], null, t.eventGotMemberList);
},
aName: '',
eventSubmit: function () {
var t = Tabs.AllianceList;
document.getElementById('ptallErr').innerHTML = '';
if (t.clickedAlly) {
t.aName = t.clickedAllyName;
} else {
t.aName = document.getElementById('allAllName').value;
}
if (t.aName.length < 3) {
document.getElementById('ptallErr').innerHTML = uW.g_js_strings.getAllianceSearchResults.entryatleast3;
return;
}
var myA = getMyAlliance();
document.getElementById('altInput').innerHTML = '';
document.getElementById('allListOut').innerHTML = '<BR><BR><CENTER>' + uW.g_js_strings.commonstr.loadingddd + '</center>';
if (myA[0] != 0 && myA[1].toLowerCase().indexOf(t.aName.toLowerCase()) >= 0)
t.fetchAllianceList(t.aName, myA[0], t.eventGotAllianceList);
else
t.fetchAllianceList(t.aName, null, t.eventGotAllianceList);
},
eventListSubmit: function () {
var t = Tabs.AllianceList;
var myA = getMyAlliance();
document.getElementById('allListOut').innerHTML = '<BR><BR><CENTER>' + uW.g_js_strings.commonstr.loadingddd + '</center>';
if (myA[0] != 0) {
t.curPage = 1;
t.fetchOtherAllianceInfo(1, t.eventGotOtherAlliancePage);
//document.getElementById('allGotoPage').disabled = false;
} else {
document.getElementById('allListOut').innerHTML = uW.g_js_strings.membersInfo.youmustbelong;
}
},
eventGotAllianceList: function (rslt) {
var t = Tabs.AllianceList;
if (!rslt.ok) {
document.getElementById('allListOut').innerHTML = rslt.errorMsg;
return;
}
var m = '<DIV class=ptstat>' + uW.g_js_strings.commonstr.alliances + '<B>"' + t.aName + '"</b></div>\
<TABLE><TR style="font-weight:bold"><TD class=xtab>' + uW.g_js_strings.commonstr.alliance + '</td><TD class=xtab>' + uW.g_js_strings.commonstr.rank + '</td><TD class=xtab>' + uW.g_js_strings.commonstr.members + '</td>\
<TD align=right class=xtab>' + uW.g_js_strings.commonstr.might + '</td><TD class=xtab>' + uW.g_js_strings.getAllianceSearchResults.currdiplo + '</td><TD class=xtab>' + uW.g_js_strings.commonstr.members + '</td><TD class=xtab>' + uW.g_js_strings.commonstr.viewmap + '</td></tr>';
for (k in rslt.alliancesMatched) {
var all = rslt.alliancesMatched[k];
var dip = '';
if (all.relation && all.relation == 1)
dip = uW.g_js_strings.commonstr.friendly;
else if (all.relation && all.relation == 2)
dip = uW.g_js_strings.commonstr.hostile;
m += '<TR><TD class=xtab>' + all.allianceName + '</td><TD align=right class=xtab>' + all.ranking + '</td><TD align=right class=xtab>' + all.membersCount + '</td>\
<TD align=right class=xtab>' + addCommasInt(all.might) + '</td><TD class=xtab>' + dip + '</td>\
<TD class=xtab><a onclick="PTgetMembers(' + all.allianceId + ')">' + uW.g_js_strings.commonstr.members + '</a></td>\
<TD class=xtab><a onclick="PTPaintMembers(' + all.allianceId + ')">' + uW.g_js_strings.commonstr.viewmap + '</a></td></tr>';
}
document.getElementById('allListOut').innerHTML = m;
},
showMyAlliance: function () {
var t = Tabs.AllianceList;
var myA = getMyAlliance();
document.getElementById('allListOut').innerHTML = '<BR><BR><CENTER>' + uW.g_js_strings.commonstr.loadingddd + '</center>';
if (myA[0] != 0) {
t.eventGetMembers(myA[0], false);
} else {
document.getElementById('allListOut').innerHTML = uW.g_js_strings.membersInfo.youmustbelong;
}
},
curPage: 0,
MaxPage: 0,
eventListNext: function (amt) {
var t = Tabs.AllianceList;
if (parseInt(amt) >= 9999)
t.curPage = t.MaxPage;
else {
t.curPage = parseInt(t.curPage) + parseInt(amt);
if (t.curPage > t.MaxPage) {
t.curPage = t.MaxPage;
}
}
document.getElementById('allListOut').innerHTML = '<BR><BR><CENTER>' + uW.g_js_strings.commonstr.loadingddd + '</center>';
t.fetchOtherAllianceInfo(t.curPage, t.eventGotOtherAlliancePage);
},
eventListPrev: function (amt) {
var t = Tabs.AllianceList;
if (amt <= -1)
t.curPage = 1;
else {
t.curPage -= amt;
if (t.curPage < 1) {
t.curPage = 1;
}
}
document.getElementById('allListOut').innerHTML = '<BR><BR><CENTER>' + uW.g_js_strings.commonstr.loadingddd + '</center>';
t.fetchOtherAllianceInfo(t.curPage, t.eventGotOtherAlliancePage);
},
eventGotOtherAlliancePage: function (rslt) {
var t = Tabs.AllianceList;
if (!rslt.ok) {
document.getElementById('allListOut').innerHTML = rslt.errorMsg;
return;
}
// document.getElementById('idPageNum').value = t.curPage;
t.MaxPage = rslt.noOfPages;
//document.getElementById('idMaxPageNum').innerHTML = 'of ' + t.MaxPage;
var m = '<div style="overflow:auto; height:556px;width:650px;"><TABLE><thead><TR style="font-weight:bold"> \
<th class=xtab>' + uW.g_js_strings.modaltitles.alliance + '</th><th class=xtab>' + uW.g_js_strings.commonstr.rank + '</th><th class=xtab>' + uW.g_js_strings.commonstr.members + '</th>\
<th align=right class=xtab>' + uW.g_js_strings.commonstr.might + '</th><th class=xtab>' + uW.g_js_strings.getAllianceSearchResults.currdiplo + '</th><th class=xtab>' + uW.g_js_strings.commonstr.members + '</th><th class=xtab>' + uW.g_js_strings.commonstr.viewmap + '</th></tr></thead><tbody>';
document.getElementById('allListOut').innerHTML = m;
for (var i = 0; i < rslt.otherAlliances.length; i++) {
var alliance = rslt.otherAlliances[i];
var dip = '';
dip = getDiplomacy(alliance.allianceId);
m += '<TR class="' + dip + '"><TD class=xtab>' + alliance.name + '</td><TD align=right class=xtab>' + alliance.ranking + '</td><TD align=right class=xtab>' + alliance.membersCount + '</td>\
<TD align=right class=xtab>' + addCommasInt(alliance.might) + '</td><TD class=xtab>' + dip + '</td>\
<TD class=xtab><a onclick="PTgetMembers(' + alliance.allianceId + ')">' + uW.g_js_strings.commonstr.members + '</a></td>\
<TD class=xtab><a onclick="PTPaintMembers(' + alliance.allianceId + ')">' + uW.g_js_strings.commonstr.viewmap + '</a></td></tr>';
}
m += '</tbody></TABLE><div style="font-weight:bold"; height:20px;width:560px; ><span> <a onclick="PTalClickPrev(-1)"> [|<] </a><a onclick="PTalClickPrev(10)"> [-10] </a><a onclick="PTalClickPrev(5)"> [-5] </a><a onclick="PTalClickPrev(1)"> [<] </a> \
<a onclick="PTalClickNext(1)"> [>] </a><a onclick="PTalClickNext(5)"> [+5] </a><a onclick="PTalClickNext(10)"> [+10] </a><a onclick="PTalClickNext(9999)"> [>|] </a> </span></div>';
m += '</div>';
document.getElementById('allListOut').innerHTML = m;
},
showCurrentPage: function () {
var t = Tabs.AllianceList;
var myA = getMyAlliance();
document.getElementById('allListOut').innerHTML = '<BR><BR><CENTER>' + uW.g_js_strings.commonstr.loadingddd + '</center>';
if (myA[0] != 0) {
t.fetchOtherAllianceInfo(t.curPage, t.eventGotOtherAlliancePage);
} else {
t.fetchOtherAllianceInfo(t.curPage, t.eventGotOtherAlliancePage);
}
},
eventGotMemberList: function (rslt) {
var t = Tabs.AllianceList;
if (!rslt.ok) {
document.getElementById('allListOut').innerHTML = rslt.errorMsg;
return;
}
t.memberListRslt = rslt;
var uList = [];
for (k in rslt.results)
uList.push(rslt.results[k].userId);
t.fetchPlayerStatus(uList, function (r) {
t.eventGotMemberOnlineList(r)
});
},
eventGotMemberOnlineList: function (rslt) {
var t = Tabs.AllianceList;
var numInvalid = 0;
var numPlayers = 0;
var myA = getMyAlliance();
var prestige = "";
t.dat = [];
for (var i = 0; i < t.memberListRslt.results.length; i++) {
p = t.memberListRslt.results[i];
if (p.userId == 0) {
++numInvalid;
} else {
++numPlayers;
if (myA[0] == p.allianceId)
t.friendEta = true;
else
t.friendEta = false;
for (var c = 0; c < p.cities.length; c++) {
if (p.cities[c].prestigeType == 0) prestige = "";
if (p.cities[c].prestigeType == 1) prestige = "Druid";
if (p.cities[c].prestigeType == 2) prestige = "Fey";
if (p.cities[c].prestigeType == 3) prestige = "Briton";
if (p.cities[c].prestigeLevel == 0) {
prestigelvl = "";
} else {
prestigelvl = " (" + p.cities[c].prestigeLevel + ")";
}
ExpTime = t.convertTime(new Date(p.cities[c].prestigeBuffExpire.replace(" ", "T")));
if ((ExpTime + (3600 * 24) < unixTime()) || isNaN(ExpTime)) {
prestigeexp = "";
} else {
prestigeexp = t.getDuration(p.cities[c].prestigeBuffExpire);
}
t.dat.push([p.displayName, parseInt(p.might), p.officerType, parseInt(p.numCities), parseInt(p.cities[c].tileLevel),
parseInt(p.cities[c].xCoord), parseInt(p.cities[c].yCoord), p.cities[c].cityName, 0, rslt.data[p.userId] ? 1 : 0, '--', p.userId, prestige, p.userId, prestigelvl, prestigeexp, p.cities[c].prestigeBuffExpire, prestige + prestigelvl
]);
}
}
}
t.setDistances(Cities.cities[0].x, Cities.cities[0].y);
t.ModelCity = Cities.cities[0];
t.setEta();
t.displayMembers(t.memberListRslt.allianceName, numPlayers);
},
convertTime: function (datestr) {
// KOC Timestamps are in Local Pacific Time, so need to convert to unixtime and add 8 hours for PST
// Then adjust for Daylight Savings Time on both sides...
return parseInt(datestr.getTime()/1000)-(datestr.getTimezoneOffset()*60)+(480*60)-getDST(datestr);
},
getDuration: function (datestr) {
var t = Tabs.AllianceList;
var Interval = t.convertTime(new Date(datestr.replace(" ", "T"))) - unixTime();
if (Interval >= 0) {
return uW.timestr(Interval);
} else
return '<span style="color:#f00;">Expired ' + uW.timestr(Interval * (-1)) + ' Ago</span>';
},
// sort and display
reDisp: function () {
var t = Tabs.AllianceList;
//alert(t.dat.toSource());
function sortFunc(a, b) {
var t = Tabs.AllianceList;
if (typeof (a[t.sortColNum]) == 'number') {
if (t.sortDir > 0)
return a[t.sortColNum] - b[t.sortColNum];
else
return b[t.sortColNum] - a[t.sortColNum];
} else if (typeof (a[t.sortColNum]) == 'boolean') {
// TODO !!
return 0;
} else {
if (t.sortDir > 0)
return a[t.sortColNum].localeCompare(b[t.sortColNum]);
else
return b[t.sortColNum].localeCompare(a[t.sortColNum]);
}
}
t.dat.sort(sortFunc);
var m = '';
var cityName = "";
for (var i = 0; i < t.dat.length; i++) {
cityName = t.dat[i][5].toString() + t.dat[i][6].toString();
var status = '<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAWJJREFUeNrUU79PwkAUvv5IG6iAg8HEMIlxNLBCNxkkYah/gP6NmAChiYQUupjA4uCicbKJBQ0E24OWtvjdgCHGdmHyJV/efffuvrx37x232WzIPsaTPW1vAXGXaJpGRFGUOY67AD0FMsAX8IpSH4Mg8JrNZrwATI6i6KrRaGjVarWWTqePXde1TdO873Q67GYX8GIFwjAs1ev160qlckMp5QG2XQC/Xa1WnK7r7+APsQLr9fq8XC7XbNvmWXd832d7BFnxxWKxhnUvUQAXcqg/7zgOcRyKjIKfmCRJeRZPfETP89zJ5HO6XIYngiAThq1R6k5ZPLGNOPBsGMYglcpEsqyQLSRJicbj8YDFEzOwLGvUat21KfVFVb1Us9nc0WIx/xgOe2a/323PZrPRbwFud5RRvyQIwpmiKCX4AvgB4g6684Z2PsG/MJ4kIMAdsnn4Y+jYi85x3o8V+J+f6VuAAQDR57f+eJX9fgAAAABJRU5ErkJggg=="/>';
if (t.dat[i][9] == 1) status = '<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAVNJREFUeNrUk09OwkAUh9+gUKpAFIuIfxJilLIlMd6gaw+Ax/AY7r2AnMFFb2DcC5gYYlBotYKttEwp83zjQtFIN6x8yZfJ9PfypZM3wxARFqkELFgLC5ZnN+yyQF9YjrR12hpEiegRJghoQIQunj7PF1DlQOB5dadi6Nt6cSWlKiPu8+ZTq9bu3tUoPyPc+UcQWK9sHRh6oVIOXF91XpzE2AtUXTss72tlQ+axR4AQjb313aJlWSCEAM75J3JS2dVMUebUdREjECWcojLwBiCZRJOvKB2mFZnH/wEXvb7b5zbaKmR+No6jMZd5/Bg5mt3HByupJQE24Js8gD/0LJnHC0zecNuO6d06HcGmAWRBTCEK/NZbh9+PTJn/FrDZq8wYS0GeVeE4cQIldkT6TZq/DT28gWtxBa/YpP73OMESLWuE8seli4gh9YdzBf/zMX0IMACs96WetcYlTQAAAABJRU5ErkJggg=="/>';
m += '<TR style="max-height:30px"><TD class=xxtab>' + status + '<SPAN onclick="PTPlayClick(this, \'' + t.dat[i][13] + '\',\'' + t.dat[i][9] + '\')"><A>' + t.dat[i][0] + '</a></span></td><TD align=right class=xxtab>' + addCommasInt(t.dat[i][1]);
m += '</td><TD align=left class=xxtab nowrap>' + t.dat[i][12] + t.dat[i][14] + '</td><TD align=center class=xxtab nowrap>' + t.dat[i][15] + '</td><TD class=xxtab>' + officerId2String(t.dat[i][2]);
m += '</td><TD class=xxtab><INPUT id=ScoutCheckbox_' + cityName + ' type=checkbox unchecked=true></td><TD class=xxtab>' + t.dat[i][7] + '</td><TD align=right class=xxtab>' + t.dat[i][4];
m += '</td><TD align=center class=xxtab><DIV onclick="ptGotoMap(' + t.dat[i][5] + ',' + t.dat[i][6] + ')"><A>' + t.dat[i][5] + ',' + t.dat[i][6] + '</a></div></td>';
m += '<TD align=right class=xxtab style="padding-right:20px;">' + t.dat[i][8].toFixed(2) + '</td>'
m += '</td><TD nowrap class=xxtab>' + (t.dat[i][10] ? '<SPAN>' + (t.dat[i][10] > 0 ? timestr(t.dat[i][10], 1) : '--') + '</span>' : '<SPAN>--</span>') + '<td class=xxtab><SPAN onclick="PCplo(this, \'' + t.dat[i][11] + '\')"><A>Login</a></span><td></tr>';
}
var tbody = document.getElementById('allBody');
tbody.style.maxHeight = '';
tbody.innerHTML = m;
if (parseInt(tbody.clientHeight) > 470) {
tbody.style.height = '470px';
tbody.style.maxHeight = '470px';
}
},
clickedPlayerInAll: function (span, uid, status) {
var t = Tabs.AllianceList;
t.clickedPlayerLeaderboard2(span, uid, status);
},
setDistances: function (x, y) {
var t = Tabs.AllianceList;
for (var i = 0; i < t.dat.length; i++) t.dat[i][8] = distance(x, y, t.dat[i][5], t.dat[i][6]);
},
friendEta: false,
setEta: function () {
var t = Tabs.AllianceList;
for (var i = 0; i < t.dat.length; i++) {
if (t.dat[i][8]) {
var eta = t.estETA(parseFloat(t.dat[i][8]));
if (t.friendEta)
t.dat[i][10] = eta.friendETA;
else
t.dat[i][10] = eta.ETA;
}
}
},
handleEtaSelect: function () {
var t = Tabs.AllianceList;
t.setEta();
t.reDisp();
},
sortColNum: 8,
sortDir: 1,
displayMembers: function (allName, numPlayers) {
var t = Tabs.AllianceList;
function alClickSort(e) {
var t = Tabs.AllianceList;
var newColNum = e.id.substr(8);
document.getElementById('clickCol' + t.sortColNum).className = 'clickable';
e.className = 'clickable clickableSel';
if (newColNum == t.sortColNum)
t.sortDir *= -1;
else
t.sortColNum = newColNum;
t.reDisp();
}
uW.PTalClickSort = alClickSort;
var m = '<STYLE>.clickable{background-color:#ddd; border:2px outset; border-color:#555; padding-left:5px; padding-right:5px}\
.clickableSel{background-color:#ffffcc;}\
.xxtab{background-color:none; padding-left:5px; padding-right:5px;} </style>\
<DIV class=ptstat ><TABLE id=tabAllMembers cellpadding=0 width=100%><TR font-weight:bold"><TD class=xtab> ' + allName + '</td>\
<TD class=xtab width=80% align=center>' + uW.g_js_strings.commonstr.distance + uW.g_js_strings.commonstr.from + ' <SPAN id=distFrom>' + Cities.cities[0].name + ' (' + Cities.cities[0].x + ',' + Cities.cities[0].y + ')</span></td><TD class=xtab align=right>' + numPlayers + uW.g_js_strings.commonstr.members + ' </td></tr></table></div>\
<div style="max-height:500px; height:500px; overflow-y:auto;"><TABLE id=tabAllMembers align=center cellpadding=0 cellspacing=0><THEAD style="overflow-y:auto;">\
<TR style="font-weight:bold"><TD id=clickCol0 onclick="PTalClickSort(this)" class=clickable><A><DIV>' + uW.g_js_strings.commonstr.player + '</div></a></td>\
<TD id=clickCol1 onclick="PTalClickSort(this)" class=clickable align=center><A><DIV>Might</a></div></td>\
<TD id=clickCol17 onclick="PTalClickSort(this)" class=clickable><A><DIV>Faction</a></div></td>\
<TD id=clickCol16 onclick="PTalClickSort(this)" class=clickable><A><DIV>Protection Left</a></div></td>\
<TD id=clickCol2 onclick="PTalClickSort(this)" class=clickable align=center><A><DIV>Rank</a></div></td>\
<TD id=clickCol9 class=clickable align=center><DIV><INPUT id=ToggleScoutCheckbox type=checkbox unchecked=true></div></td>\
<TD id=clickCol7 onclick="PTalClickSort(this)" class=clickable><A><DIV>City Name</a></div></td>\
<TD id=clickCol4 onclick="PTalClickSort(this)" class=clickable><A><DIV>Lvl</a></div></td>\
<TD id=clickCol5 onclick="PTalClickSort(this)" class=clickable><A><DIV>Coords</a></div></td>\
<TD id=clickCol8 onclick="PTalClickSort(this)" class=clickable><A><DIV>Dist.</a></div></td>\
<TD id=clickCol10 onclick="PTalClickSort(this)" class=clickable><A><DIV>Eta</a></div></td>\
<TD class=clickable><A><DIV>Login</a></div></td></tr></thead>\
<TBODY id=allBody style="background-color:#ffffff;"></tbody></table></div>';
document.getElementById('allListOut').innerHTML = m; //style="top:670px; left:0px; position:absolute;
m = '<HR><TABLE width=100% cellpaddding=0><TR>';
m += '<TD class=xtab>Show distance from: X: <INPUT size=2 type=text id=plyrX /> Y: <INPUT size=2 type=text id=plyrY /> Or, choose city: <span id=dmcoords></span></td></tr>';
m += '<TR><TD class=xtab><DIV id=PaintScout></div></td></tr></table>';
document.getElementById('altInput').innerHTML = m;
document.getElementById('clickCol' + t.sortColNum).className = 'clickable clickableSel';
document.getElementById('ToggleScoutCheckbox').addEventListener('change', t.doSelectall, false);
t.reDisp();
new CdispCityPicker('plyrdcp', document.getElementById('dmcoords'), true, t.eventCoords, 0).bindToXYboxes(document.getElementById('plyrX'), document.getElementById('plyrY'));
document.getElementById('dmcoords').addEventListener('click', function () {
//alert(t.eventCoords);
//t.clickCity(CdispCityPicker);
}, false);
document.getElementById('idFindETASelect').disabled = false;
},
displayPlayer: function (allName, rslt) {
var t = Tabs.AllianceList;
var status = "";
function alClickSort(e) {
var t = Tabs.AllianceList;
var newColNum = e.id.substr(8);
document.getElementById('clickCol' + t.sortColNum).className = 'clickable';
e.className = 'clickable clickableSel';
// alert(t.dat[0].toSource());
if (newColNum == t.sortColNum)
t.sortDir *= -1;
else
t.sortColNum = newColNum;
t.reDisp();
}
uW.PTalClickSort = alClickSort;
switch (parseInt(rslt.playerInfo.warStatus)) {
case 1:
status = uW.g_js_strings.commonstr.normal;
break;
case 2:
status = uW.g_js_strings.MapObject.begprotect;
break;
case 3:
status = uW.g_js_strings.commonstr.truce;
break;
case 4:
status = uW.g_js_strings.commonstr.vacation;
break;
default:
status = uW.g_js_strings.commonstr.normal
}
var m = '<STYLE>.clickable{background-color:#ddd; border:2px outset; border-color:#555; padding-left:5px; padding-right:5px}\
.clickableSel{background-color:#ffffcc;}\
.xxtab{background-color:none; padding-left:5px; padding-right:5px;} </style>\
<DIV id=playerInfo></div><DIV id=TRStats></div>\
<div style="max-height:470px; height:470px; overflow-y:auto;"><TABLE id=tabAllMembers align=center cellpadding=0 cellspacing=0><THEAD style="overflow-y:hidden;">\
<TR style="font-weight:bold"><TD id=clickCol0 onclick="PTalClickSort(this)" class=clickable><A><DIV>Player</div></a></td>\
<TD id=clickCol1 onclick="PTalClickSort(this)" class=clickable align=center><A><DIV>Might</a></div></td>\
<TD id=clickCol17 onclick="PTalClickSort(this)" class=clickable><A><DIV>Faction</a></div></td>\
<TD id=clickCol16 onclick="PTalClickSort(this)" class=clickable><A><DIV>Protection Left</a></div></td>\
<TD id=clickCol2 onclick="PTalClickSort(this)" class=clickable align=center><A><DIV>Rank</a></div></td>\
<TD id=clickCol9 class=clickable align=center><DIV><INPUT id=ToggleScoutCheckbox type=checkbox unchecked=true></div></td>\
<TD id=clickCol7 onclick="PTalClickSort(this)" class=clickable><A><DIV>City Name</a></div></td>\
<TD id=clickCol4 onclick="PTalClickSort(this)" class=clickable><A><DIV>Lvl</a></div></td>\
<TD id=clickCol5 onclick="PTalClickSort(this)" class=clickable><A><DIV>Coords</a></div></td>\
<TD id=clickCol8 onclick="PTalClickSort(this)" class=clickable><A><DIV>Distance</a></div></td>\
<TD id=clickCol10 onclick="PTalClickSort(this)" class=clickable><A><DIV>Eta</a></div></td>\
<TD class=clickable><A><DIV>Login</a></div></td></tr></thead>\
<TBODY id=allBody style="background-color:#ffffff;"></tbody></table></div>\
<DIV width:100%; style="top:670px; left:0px; position:absolute; background-color:#ffffff; border-top:1px solid; margin-top:8px; color:#700; font-weight:bold;">';
document.getElementById('allListOut').innerHTML = m; //style="top:670px; left:0px; position:absolute;
m = '<HR><TABLE width=100% cellpaddding=0><TR align=left>';
m += '<TD class=xtab>Show distance from: X: <INPUT size=2 type=text id=plyrX /> Y: <INPUT size=2 type=text id=plyrY /> Or, choose city: <span id=dmcoords></span></td></tr>';
m += '<TR align=left><TD class=xtab><DIV id=PaintScout></div></td></tr></table>';
document.getElementById('altInput').innerHTML = m;
m = '<TABLE><TR><TD class=xtab style="width:75px">Alliance:</td><TD class=xtab style="width:150px"><a onclick="PTgetMembers(' + rslt.playerInfo.allianceId + ')">' + rslt.playerInfo.allianceName + '</a></td></tr>';
m += '<TR><TD class=xtab>Last Login:</td><TD class=xtab>' + rslt.playerInfo.lastLogin + '</td></tr>';
m += '<TR><TD class=xtab>Status:</td><TD class=xtab>' + status + '</td>';
now = unixTime();
if (rslt.playerInfo.warStatus > 1 && ((rslt.playerInfo.truceExpireUnixTime - now) > 0)) m += '<TD class=xtab>Expires: ' + rslt.playerInfo.truceExpireTimestamp + ' (' + timestr(rslt.playerInfo.truceExpireUnixTime - now) + ')</td></tr>';
if (t.dat.length == 0) m += '<TR><TD class=xtab><B>MISTED?</b></td><TD><TD class=xtab>Expires: ' + rslt.playerInfo.fogExpireTimestamp + '</td></tr>';
m += '<TR><TD class=xtab>Glory:</td><TD class=xtab><DIV id=PaintGlory></div></td></tr><TR><TD class=xtab>Max Glory:</td><TD class=xtab><DIV id=PaintMaxGlory></div></td></tr>';
// create notes link
uW.ptuser = {};
uW.ptuser.id = rslt.playerInfo.userId;
uW.ptuser.username = rslt.playerInfo.displayName;
var notes = "";
if (Tabs.Notes.noteValues[uW.ptuser.username]) {
notes = Tabs.Notes.noteValues[uW.ptuser.username];
notes = notes.text.replace(/<br\/>/g, "\n");
}
m += '<TR><TD class=xtab><a onclick="edit_notes(ptuser);">Player Notes:</a></td><TD id=ptplayernotes class=xtab>' + notes + '</td></tr>';
if (uW.btLoaded)
m += '</table><BR>Compare Throne Room : <INPUT id=CompareTR type=submit value="Compare"><INPUT id=CalcTR type=submit value="Calculate"><INPUT id=MonitorTR type=submit value="Monitor"><BR><BR>';
else
m += '</table><BR>Compare Throne Room : <INPUT id=CompareTR type=submit value="Compare"><INPUT id=CalcTR type=submit value="Calculate"><BR><BR>';
document.getElementById('playerInfo').innerHTML = m;
document.getElementById('ToggleScoutCheckbox').addEventListener('change', t.doSelectall, false);
document.getElementById('CompareTR').addEventListener('click', function () {
t.TRStats(rslt.playerInfo.userId, rslt.playerInfo.displayName, "Compare")
}, false);
document.getElementById('CalcTR').addEventListener('click', function () {
t.TRStats(rslt.playerInfo.userId, rslt.playerInfo.displayName, "Calc")
}, false);
if (uW.btLoaded)
document.getElementById('MonitorTR').addEventListener('click', function () {
uW.btMonitorExternalCallUID(rslt.playerInfo.userId)
}, false);
document.getElementById('clickCol' + t.sortColNum).className = 'clickable clickableSel';
t.PaintGlory(rslt.playerInfo.userId);
t.reDisp();
new CdispCityPicker('plyrdcp', document.getElementById('dmcoords'), true, t.eventCoords, 0).bindToXYboxes(document.getElementById('plyrX'), document.getElementById('plyrY'));
document.getElementById('idFindETASelect').disabled = false;
},
PaintGlory: function (uid) {
var t = Tabs.AllianceList;
var params = unsafeWindow.Object.clone(unsafeWindow.g_ajaxparams);
params.userId = uid;
params.ctrl = 'PlayerProfile';
params.action = 'get';
new AjaxRequest(unsafeWindow.g_ajaxpath + "ajax/_dispatch.php" + unsafeWindow.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (transport) {
var rslt = eval("(" + transport.responseText + ")");
if (rslt.ok) {
document.getElementById('PaintGlory').innerHTML = addCommas(rslt.profile.glory);
document.getElementById('PaintMaxGlory').innerHTML = addCommas(rslt.profile.maxGlory);
} else t.PaintGlory(uid);
},
onFailure: function () {},
});
},
HisStatEffects: [],
MyStatEffects: [],
TRStats: function (uid, name, what) {
var t = Tabs.AllianceList;
var params = unsafeWindow.Object.clone(unsafeWindow.g_ajaxparams);
params.ctrl = 'throneRoom\\ThroneRoomServiceAjax';
params.action = 'getEquipped';
params.playerId = uid;
new AjaxRequest(unsafeWindow.g_ajaxpath + "ajax/_dispatch53.php" + unsafeWindow.g_ajaxsuffix, {
method: "post",
parameters: params,
loading: true,
onSuccess: function (transport) {
var rslt = eval("(" + transport.responseText + ")");
if (rslt.ok) {
for (k in uW.cm.thronestats.effects) t.HisStatEffects[k] = 0;
for (kk = 0; kk <= 8; kk++) {
y = rslt.items[kk];
if (y != undefined) {
for (var O in y["effects"]) {
var i = +(O.split("slot")[1]);
id = y["effects"]["slot" + i]["id"];
tier = parseInt(y["effects"]["slot" + i]["tier"]);
level = y["level"];
p = unsafeWindow.cm.thronestats.tiers[id][tier];
while (!p && (tier > 0)) {
tier--;
p = unsafeWindow.cm.thronestats.tiers[id][tier];
}
if (!p) continue; // can't find stats for tier
Current = p.base + ((level * level + level) * p.growth * 0.5);
if (i <= parseInt(y["quality"])) t.HisStatEffects[id] += Current;
}
}
}
for (k in uW.cm.thronestats.effects) t.MyStatEffects[k] = 0;
for (k in uW.kocThroneItems) {
y = uW.kocThroneItems[k];
for (var O in y["effects"]) {
var i = +(O.split("slot")[1]);
id = y["effects"]["slot" + i]["id"];
tier = parseInt(y["effects"]["slot" + i]["tier"]);
level = y["level"];
p = unsafeWindow.cm.thronestats.tiers[id][tier];
while (!p && (tier > 0)) {
tier--;
p = unsafeWindow.cm.thronestats.tiers[id][tier];
}
if (!p) continue; // can't find stats for tier
Current = p.base + ((level * level + level) * p.growth * 0.5);
if (y.isEquipped && i <= y["quality"]) t.MyStatEffects[id] += Current
}
}
if (what == "Compare") t.PaintTRCompare(name);
if (what == "Calc") t.PaintTRCalc(name);
} else t.TRStatsCompare();
},
onFailure: function () {
return;
},
});
},
TRlineHolder: {
1:{1:"Attack",2:null},2:{1:1,2:17},3:{1:24,2:29},4:{1:34,2:39},5:{1:44,2:50},6:{1:56,2:61},7:{1:17,2:1},8:{1:29,2:24},9:{1:39,2:34},10:{1:50,2:44},11:{1:61,2:56},
12:{1:"Defense",2:null},13:{1:2,2:18},14:{1:25,2:30},15:{1:35,2:40},16:{1:45,2:51},17:{1:18,2:2},18:{1:30,2:25},19:{1:40,2:35},20:{1:51,2:45},
21:{1:"Life",2:null},22:{1:3,2:19},23:{1:26,2:31},24:{1:36,2:41},25:{1:46,2:52},26:{1:19,2:3},27:{1:31,2:26},28:{1:41,2:36},29:{1:52,2:46},
30:{1:"Combat Speed",2:null},31:{1:4,2:20},32:{1:27,2:32},33:{1:47,2:53},34:{1:57,2:62},35:{1:20,2:4},36:{1:32,2:27},37:{1:53,2:47},38:{1:62,2:57},
39:{1:"Range",2:null},40:{1:5,2:21},41:{1:37,2:42},42:{1:58,2:63},43:{1:21,2:5},44:{1:42,2:37},45:{1:63,2:58},
46:{1:"Load",2:null},47:{1:6,2:22},48:{1:48,2:54},49:{1:59,2:64},50:{1:22,2:6},51:{1:54,2:48},52:{1:64,2:59},
52:{1:"Accuracy",2:null},53:{1:7,2:23},54:{1:28,2:33},55:{1:38,2:43},56:{1:49,2:55},57:{1:60,2:65},58:{1:23,2:7},59:{1:33,2:28},60:{1:43,2:38},61:{1:55,2:49},62:{1:65,2:60},
63:{1:"Other",2:null},64:{1:8,2:8},65:{1:9,2:9},65:{1:10,2:10},66:{1:11,2:11},67:{1:12,2:12},68:{1:13,2:13},69:{1:14,2:14},70:{1:15,2:15},71:{1:16,2:16},72:{1:66,2:66},73:{1:67,2:67},74:{1:68,2:68},75:{1:69,2:69},76:{1:70,2:70},77:{1:71,2:71},78:{1:72,2:72},79:{1:73,2:73},80:{1:74,2:74},81:{1:75,2:75},82:{1:76,2:76},83:{1:77,2:77},84:{1:78,2:78},85:{1:79,2:79},86:{1:80,2:80},87:{1:81,2:81},88:{1:82,2:82},89:{1:83,2:83},90:{1:84,2:84},91:{1:85,2:85},92:{1:86,2:86},93:{1:87,2:87},94:{1:88,2:88},95:{1:89,2:89},96:{1:90,2:90},97:{1:91,2:91},98:{1:92,2:92},99:{1:93,2:93},100:{1:94,2:94},101:{1:95,2:95},102:{1:96,2:96},103:{1:97,2:97},104:{1:98,2:98},105:{1:99,2:99},106:{1:100,2:100},107:{1:101,2:101},108:{1:102,2:102},109:{1:103,2:103},110:{1:104,2:104},111:{1:105,2:105},112:{1:106,2:106},113:{1:107,2:107},114:{1:108,2:108},115:{1:109,2:109},116:{1:110,2:10},117:{1:111,2:111},118:{1:112,2:112},
},
PaintTRCalc: function (name) {
var t = Tabs.AllianceList;
m = '<BR><BR><DIV style="max-height:690px; height:690px; overflow-y:scroll;"><TABLE><TD width="35px" class=xtab></td><TD class=xtab><B>' + name + '</b><TD width="50px"></td><TD class=xtab><B>' + Seed.player.name + '</b></td>';
for (z = 1; z <= 118; z++) {
var HisContent = "";
var MyContent = "";
var His = t.TRlineHolder[z][1];
var My = t.TRlineHolder[z][2];
var diff = 0;
var color = "black";
if (t.TRlineHolder[z][2] == null) {
m += '<TR><TD> </td></tr><TR><TD class=xtab></td><TD class=xtab><B><U>' + t.TRlineHolder[z][1] + '</b></u><TD width="50px" class=xtab></td><TD class=xtab></td></tr>';
} else {
if (t.HisStatEffects[His] != 0) HisContent = t.HisStatEffects[His] + '% ' + uW.cm.thronestats["effects"][His]["1"];
if (t.MyStatEffects[My] != 0) MyContent = t.MyStatEffects[My] + '% ' + uW.cm.thronestats["effects"][My]["1"];
if (t.HisStatEffects[His] != 0 && t.MyStatEffects[My] != 0) {
if (z < 63) diff = (parseInt(t.HisStatEffects[His]) + parseInt(t.MyStatEffects[My]));
if (z > 63) diff = (parseInt(t.MyStatEffects[My]) - parseInt(t.HisStatEffects[His]));
if (MyContent.indexOf("Debuff") != -1 && diff > 0) color = "red";
else if (MyContent.indexOf("Debuff") != -1 && diff < 0) color = "green";
else if (HisContent.indexOf("Debuff") != -1 && diff > 0) color = "green";
else if (HisContent.indexOf("Debuff") != -1 && diff < 0) color = "red";
else if (diff < 0) color = "red";
else color = "green";
m += '<TR><TD class=xtab><FONT color=' + color + '><I><B>' + diff + '</b></i></font></td><TD class=xtab>' + HisContent + '</td><TD class=xtab></td><TD class=xtab>' + MyContent + '</td>';
} else if (t.HisStatEffects[His] != 0 || t.MyStatEffects[His] != 0) m += '<TR><TD class=xtab></td><TD class=xtab>' + HisContent + '</td><TD class=xtab></td><TD class=xtab>' + MyContent + '</td>';
m += '</tr>';
}
}
m += '</table></div>';
var popMsg = null;
t.popMsg = new CPopup('pbMailBody', 0, 0, 550, 750, true, function () {
clearTimeout(1000);
});
t.popMsg.centerMe(mainPop.getMainDiv());
t.popMsg.getMainDiv().innerHTML = m;
t.popMsg.getTopDiv().innerHTML = '<DIV align=center><B>Throne Room Compare</B></DIV>';
t.popMsg.show(true);
},
PaintTRCompare: function (name) {
var t = Tabs.AllianceList;
m = '<BR><BR><TABLE><TD class=xtab></td><TD class=xtab><B>' + name + '</b><TD></td><TD class=xtab><B>' + Seed.player.name + '</b></td></tr><TR><TD> </td></tr>';
for (k = 1; k < t.MyStatEffects.length; k++) {
var HisContent = "";
var MyContent = "";
if (t.HisStatEffects[k] != 0) HisContent = t.HisStatEffects[k] + '% ' + uW.cm.thronestats["effects"][k]["1"];
if (t.MyStatEffects[k] != 0) MyContent = t.MyStatEffects[k] + '% ' + uW.cm.thronestats["effects"][k]["1"];
if (t.HisStatEffects[k] != 0 || t.MyStatEffects[k] != 0) m += '<TR><TD width="25px" class=xtab></td><TD class=xtab>' + HisContent + '</td><TD width="50px" class=xtab></td><TD class=xtab>' + MyContent + '</td></tr>';
}
m += '</table>';
var popMsg = null;
t.popMsg = new CPopup('pbMailBody', 0, 0, 550, 750, true, function () {
clearTimeout(1000);
});
t.popMsg.centerMe(mainPop.getMainDiv());
t.popMsg.getMainDiv().innerHTML = m;
t.popMsg.getTopDiv().innerHTML = '<DIV align=center><B>Throne Room Compare</B></DIV>';
t.popMsg.show(true);
},
rallypointlevel: 0,
MaxScouts: function (city) {
var t = Tabs.AllianceList;
var othertroops = 0;
var max = 0;
var maxsend = 0;
t.getRallypoint("city" + city.id);
RallypointMax = (t.rallypointlevel * 10000);
maxsend = RallypointMax + ((RallypointMax / 100) * uW.cm.ThroneController.effectBonus(66));
for (i = 1; i <= 12; i++) othertroops += parseInt(document.getElementById('Unt' + 3).value);
if (othertroops < maxsend) max = (maxsend - othertroops);
if (max > Seed.units["city" + city.id]["unt" + 3]) max = Seed.units["city" + city.id]["unt" + 3];
document.getElementById('numScouts').value = max;
},
getRallypoint: function (cityId) {
var t = Tabs.AllianceList;
for (var o in Seed.buildings[cityId]) {
var buildingType = parseInt(Seed.buildings[cityId][o][0]);
var buildingLevel = parseInt(Seed.buildings[cityId][o][1]);
if (buildingType == 12) t.rallypointlevel = parseInt(buildingLevel);
}
if (t.rallypointlevel == 11) t.rallypointlevel = 15;
if (t.rallypointlevel == 12) t.rallypointlevel = 20;
},
doSelectall: function () {
var t = Tabs.AllianceList;
var city = "";
for (var k = 0; k < t.dat.length; k++) {
city = t.dat[k][5].toString() + t.dat[k][6].toString();
if (document.getElementById('ToggleScoutCheckbox').checked) document.getElementById('ScoutCheckbox_' + city).checked = true;
else document.getElementById('ScoutCheckbox_' + city).checked = false;
}
},
doAddScout: function () {
var t = Tabs.AllianceList;
var count = -1;
var city = "";
document.getElementById('ptscoutprogress').className = "";
document.getElementById('ptscoutprogress').innerHTML = "";
for (var k = 0; k < t.dat.length; k++) {
if (t.dat[k][5] != undefined && t.dat[k][6] != undefined) {
var x = t.dat[k][5];
var y = t.dat[k][6];
count++;
city = t.dat[k][5].toString() + t.dat[k][6].toString();
var box = 'ScoutCheckbox_' + city;
if (document.getElementById(box).checked) setTimeout(t.doScout,5000*count, x,y,box);
}
}
},
doScout: function (x, y, box) {
var t = Tabs.AllianceList;
openslots = document.getElementById('openSlots').value;
slots = CheckCityMarches(t.ScoutInfo.id);
rallypointlevel = getRallypoint(t.ScoutInfo.id);
slotsend = rallypointlevel - slots - openslots;
if (slotsend <= 0) {
setTimeout(t.doScout, 30000, x, y, box); // try again in 30 secs..
document.getElementById('ptscoutprogress').innerHTML = "Waiting for free rally point slots...";
return;
}
var params = unsafeWindow.Object.clone(unsafeWindow.g_ajaxparams);
params.cid = t.ScoutInfo.id;
params.type = 3
params.kid = 0
params.xcoord = x;
params.ycoord = y;
params.u3 = document.getElementById('numScouts').value;
params.gold = 0;
params.r1 = 0;
params.r2 = 0;
params.r3 = 0;
params.r4 = 0;
params.r5 = 0;
new MyAjaxRequest(unsafeWindow.g_ajaxpath + "ajax/march.php" + unsafeWindow.g_ajaxsuffix, {
method: "post",
parameters: params,
loading: true,
onSuccess: function (rslt) {
var t = Tabs.AllianceList;
logit(rslt.toSource());
if (rslt.ok) {
var timediff = parseInt(rslt.eta) - parseInt(rslt.initTS);
var rtimediff = parseInt(rslt.returnTS) - parseInt(rslt.initTS);
var ut = unsafeWindow.unixtime();
var unitsarr = {};
for (var ui in unsafeWindow.cm.UNIT_TYPES){
i = unsafeWindow.cm.UNIT_TYPES[ui];
if (params["u" + i])
unitsarr[i] = params["u" + i];
else
unitsarr[i] = 0;
}
var resources = [0,0,0,0,0,0];
var currentcityid = params.cid;
unsafeWindow.attach_addoutgoingmarch(rslt.marchId, rslt.marchUnixTime, ut + timediff, params.xcoord, params.ycoord, unitsarr, params.type, params.kid, resources, rslt.tileId, rslt.tileType, rslt.tileLevel, currentcityid, true, ut + rtimediff);
unsafeWindow.update_seed(rslt.updateSeed)
if (rslt.updateSeed) {
unsafeWindow.update_seed(rslt.updateSeed)
};
document.getElementById(box).checked = false;
document.getElementById('ptscoutprogress').innerHTML = "Scouting ("+params.xcoord+","+params.ycoord+") ...";
}
},
onFailure: function () {},
});
},
eventCoords: function (city, x, y) {
var t = Tabs.AllianceList;
t.ScoutInfo = new Array;
t.ScoutInfo = city;
if (t.ScoutInfo != null) {
var scoutexport = "";
if (uW.ShowScoutList) {
scoutexport = ' <INPUT id=ptscoutexport type=submit value="Export to BOT">'
}
document.getElementById('PaintScout').innerHTML = 'Scout selected cities from: ' + t.ScoutInfo.name + ' with <INPUT id=numScouts type=text maxlength=7 size=7 value="1"><INPUT id=MaxScout type=submit value=Max> Scout(s); Rally point slots to keep open: <INPUT id=openSlots type=text maxlength=3 size=3 value="0"> <INPUT id=scoutAllSelected type=submit value=GO>'+scoutexport+'</div><div align=center id=ptscoutprogress class=ptdivHide></div>';
document.getElementById('scoutAllSelected').addEventListener('click', function () {
t.doAddScout();
}, false);
document.getElementById('MaxScout').addEventListener('click', function () {
t.MaxScouts(city);
}, false);
if (uW.ShowScoutList) {
document.getElementById('ptscoutexport').addEventListener('click', function (){t.generateScoutList();},false);
}
}
var m = '';
if (city != null)
m = city.name + ' (' + city.x + ',' + city.y + ')';
else
m = x + ',' + y;
var distFrom = document.getElementById('distFrom');
if (distFrom)
distFrom.innerHTML = m;
t.ModelCity = city;
if (city != null) t.JumpCity(city.name);
t.setDistances(x, y);
t.setEta();
t.reDisp();
},
generateScoutList : function (){
var t = Tabs.AllianceList;
var bulkScout = [];
for (var k=0;k<t.dat.length;k++){
if (t.dat[k][5] != undefined && t.dat[k][6] != undefined){
if (document.getElementById('ScoutCheckbox_'+t.dat[k][5].toString() + t.dat[k][6].toString()).checked) bulkScout.push({x:t.dat[k][5], y:t.dat[k][6], dist:t.dat[k][8].toFixed(2), chk:true});
else bulkScout.push({x:t.dat[k][5], y:t.dat[k][6], dist:t.dat[k][8].toFixed(2), chk:false});
}
}
uW.ShowScoutList (bulkScout, t.ScoutInfo);
},
eventGetMembers: function (aid) {
var t = Tabs.AllianceList;
document.getElementById('allListOut').innerHTML = '<BR><BR><CENTER>' + uW.g_js_strings.commonstr.loadingddd + '</center>';
t.fetchAllianceMemberList(aid, null, t.eventGotMemberList);
},
fetchAllianceMemberList: function (allianceId, allianceName, notify) {
var t = Tabs.AllianceList;
var params = uW.Object.clone(uW.g_ajaxparams);
params.type = "might";
params.page = 1;
params.perPage = 100;
if (allianceName)
params.allianceName = allianceName;
if (allianceId && allianceId != 0)
params.allianceId = allianceId;
new MyAjaxRequest(uW.g_ajaxpath + "ajax/getUserLeaderboard.php" + uW.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (rslt) {
notify(rslt);
},
onFailure: function (rslt) {
notify({
errorMsg: 'AJAX error'
});
},
});
},
GetDataForMap: function (allianceId) {
var t = Tabs.AllianceList;
var params = uW.Object.clone(uW.g_ajaxparams);
var Data = [];
params.perPage = 100;
params.allianceId = allianceId;
params.type = "might";
params.page = 1;
new MyAjaxRequest(uW.g_ajaxpath + "ajax/getUserLeaderboard.php" + uW.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (rslt) {
var city = '';
for (var i = 0; i < rslt.results.length; i++) {
//alert(rslt.results[i].toSource());
if (rslt.results[i]['userId'] != 0) {
player = rslt.results[i]['cities'];
for (var ii = 0; ii < player.length; ii++)
Data.push({
X: player[ii]['xCoord'],
Y: player[ii]['yCoord']
});
}
}
if (Data != []) t.PaintDataOnMap(Data);
},
onFailure: function (rslt) {
notify({
errorMsg: 'AJAX error'
});
},
});
},
PaintDataOnMap: function (Data) {
var provMapCoordsA = {
imgWidth: 710,
imgHeight: 708,
mapWidth: 670,
mapHeight: 670,
leftMargin: 31,
topMargin: 19
};
var map = '<DIV id=ptAlliProvMap style="height:' + provMapCoordsA.imgHeight + 'px; width:' + provMapCoordsA.imgWidth + 'px; background-repeat:no-repeat; background-image:url(\'' + URL_PROVINCE_MAP + '\')"></div>';
//alert(Data.toSource());
//Data = [{X:"700", Y:"700"}, {X:"600", Y:"600"}, {X:"500", Y:"500"},{X:"400", Y:"400"},{X:"300", Y:"300"},{X:"200", Y:"200"},{X:"100", Y:"100"},{X:"0", Y:"0"},{X:"750", Y:"750"}, {X:"650", Y:"650"}, {X:"550", Y:"550"},{X:"450", Y:"450"},{X:"350", Y:"350"},{X:"250", Y:"250"},{X:"150", Y:"150"},{X:"50", Y:"50"}];
document.getElementById('allListOut').innerHTML = map;
var eMap = document.getElementById('ptAlliProvMap');
for (var cc = 0; cc < Seed.cities.length; cc++) {
var city = Seed.cities;
var Xplot = parseInt((provMapCoordsA.mapWidth * parseInt(city[cc][2])) / 750);
var Yplot = parseInt((provMapCoordsA.mapHeight * parseInt(city[cc][3])) / 750);
var cf = document.createElement('div');
cf.style.background = 'black';
cf.style.opacity = '1.0';
cf.style.position = 'relative';
cf.style.display = 'block';
cf.style.width = '14px';
cf.style.height = '16px';
cf.style.border = '1px solid #fff';
cf.style.color = 'white';
cf.style.textAlign = 'center';
cf.style.top = (Yplot + provMapCoordsA.topMargin - (cc * 16) - 8) + 'px';
cf.style.left = (Xplot + provMapCoordsA.leftMargin - 7) + 'px';
cf.innerHTML = (cc + 1) + '';
eMap.appendChild(cf);
}
for (var i = 0; i < Data.length; i++) {
var x = parseInt(Data[i]['X']);
var y = parseInt(Data[i]['Y']);
var xplot = parseInt((provMapCoordsA.mapWidth * x) / 750);
var yplot = parseInt((provMapCoordsA.mapHeight * y) / 750);
var ce = document.createElement('div');
ce.style.background = 'red';
ce.style.opacity = '1.0';
ce.style.position = 'relative';
ce.style.display = 'block';
ce.style.width = '4px';
ce.style.height = '4px';
ce.style.color = 'white';
ce.style.textAlign = 'center';
ce.style.top = (yplot + provMapCoordsA.topMargin - (4 * i) - ((Seed.cities.length) * 18)) + 'px';
ce.style.left = (xplot + provMapCoordsA.leftMargin - 2) + 'px';
//ce.innerHTML = '<span onmouseover="this.innerText='+x+','+y+'" onclick="">A</span>';
ce.innerHTML = '<DIV onclick="ptGotoMap(' + x + ',' + y + ')"> </div>';
eMap.appendChild(ce);
}
},
fetchLeaderboard: function (uid, notify) {
var t = Tabs.AllianceList;
var params = uW.Object.clone(uW.g_ajaxparams);
params.userId = uid;
params.type = "might";
params.page = 1;
new MyAjaxRequest(uW.g_ajaxpath + "ajax/getUserLeaderboard.php" + uW.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (rslt) {
notify(rslt);
},
onFailure: function (rslt) {
notify({
errorMsg: 'AJAX error'
});
},
});
},
fetchAllianceList: function (allianceName, myAid, notify) { // at least 3 chars :)
var t = Tabs.AllianceList;
function combineResults(rsltA, rsltM, notify) {
if (!rsltA.ok) {
if (rsltA.msg.indexOf("No alliance found under") != 0 || !rsltM.ok) {
notify(rsltA);
return;
}
rsltA.ok = true;
rsltA.count = 0;
rsltA.alliancesMatched = {};
}
if (rsltM.ok) {
rsltA.alliancesMatched['a' + rsltM.allianceInfo.allianceId] = {
allianceId: rsltM.allianceInfo.allianceId,
allianceName: rsltM.allianceInfo.allianceName,
membersCount: rsltM.allianceInfo.members,
relation: null,
might: rsltM.allianceInfo.might,
ranking: rsltM.allianceInfo.ranking
};
++rsltA.count;
}
notify(rsltA);
}
var params = uW.Object.clone(uW.g_ajaxparams);
params.allianceName = allianceName;
new MyAjaxRequest(uW.g_ajaxpath + "ajax/allianceGetSearchResults.php" + uW.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (rslt) {
if (myAid != null && myAid > 0)
t.fetchMyAllianceInfo(function (r) {
combineResults(rslt, r, notify)
});
else
notify(rslt);
},
onFailure: function (rslt) {
notify({
errorMsg: 'AJAX error'
});
},
});
},
fetchOtherAllianceInfo: function (pageNum, notify) { // as in alliance list, sorted by rank, 10 per page
var params = uW.Object.clone(uW.g_ajaxparams);
params.pageNo = pageNum;
params.cityId = uW.currentcityid;
new MyAjaxRequest(uW.g_ajaxpath + "ajax/allianceGetOtherInfo.php" + uW.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (rslt) {
notify(rslt);
},
onFailure: function (rslt) {
notify({
errorMsg: 'AJAX error'
});
},
});
},
fetchMyAllianceInfo: function (notify) {
var params = uW.Object.clone(uW.g_ajaxparams);
new MyAjaxRequest(uW.g_ajaxpath + "ajax/allianceGetInfo.php" + uW.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (rslt) {
notify(rslt);
},
onFailure: function (rslt) {
notify({
errorMsg: 'AJAX error'
});
},
});
},
fetchPlayerList: function (name, notify) { // at least 3 chars!!
var params = uW.Object.clone(uW.g_ajaxparams);
params.searchName = name;
params.subType = "ALLIANCE_INVITE";
new MyAjaxRequest(uW.g_ajaxpath + "ajax/searchPlayers.php" + uW.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (rslt) {
notify(rslt);
},
onFailure: function (rslt) {
notify({
errorMsg: 'AJAX error'
});
},
});
},
fetchPlayerInfo: function (uid, notify) {
var params = uW.Object.clone(uW.g_ajaxparams);
params.uid = uid;
new MyAjaxRequest(uW.g_ajaxpath + "ajax/getUserGeneralInfo.php" + uW.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (rslt) {
notify(rslt);
},
onFailure: function (rslt) {
notify({
errorMsg: 'AJAX error'
});
},
});
},
/***
ajax/getOnline.php:
(string) ok = true
(object) data = [object Object]
(boolean) 4394121 = false
(undefined) errorMsg: null = null
***/
fetchPlayerStatus: function (uidArray, notify) {
var params = uW.Object.clone(uW.g_ajaxparams);
params.checkArr = uidArray.join(',');
new MyAjaxRequest(uW.g_ajaxpath + "ajax/getOnline.php" + uW.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (rslt) {
notify(rslt);
},
onFailure: function (rslt) {
notify({
errorMsg: 'AJAX error'
});
},
});
},
fetchPlayerLastLogin: function (uid, notify) {
var params = uW.Object.clone(uW.g_ajaxparams);
params.pid = uid;
new MyAjaxRequest(uW.g_ajaxpath + "ajax/viewCourt.php" + uW.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (rslt) {
new Sendcourtdata(rslt);
notify(rslt);
},
onFailure: function (rslt) {
notify({
errorMsg: 'AJAX error'
});
},
});
},
gotPlayerLastLogin: function (rslt, span) {
var t = Tabs.AllianceList;
if (!rslt.ok) {
span.innerHTML = rslt.errorMsg;
return;
}
var p = rslt.playerInfo;
var lastLogin = rslt.playerInfo.lastLogin;
if (lastLogin) {
m = '<span style="color:black">' + uW.g_js_strings.modal_messages_viewreports_view.lastlogin + ': ' + lastLogin + '</span>';
} else {
m = '<span style="color:red">No login date found: ' + lastLogin + '</span>';
}
span.innerHTML = m + '';
},
ModelCity: {},
estETA: function (dist) { // Need Relief Station Levels to estimate transport, reinf, or reassign times.
var t = Tabs.AllianceList;
var ret = {
ETA: 0,
etaStr: 'NA',
friendETA: 0,
friendEtaStr: 'NA'
};
var cityID;
if (dist <= 0) return ret;
var EtaType = document.getElementById('idFindETASelect');
var baseSpeedSel = EtaType.options[EtaType.selectedIndex].value;
var m = baseSpeedSel.split(',');
var horse = 0;
var baseSpeed = 0;
if (m) {
horse = parseInt(m[0]);
baseSpeed = parseInt(m[1]);
}
if (baseSpeed == 0) return ret;
var mmLvl = parseInt(Seed.tech.tch11); //Magical Mapping
var Speed = 0;
if (horse) {
//HorsesSiegeSpeed = Base * (1 + MM/10) * (1 + AH/20)
var hsLvl = parseInt(Seed.tech.tch12); //Alloy Horse Shoes
Speed = baseSpeed * (1 + mmLvl / 10.0) * (1 + hsLvl / 20.0);
} else {
//FootSpeed = Base * (1 + MM/10)
Speed = baseSpeed * (1 + mmLvl / 10.0);
}
//Grid Speed (tiles/second) = Speed (100ths/min) / 6000
var gSpeed = 0;
var estSec;
if (Speed > 0) {
gSpeed = Speed / 6000.0; //0.48333 mm=10, hs=9
estSec = (parseFloat(dist) / gSpeed).toFixed(0);
}
ret.ETA = (parseInt((estSec + '')) + 30);
ret.etaStr = timestr(ret.ETA, 1);
//ret.etaStr = ret.ETA + ', ' + timestr (ret.ETA,1);
//RS - Cities Relief Station Level
//Friendly Speed = Speed * (1 + RS/2)
if (t.ModelCity) {
cityID = t.ModelCity.id;
var building = getCityBuilding(cityID, 18);
if (building) {
fSpeed = Speed * (1 + parseInt(building.maxLevel) / 2);
gSpeed = fSpeed / 6000;
estSec = (dist / gSpeed).toFixed(0);
ret.friendETA = parseInt((estSec + '')) + 30;
ret.friendEtaStr = timestr((ret.friendETA + ''), 1);
}
}
return ret;
},
JumpCity: function (city) {
var t = Tabs.AllianceList;
for (i = 0; i < Seed.cities.length; i++) {
if (Seed.cities[i][1] == city) var cityNum = i;
}
cityNum++;
var obj = document.getElementById('citysel_' + cityNum);
return t.ClickWin(window, obj, 'click');
},
ClickWin: function (win, obj, evtName) {
var evt = win.document.createEvent("MouseEvents");
evt.initMouseEvent(evtName, true, true, win,
0, 0, 0, 0, 0, false, false, false, false, 0, null);
return !obj.dispatchEvent(evt);
},
};
/*********************************** Test TAB ***********************************/
Tabs.Test = {
tabOrder: 100,
tabDisabled: !ENABLE_TEST_TAB,
cont: null,
init: function (div) {
var t = Tabs.Test;
t.cont = div;
var citySelect = ' <SELECT id=fakeCity>';
for (var c = 0; c < Cities.numCities; c++) {
aCity = Cities.cities[c].name + ' (' + Cities.cities[c].x + ',' + Cities.cities[c].y + ')';
citySelect += '<option value=\'' + c + '\'>' + aCity + '</option>';
}
citySelect += '</select>';
var m = '<TABLE><TR><TD align=right>Scout: </td><TD><INPUT type=checkbox id=fakeIsScout></td></tr>\
<TR><TD align=right>Wild: </td><TD><INPUT type=checkbox id=fakeIsWild></td></tr>\
<TR><TD align=right>False Report: </td><TD><INPUT type=checkbox disabled id=fakeFalse></td></tr>\
<TR><TD align=right>Seconds: </td><TD><INPUT type=text size=4 value=300 id=fakeSeconds></td></tr>\
<TR><TD align=right># of Supply: </td><TD><INPUT type=text size=6 value=0 id=faketroop0></td></tr>\
<TR><TD align=right># of Militia: </td><TD><INPUT type=text size=9 value=0 id=faketroop1></td></tr>\
<TR><TD align=right># of Scouts: </td><TD><INPUT type=text size=9 value=0 id=faketroop2></td></tr>\
<TR><TD align=right># of Pikes: </td><TD><INPUT type=text size=9 value=0 id=faketroop3></td></tr>\
<TR><TD align=right># of Swords: </td><TD><INPUT type=text size=9 value=0 id=faketroop4></td></tr>\
<TR><TD align=right># of Archers: </td><TD><INPUT type=text size=9 value=0 id=faketroop5></td></tr>\
<TR><TD align=right># of Calvary: </td><TD><INPUT type=text size=9 value=0 id=faketroop6></td></tr>\
<TR><TD align=right># of Heavy Cav: </td><TD><INPUT type=text size=9 value=0 id=faketroop7></td></tr>\
<TR><TD align=right># of Wagons: </td><TD><INPUT type=text size=9 value=0 id=faketroop8></td></tr>\
<TR><TD align=right># of Ballistas: </td><TD><INPUT type=text size=9 value=0 id=faketroop9></td></tr>\
<TR><TD align=right># of Battering Ram: </td><TD><INPUT type=text size=9 value=0 id=faketroop10></td></tr>\
<TR><TD align=right># of Catapults: </td><TD><INPUT type=text size=9 value=0 id=faketroop11></td></tr>\
<TR><TD align=right># of Bloodthorns: </td><TD><INPUT type=text size=9 value=0 id=faketroop12></td></tr>\
<TR><TD align=right># of Executioners: </td><TD><INPUT type=text size=9 value=0 id=faketroop13></td></tr>\
<TR><TD align=right># of Siege Walls: </td><TD><INPUT type=text size=9 value=0 id=faketroop14></td></tr>\
<TR><TD align=right># of Flame Archers: </td><TD><INPUT type=text size=9 value=0 id=faketroop15></td></tr>\
<TR><TD align=right># of Hussars: </td><TD><INPUT type=text size=9 value=0 id=faketroop16></td></tr>\
<TR><TD align=right># of Halberdiers: </td><TD><INPUT type=text size=9 value=0 id=faketroop17></td></tr>\
<TR><TD align=right># of Onagers: </td><TD><INPUT type=text size=9 value=0 id=faketroop18></td></tr>\
<TR><TD align=right>Fake name to use: </td><TD><INPUT type=text size=15 value=oftheNOOBS id=fakeName></td></tr>\
<TR><TD align=right>Target city: </td><TD>' + citySelect + '</td></tr>\
<TR><TD colspan=2 align=center><INPUT id=testSendMarch type=submit value="Fake Attack" \></td></tr></table>\
<INPUT id=ptReloadKOC type=submit value="Reload KOC" \>\
<BR><DIV id=testDiv style="background-color:#fffff0; maxwidth:675; max-height:430px; height:430px; overflow-y:auto;"></div>';
t.cont.innerHTML = m;
document.getElementById('testSendMarch').addEventListener('click', t.clickFakeAttack, false);
document.getElementById('ptReloadKOC').addEventListener('click', t.reloadKOC, false);
function xyNotify(city, x, y) {
var m = '[ Notified: ' + (city ? city.name : 'null') + ', x=' + x + ', y=' + y + ' ]';
document.getElementById('testNotify').innerHTML = m;
}
},
hide: function () {},
show: function () {},
reloadKOC: function () {
var goto = 'https://apps.facebook.com/kingdomsofcamelot/?s=' + GetServerId();
var t = '<FORM target="_top" action="' + goto + '" method=post><INPUT id=xxptButReload type=submit value=RELOAD><INPUT type=hidden name=s value="' + GetServerId() + '"</form>';
var e = document.createElement('div');
e.innerHTML = t;
document.body.appendChild(e);
setTimeout(function () {
document.getElementById('xxptButReload').click();
}, 0);
},
writeDiv: function (msg) {
var t = Tabs.Test;
if (t.state != null)
document.getElementById('testDiv').innerHTML = msg;
},
addDiv: function (msg) {
var t = Tabs.Test;
if (t.state != null)
document.getElementById('testDiv').innerHTML += msg;
},
createFakeAttack: function (cityNum, isScout, isWild, isFalse, secs, troops, name) {
var marchId = 'm' + (88888 + Math.floor(Math.random() * 11111));
var march = {};
if (matTypeof(Seed.queue_atkinc) == 'array')
Seed.queue_atkinc = {};
if (isFalse)
march.marchType = 0;
else if (isScout)
march.marchType = 3;
else
march.marchType = 4;
march.toCityId = Cities.cities[cityNum].id;
if (isWild) {
keys = uW.Object.keys(Seed.wilderness['city' + Cities.cities[cityNum].id]);
march.toTileId = Seed.wilderness['city' + Cities.cities[cityNum].id][keys[0]].tileId;
} else {
march.toTileId = Cities.cities[cityNum].tileId;
}
secs = parseInt(secs);
march.arrivalTime = unixTime() + secs;
march.departureTime = unixTime() - 10;
march.unts = {}
var unitsarr = [];
for (j in unsafeWindow.unitcost)
unitsarr.push(0);
for (i = 0; i < unitsarr.length; i++) {
if (troops[i] > 0)
if (i < 18) march.unts["u" + (i + 1)] = addCommas(troops[i]);
else march.unts["u" + (i + 3)] = addCommas(troops[i]);
}
march.pid = 1234567;
march.score = 9;
march.mid = marchId.substr(1);
march.players = {}
march.players.u1234567 = {}
march.players.u1234567.n = name;
march.players.u1234567.t = 60;
march.players.u1234567.m = 5441192;
march.players.u1234567.s = 'M';
march.players.u1234567.w = 1;
march.players.u1234567.a = 1;
march.players.u1234567.i = 5;
Seed.queue_atkinc[marchId] = march;
Seed.players.u1234567 = march.players.u1234567;
},
clickFakeAttack: function () {
var t = Tabs.Test;
var isScout = document.getElementById('fakeIsScout').checked;
var isWild = document.getElementById('fakeIsWild').checked;
var isFalse = document.getElementById('fakeFalse').checked;
var troops = [];
var unitsarr = [];
for (j in unsafeWindow.unitcost)
unitsarr.push(0);
for (i = 0; i < unitsarr.length; i++)
troops[i] = parseInt(document.getElementById('faketroop' + i).value);
var secs = parseInt(document.getElementById('fakeSeconds').value);
var name = document.getElementById('fakeName').value;
var city = document.getElementById('fakeCity').value;
t.createFakeAttack(city, isScout, isWild, isFalse, secs, troops, name);
},
}
/*********************************** Info tab ***********************************/
Tabs.Info = {
tabOrder: 20,
tabLabel: document.getElementById('mod_views_map').innerHTML,
cont: null,
init: function (div) {
var t = Tabs.Info;
t.cont = div;
fortmight = {
u53: "4",
u55: "7",
u60: "1",
u61: "2",
u62: "3",
};
var t = Tabs.Info;
var m = '<DIV style="max-height:735px; height:735px;"><DIV class=ptstat>PROVINCE MAP</div><DIV id=ptProvMap style="height:' + provMapCoords.imgHeight + 'px; width:' + provMapCoords.imgWidth + 'px; background-repeat:no-repeat; background-image:url(\'' + URL_PROVINCE_MAP + '\')"></div>';
m += '<BR><DIV class=ptstat>DISTANCE CALCULATOR</div><DIV class=ptentry><TABLE align=center cellpadding=1 cellspacing=0>\
<TR><TD class=xtab align=left><INPUT id=plot type=checkbox>Plot coords on map.</td></tr>\
<TR><TD class=xtab align=left><B>First Location: </b></td><TD class=xtab> X: <INPUT id=calcX type=text\> Y: <INPUT id=calcY type=text\> Or, choose city: <SPAN id=ptloc1></span></td></tr>\
<TR><TD class=xtab align=left><B>Second Location: </b></td><TD class=xtab> X: <INPUT id=calcX2 type=text\> Y: <INPUT id=calcY2 type=text\> Or, choose city: <SPAN id=ptloc2></span></td></tr></table>\
<CENTER><DIV style="width:60%; font-size:14px; border: 1px solid; background-color:white; margin:20px 3px 3px 0px; padding:4px" id=ptdistout></div></div>\
<BR></center></div>';
t.cont.innerHTML = m + '</div>';
for (var c = 0; c < Cities.numCities; c++)
t.makeCityImg(c, document.getElementById('ptProvMap'));
new CdispCityPicker('ptloc1', document.getElementById('ptloc1'), true, t.eventLocChanged, 0).bindToXYboxes(document.getElementById('calcX'), document.getElementById('calcY'));
new CdispCityPicker('ptloc2', document.getElementById('ptloc2'), true, t.eventLocChanged, 0).bindToXYboxes(document.getElementById('calcX2'), document.getElementById('calcY2'));
t.eventLocChanged(Cities.cities[0], Cities.cities[0].x, Cities.cities[0].y);
document.getElementById('plot').addEventListener('change', function () {
t.plotCityImg(0, document.getElementById('ptProvMap'), document.getElementById('calcX').value, document.getElementById('calcY').value);
t.plotCityImg(1, document.getElementById('ptProvMap'), document.getElementById('calcX2').value, document.getElementById('calcY2').value);
}, false);
},
hide: function () {},
show: function () {},
// var provMapCoords = {imgWidth:680, imgHeight:654, mapWidth:595, mapHeight:595, leftMargin:44, topMargin:39};
makeCityImg: function (cityNum, eMap) {
//logit ('makeCityImg: '+ cityNum);
var t = Tabs.Info;
var city = Cities.cities[cityNum];
// var off = getAbsoluteOffsets (eMap);
var x = parseInt((provMapCoords.mapWidth * city.x) / 750);
var y = parseInt((provMapCoords.mapHeight * city.y) / 750);
var ce = document.createElement('div');
ce.style.background = 'black';
ce.style.opacity = '1.0';
ce.style.position = 'relative';
ce.style.display = 'block';
ce.style.width = '14px';
ce.style.height = '16px';
ce.style.border = '1px solid #fff';
ce.style.color = 'white';
ce.style.textAlign = 'center';
ce.style.top = (y + provMapCoords.topMargin - (cityNum * 16) - 8) + 'px';
ce.style.left = (x + provMapCoords.leftMargin - 7) + 'px';
eMap.appendChild(ce);
ce.innerHTML = (cityNum + 1) + '';
},
plotCityImg: function (cityNum, eMap, x, y) {
//logit ('makeCityImg: '+ cityNum);
var t = Tabs.Info;
var xplot = parseInt((provMapCoords.mapWidth * x) / 750);
var yplot = parseInt((provMapCoords.mapHeight * y) / 750);
if (document.getElementById('plotmap_' + cityNum) == null) {
var ce = document.createElement('div');
ce.style.background = 'white';
ce.id = 'plotmap_' + cityNum;
ce.style.opacity = '1.0';
ce.style.position = 'relative';
ce.style.display = 'block';
ce.style.width = '14px';
ce.style.height = '16px';
ce.style.border = '1px solid #fff';
ce.style.color = 'black';
ce.style.textAlign = 'center';
} else {
ce = document.getElementById('plotmap_' + cityNum);
}
ce.style.top = (yplot + provMapCoords.topMargin - ((Cities.numCities + cityNum) * 16) - 8) + 'px';
ce.style.left = (xplot + provMapCoords.leftMargin - 7) + 'px';
eMap.appendChild(ce);
ce.innerHTML = (cityNum + 1) + '';
},
eventLocChanged: function (city, x, y) {
var t = Tabs.Info;
var x1 = parseInt(document.getElementById('calcX').value);
var x2 = parseInt(document.getElementById('calcX2').value);
if (isNaN(x2))
return;
var y1 = parseInt(document.getElementById('calcY').value);
var y2 = parseInt(document.getElementById('calcY2').value);
var m = 'The distance from ' + x1 + ',' + y1 + ' to ' + x2 + ',' + y2 + ' is: <B>' + distance(x1, y1, x2, y2).toFixed(2) + '</b>';
document.getElementById('ptdistout').innerHTML = m;
if (document.getElementById('plot').checked) {
t.plotCityImg(0, document.getElementById('ptProvMap'), x1, y1);
t.plotCityImg(1, document.getElementById('ptProvMap'), x2, y2);
}
},
}
/*********************************** Options Tab ***********************************/
Tabs.Options = {
tabOrder: 40,
tabLabel: 'Options',
cont: null,
curTabBut: null,
curTabName: null,
fixAvailable: {},
refreshTimer: null,
AscensionTimer: null,
init: function (div) {
var t = Tabs.Options;
t.cont = div;
var main = '<TABLE class=ptTab align=center><TR><TD><INPUT class=pbSubtab ID=ptmrchSubU type=submit value="Options"></td>';
main += '<TD><INPUT class=pbSubtab ID=ptmrchSubV type=submit value="Layout"></td></tr></table><HR class=ptThin>';
main += '<TD width = "100px" ; border:none"><a href="https://code.google.com/p/koc-power-tools/wiki/HowToOptions" target="_blank">HELP</a></td></tr>';
main += '<DIV id=ptOptOutput style="margin-top:10px; background-color:white; height:680px; overflow:auto;"></div>';
t.cont.innerHTML = main;
t.Overv = document.getElementById('ptOptOutput');
document.getElementById('ptmrchSubU').addEventListener('click', e_butSubtab, false);
document.getElementById('ptmrchSubV').addEventListener('click', e_butSubtab, false);
changeSubtab(document.getElementById('ptmrchSub' + Options.curOptTab));
function e_butSubtab(evt) {
changeSubtab(evt.target);
}
function changeSubtab(but) {
if (but == t.curTabBut)
return;
if (t.curTabBut) {
t.curTabBut.className = 'pbSubtab';
t.curTabBut.disabled = false;
}
t.curTabBut = but;
but.className = 'pbSubtab pbSubtabSel';
but.disabled = true;
t.curTabName = but.id.substr(9);
Options.curOptTab = t.curTabName;
t.show();
}
},
SetOptions: function () {
var t = Tabs.Options;
try {
m = '<TABLE class=ptTab>';
m += '<TR><TD colspan=2><B>Config:</b></td></tr>';
m += '<TR><TD><INPUT id=ptAllowWinMove type=checkbox /></td><TD>Enable window drag (move window by dragging top bar with mouse)</td></tr>';
m += '<TR><TD><INPUT id=ptHideOnGoto type=checkbox /></td><TD>Hide window when clicking on map coordinates.</td></tr>';
m += '<TR><TD><INPUT id=ptEnableFoodWarn type=checkbox /></td><TD>Show \'food left\' in RED if food will run out in less than';
m += '<INPUT id=optFoodHours type=text size=3 value="' + Options.foodWarnHours + '"> hours, does NOT affect the food alert anymore!</td></tr>';
// m+='<TR><TD><INPUT id=ptEnableFoodTower type=checkbox /></td><TD>Enable Tower food alert. (Warning set to 6 hours, checked every 30min.)</td></tr>';
m += '<TR><TD><INPUT id=ptEnableFoodTower type=checkbox disabled=true /></td><TD>Disabled Tower food alert in Power Tools - instead, use the Power Bot function.</td></tr>';
m += '<TR><TD><INPUT id=ptEnableWisperAlert type=checkbox /></td><TD>Enable sound alert on whisper' + htmlSelector({
whisper: 'arrow',
whisper2: 'doorbell'
}, Options.whisperplay, 'id=ptwhisplay') + '</td></tr>';
m += '<TR><TD><INPUT id=ptEnableTowerAlert type=checkbox /></td><TD>Enable sound alert on tower alert in chat</td></tr>';
m += '<TR><TD><INPUT id=ptupdate type=checkbox ' + (GlobalOptions.ptupdate ? 'CHECKED ' : '') + '/></td><TD>Check updates on ' + htmlSelector({
0: 'Userscripts',
1: 'Google Code'
}, GlobalOptions.ptupdatebeta, 'id=ptupdatebeta') + ' (all domains) <INPUT id=ptupdatenow type=submit value="Update Now" /></td></tr>';
m += '<TR><TD><INPUT id=ptEnableMiniRefresh type=checkbox ' + (Options.miniRefresh ? 'CHECKED ' : '') + '/></td><TD> Refresh data/marches every ';
m += '<INPUT id=optMiniRefreshIntvl type=text size=3 value="' + Options.miniRefreshIntvl + '"> minutes</td></tr>';
m += '<TR><TD colspan=2><br><B>KofC Features:</b></td></tr>';
m += '<TR><TD><INPUT id=togAllRpts type=checkbox /></td><TD>Enable enhanced Alliance Reports.</td></tr>';
m += '<TR><TD><INPUT id=togAllowAlter type=checkbox /></td><TD>Allow other scripts to change format of Alliance Reports.</td></tr>';
m += '<TR><TD><INPUT id=togAllMembers type=checkbox /></td><TD>Enable enhanced alliance members view.</td></tr>';
m += '<TR><TD><INPUT id=togPageNav type=checkbox /></td><TD>Enhanced page navigation for messages and reports.</td></tr>';
m += '<TR><TD><INPUT id=togGmtClock type=checkbox /></td><TD>Enable GMT clock next to "Camelot Time" </td></tr>';
m += '<TR><TD><INPUT id=togAttackPicker type=checkbox /></td><TD>Enable target city picker in attack dialog (reinforce, reassign and transport)</td></tr>';
m += '<TR><TD><INPUT id=togBatRounds type=checkbox /></td><TD>Display # of rounds in battle reports</td></tr>';
m += '<TR><TD><INPUT id=togAtkDelete type=checkbox /></td><TD>Enable delete button when displaying battle report</td></tr>';
m += '<TR><TD><INPUT id=togRptGift type=checkbox /></td><TD>Enable delete gifts report button in inbox</td></tr>';
m += '<TR><TD><INPUT id=togMapInfo4 type=checkbox /></td><TD>Display Province and Truce Status in map tooltips</td></tr>';
m += '<TR><TD><INPUT id=togCV type=checkbox /></td><TD>Enable enhanced city buttons</td></tr>';
m += '<TR><TD></td><TD><INPUT id=togDbClkDef type=checkbox /> Enable hide/defend by double clicking city icon</td></tr>';
m += '<TR><TD></td><TD><INPUT id=togColrCty type=checkbox /> Enable color icon for city type (refresh required)</td></tr>';
m += '<TR><TD></td><TD><INPUT id=ptWarnAscension type=checkbox ' + (Options.WarnAscension ? 'CHECKED ' : '') + '/>Highlight when Ascension Protection will expire within ';
m += '<INPUT id=ptWarnAscensionInterval type=text size=3 value="' + Options.WarnAscensionInterval + '"> hours</td></tr>';
m += '<TR><TD colspan=2><br><B>KofC Bug Fixes:</b></td></tr>';
m += '<TR><TD><INPUT id=togTowerFix type=checkbox /></td><TD>Fix tower report to show exact target (city, wild or invalid)</td></tr>';
m += '<TR><TD><INPUT id=togKnightSelect type=checkbox /></td><TD>Do not automatically select a knight when changing march type to scout, transport or reassign</td></tr>';
m += '<TR><TD><INPUT id=togCoordBox type=checkbox /></td><TD>Keep map coordinate box/bookmarks on top of troop activity</td></tr>';
m += '<TR><TD><INPUT id=togMapInfo type=checkbox /></td><TD>Fix reassign button on maptile info</td></tr>';
m += '<TR><TD><INPUT id=togMapInfo2 type=checkbox /></td><TD>Add reassign button when clicked on own city</td></tr>';
m += '<TR><TD><INPUT id=togMapInfo3 type=checkbox /></td><TD>Include player name / city name in new bookmarks</td></tr>';
m += '<TR><TD><INPUT id=togMarchUnits type=checkbox /></td><TD>Fix march size calculation in march screen</td></tr>';
m += '<TR><TD><INPUT id=togLoadCapFix type=checkbox /></td><TD>Limit load capacity to not exceed throne room load cap</td></tr>';
m += '<TR><TD><INPUT id=togApothTimeFix type=checkbox /></td><TD>Fix revival time calculator (not working for max button clicked)</td></tr>';
m += '<TR><TD><INPUT id=togTRAetherCostFix type=checkbox /></td><TD>Fix display of aetherstones for throne room upgrade/enhance</td></tr>';
m += '<TR><TD><INPUT id=togMMBImageFix type=checkbox /></td><TD>Post correct image to facebook for Merlin Box</td></tr>';
m += '<TR><TD><INPUT id=togChatTimeFix type=checkbox /></td><TD>Always show local time on chat posts</td></tr>';
m += '<TR><TD><INPUT id=togAllowMulti type=checkbox /></td><TD>Disable Multi-Browser check v2 (experimental)</td></tr>';
m += '<TR><TD><INPUT id=togRaidPatch type=checkbox /></td><TD>Fix stuck raid marches (experimental)</td></tr>';
m += '<TR><td><INPUT id=MoveFurnitureChk type=checkbox /></td><td>Rearrange throne room furniture for better visibility (needs refresh)</td></tr>';
m += '<TR><TD><INPUT id=togMapDblClickFix type=checkbox /></td><TD>Restore double click map tile</td></tr>';
m += '<TR><TD colspan=2><br><B>Auto Training:</b></td></tr>';
m += '<TR><TD></TD><TD><INPUT id=optAutoTrainMins type=text size=1 value="' + parseInt(AutoTrainOptions.intervalSecs / 60) + '"> minutes between auto-training.</td></tr>';
m += '</table><BR><BR><HR>Note that if a checkbox is greyed out there has probably been a change of KofC\'s code, rendering the option inoperable.';
t.Overv.innerHTML = m;
t.togOpt('ptEnableFoodWarn', 'enableFoodWarn');
t.togOpt('ptEnableFoodTower', 'enableFoodTower');
t.togOpt('ptEnableWisperAlert', 'enableWhisperAlert');
t.togOpt('ptEnableTowerAlert', 'enableTowerAlert');
t.togOpt('ptHideOnGoto', 'hideOnGoto');
t.togOpt('ptAllowWinMove', 'ptWinDrag', mainPop.setEnableDrag);
t.togOpt('togAllowAlter', 'allowAlterAR');
t.togOpt('togAllRpts', 'enhanceARpts', AllianceReports.enable);
t.togOpt('togAllMembers', 'enhanceViewMembers', AllianceReports.enable_viewmembers);
t.togOpt('togTowerFix', 'fixTower', TowerAlerts.enableFixTarget, TowerAlerts.isFixTargetAvailable);
t.togOpt('togPageNav', 'fixPageNav', PageNavigator.enable, PageNavigator.isAvailable);
t.togOpt('togGmtClock', 'gmtClock', GMTclock.setEnable);
t.togOpt('togKnightSelect', 'fixKnightSelect', AttackDialog.setEnable, AttackDialog.isKnightSelectAvailable);
t.togOpt('togAttackPicker', 'attackCityPicker', AttackDialog.setEnable, AttackDialog.isCityPickerAvailable);
t.togOpt('togRptGift', 'enhancedinbox', DispReport.setEnable, DispReport.isDispReportAvailable);
t.togOpt('togCV', 'EnhCBtns', t.e_WarnAscensionChanged);
t.togOpt('togDbClkDef', 'DbClkDefBtns');
t.togOpt('togColrCty', 'ColrCityBtns');
t.togOpt('togCoordBox', 'mapCoordsTop', CoordBox.setEnable, CoordBox.isAvailable);
t.togOpt('togMapInfo', 'mapInfo', mapinfoFix.setEnable, mapinfoFix.isAvailable);
t.togOpt('togMapInfo2', 'mapInfo2', mapinfoFix.setEnable2, mapinfoFix.isAvailable2);
t.togOpt('togMapInfo3', 'mapInfo3', mapinfoFix.setEnable3, mapinfoFix.isAvailable3);
t.togOpt('togMapInfo4', 'dispStatus', mapinfoFix.setEnableDispStatus, mapinfoFix.isAvailableDispStatus);
t.togOpt('togMarchUnits', 'fixMarchUnits', MarchUnitsFix.setEnable, MarchUnitsFix.isAvailable);
t.togOpt('togLoadCapFix', 'fixLoadCap', LoadCapFix.setEnable, LoadCapFix.isAvailable);
t.togOpt('togApothTimeFix', 'fixApothTime', ApothTimeFix.setEnable, ApothTimeFix.isAvailable);
t.togOpt('togTRAetherCostFix', 'fixTRAetherCost', TRAetherCostFix.setEnable, TRAetherCostFix.isAvailable);
t.togOpt('togMMBImageFix', 'fixMMBImage', mmbImageFix.setEnable, mmbImageFix.isAvailable);
t.togOpt('togChatTimeFix', 'fixChatTime', ChatTimeFix.setEnable, ChatTimeFix.isAvailable);
t.togOpt('togBatRounds', 'dispBattleRounds', null, battleReports.isRoundsAvailable);
t.togOpt('togAtkDelete', 'reportDeleteButton', null, battleReports.isRoundsAvailable);
t.togOpt('togAllowMulti', 'allowMultiBroswer', bypassMulti.setEnable, bypassMulti.isAvailable);
t.togOpt('togRaidPatch', 'raidPatch', BarbRaidMarchPatch.setEnable, BarbRaidMarchPatch.isAvailable);
t.togOpt('MoveFurnitureChk', 'MoveFurniture');
t.togOpt('togMapDblClickFix', 'fixMapDblClick', MapDoubleClickFix.setEnable, MapDoubleClickFix.isAvailable);
document.getElementById('ptupdate').addEventListener('change', t.e_updateChanged, false);
document.getElementById('ptEnableMiniRefresh').addEventListener('change', t.e_miniRefreshChanged, false);
document.getElementById('ptWarnAscension').addEventListener('change', t.e_WarnAscensionChanged, false);
document.getElementById('ptupdatebeta').addEventListener('change', function () {
GlobalOptions.ptupdatebeta = document.getElementById('ptupdatebeta').value;
GM_setValue('Options_??', JSON2.stringify(GlobalOptions));
}, false);
document.getElementById('ptwhisplay').addEventListener('change', function () {
Options.whisperplay = this.value;
saveOptions();
}, false);
document.getElementById('ptupdatenow').addEventListener('click', function () {
AutoUpdater_116541.call(true, true);
}, false);
document.getElementById('optFoodHours').addEventListener('change', function () {
var x = document.getElementById('optFoodHours').value;
if (isNaN(x) || x < 0.01 || x > 99999) {
document.getElementById('optFoodHours').value = Options.foodWarnHours;
return;
}
Options.foodWarnHours = x;
saveOptions();
}, false);
document.getElementById('optMiniRefreshIntvl').addEventListener('change', function () {
var x = document.getElementById('optMiniRefreshIntvl').value;
if (isNaN(x) || x < 2 || x > 999) {
document.getElementById('optMiniRefreshIntvl').value = Options.miniRefreshIntvl;
return;
}
Options.miniRefreshIntvl = x;
saveOptions();
}, false);
document.getElementById('ptWarnAscensionInterval').addEventListener('change', function () {
var x = document.getElementById('ptWarnAscensionInterval').value;
if (isNaN(x) || x < 1 || x > 999) {
document.getElementById('ptWarnAscensionInterval').value = Options.WarnAscensionInterval;
return;
}
Options.WarnAscensionInterval = x;
saveOptions();
}, false);
if (Options.EnhCBtns && Options.WarnAscension) {
Tabs.Options.checkAscension();
clearInterval(t.WarnAscensionTimer);
t.WarnAscensionTimer = setInterval(function () {
Tabs.Options.checkAscension();
}, 60 * 1000);
}
document.getElementById('optAutoTrainMins').addEventListener('change', function () {
AutoTrainOptions.intervalSecs = 60 * document.getElementById('optAutoTrainMins').value;
saveAutoTrainOptions();
}, false);
if (Options.miniRefresh) {
clearInterval(t.refreshTimer);
t.refreshTimer = setInterval(function () {
Tabs.Options.updateAll();
}, Options.miniRefreshIntvl * 60 * 1000);
}
} catch (e) {
new CdialogCancelContinue('<PRE>' + e + '</pre>', null, null, true);
t.Overv.innerHTML = '<PRE>' + e + '</pre>';
}
},
Layout: function () {
var t = Tabs.Options;
try {
m = '<TABLE class=ptTab>';
m += '<TR><TD colspan=2><U><B>Chat Layout:</b></u></td></tr>';
m += '<TR><TD><INPUT id=togChatStuff type=checkbox /></td><TD>Enable Chat Enable Chat enhancements (clickable coords, click on icon to whisper, colors).</td></tr>';
m += '<TR><TD><INPUT id=togChatGlobal type=checkbox /></td><TD>Enable Global chat background color.</td></tr>';
m += '<TR><TD><INPUT id=togChatAlliance type=checkbox /></td><TD>Enable Alliance chat background color.</td></tr>';
m += '<TR><TD><INPUT id=togChatWhisper type=checkbox /></td><TD>Enable Whisper in Color Font.</td></tr>';
m += '<TR><TD><INPUT id=togChatBold type=checkbox /></td><TD>Enable Chat in Bold Font.</td></tr>';
m += '<TR><TD><INPUT id=togChatAttack type=checkbox /></td><TD>Enable background color on tower alert.</td></tr>';
m += '<TR><TD><INPUT id=togChatLead type=checkbox /></td><TD>Enable background for alliance Leaders.</td></tr>';
m += '<TR><TD><INPUT id=togChatIcon type=checkbox /></td><TD>Enable facebook profile pictures in chat instead of kabam avatars.<SPAN class=boldRed> (NEW)</span></td></tr>';
m += '</table>';
m += '<TABLE class=ptTab><BR><TR><TD colspan=2><U><B>Colors: (Refresh for effect)</b></u></td></tr>';
m += '<TR><TD>Chat Color - Global: </td><TD><INPUT id=togGlobal type=text size=7 maxlength=7 value="' + Colors.ChatGlobal + '"></td> <TD style="background-color:' + Colors.ChatGlobal + '" width=30px> </td></tr>';
m += '<TR><TD>Chat Color - Alliance: </td><TD><INPUT id=togAll type=text size=7 maxlength=7 value="' + Colors.ChatAll + '"></td> <TD style="background-color:' + Colors.ChatAll + '" width=30px> </td></tr>';
m += '<TR><TD>Chat Color - Tower Alert: </td><TD><INPUT id=togChatAtt type=text size=7 maxlength=7 value="' + Colors.ChatAtt + '"></td> <TD style="background-color:' + Colors.ChatAtt + '" width=30px> </td></tr>';
m += '<TR><TD>Chat Color - Whisper Alert: </td><TD><INPUT id=togWhisper type=text size=7 maxlength=7 value="' + Colors.ChatWhisper + '"></td> <TD style="background-color:' + Colors.ChatWhisper + '" width=30px> </td></tr>';
m += '<TR><TD>Chat Color - Chancy: </td><TD><INPUT id=togChatC type=text size=7 maxlength=7 value="' + Colors.ChatChancy + '"></td> <TD style="background-color:' + Colors.ChatChancy + '" width=30px> </td></tr>';
m += '<TR><TD>Chat Color - Vice-C: </td><TD><INPUT id=togChatVC type=text size=7 maxlength=7 value="' + Colors.ChatVC + '"></td> <TD style="background-color:' + Colors.ChatVC + '" width=30px> </td></tr>';
m += '<TR><TD>Chat Color - Officers: </td><TD><INPUT id=togChatLeaders type=text size=7 maxlength=7 value="' + Colors.ChatLeaders + '"></td> <TD style="background-color:' + Colors.ChatLeaders + '" width=30px> </td></tr>';
m += '<TR><TD>General - Dark Row: </td><TD><INPUT id=togDarkRow type=text size=7 maxlength=7 value="' + Colors.DarkRow + '"></td> <TD style="background-color:' + Colors.DarkRow + '" width=30px> </td></tr>';
m += '<TR><TD>General - Button Selected: </td><TD><INPUT id=togButClick type=text size=7 maxlength=7 value="' + Colors.ButtonSelected + '"></td> <TD style="background-color:' + Colors.ButtonSelected + '" width=30px> </td></tr>';
m += '<TR><TD>Overview - Dark Rows:</td><TD><INPUT id=togOverDarkRow type=text size=7 maxlength=7 value="' + Colors.OverviewDarkRow + '"></td> <TD style="background-color:' + Colors.OverviewDarkRow + '" width=30px> </td></tr>';
m += '<TR><TD>Transparency: <span style="color:#800;"><sup>(0.7 - 2)</sup></span></td><TD><INPUT id=togOpacity type=text size=3 maxlength=3 value="' + Colors.Opacity + '"/></td><TD></tr>';
m += '</table><BR><BR><DIV>HTML colors: ';
m += '<a href="http://www.colorpicker.com/" target="_blank">Color Picker</a> / ';
m += '<a href="http://www.w3schools.com/html/html_colors.asp" target="_blank">Colors</a>';
m += '</table><BR><BR><HR>To apply colors you need to REFRESH!<BR>';
m += strButton20('Reset Colors', 'id=ResetALL');
t.Overv.innerHTML = m;
t.togOpt('togChatStuff', 'chatEnhance', ChatStuff.setEnable, ChatStuff.isAvailable);
t.togOpt('togChatGlobal', 'chatglobal');
t.togOpt('togChatAlliance', 'chatalliance');
t.togOpt('togChatWhisper', 'chatwhisper');
t.togOpt('togChatBold', 'chatbold');
t.togOpt('togChatAttack', 'chatAttack');
t.togOpt('togChatLead', 'chatLeaders');
t.togOpt('togChatIcon', 'ChatIcons');
document.getElementById('togGlobal').addEventListener('change', function () {
Colors.ChatGlobal = document.getElementById('togGlobal').value;
t.Layout()
}, false);
document.getElementById('togChatLeaders').addEventListener('change', function () {
Colors.ChatLeaders = document.getElementById('togChatLeaders').value;
t.Layout()
}, false);
document.getElementById('togChatC').addEventListener('change', function () {
Colors.ChatChancy = document.getElementById('togChatC').value;
t.Layout()
}, false);
document.getElementById('togChatVC').addEventListener('change', function () {
Colors.ChatVC = document.getElementById('togChatVC').value;
t.Layout()
}, false);
document.getElementById('togDarkRow').addEventListener('change', function () {
Colors.DarkRow = document.getElementById('togDarkRow').value;
t.Layout()
}, false);
document.getElementById('togButClick').addEventListener('change', function () {
Colors.ButtonSelected = document.getElementById('togButClick').value;
t.Layout()
}, false);
document.getElementById('togOverDarkRow').addEventListener('change', function () {
Colors.OverviewDarkRow = document.getElementById('togOverDarkRow').value;
t.Layout()
}, false);
document.getElementById('togAll').addEventListener('change', function () {
Colors.ChatAll = document.getElementById('togAll').value;
t.Layout()
}, false);
document.getElementById('togChatAtt').addEventListener('change', function () {
Colors.ChatAtt = document.getElementById('togChatAtt').value;
t.Layout()
}, false);
document.getElementById('togWhisper').addEventListener('change', function () {
Colors.ChatWhisper = document.getElementById('togWhisper').value;
t.Layout()
}, false);
document.getElementById('togOpacity').addEventListener('change', function () {
Colors.Opacity = document.getElementById('togOpacity').value;
t.Layout()
}, false);
document.getElementById('ResetALL').addEventListener('click', function () {
RemoveList = (GM_listValues());
for (i = 0; i < RemoveList.length; i++) {
if (RemoveList[i] == "Colors") GM_deleteValue(RemoveList[i]);
}
ResetColors = true;
reloadKOC();
}, false);
} catch (e) {
new CdialogCancelContinue('<PRE>' + inspect(e, 3, 1) + '</pre>', null, null, true);
t.cont.innerHTML = '<PRE>' + e.name + ' : ' + e.message + '</pre>';
}
},
hide: function () {},
show: function () {
var t = Tabs.Options;
if (t.curTabName == 'U')
t.SetOptions();
else if (t.curTabName == 'V')
t.Layout();
},
togOpt: function (checkboxId, optionName, callEnable, callIsAvailable) {
var t = Tabs.Options;
var checkbox = document.getElementById(checkboxId);
if (callIsAvailable && callIsAvailable() == false) {
checkbox.disabled = true;
return;
}
if (Options[optionName])
checkbox.checked = true;
checkbox.addEventListener('change', new eventToggle(checkboxId, optionName, callEnable).handler, false);
function eventToggle(checkboxId, optionName, callOnChange) {
this.handler = handler;
var optName = optionName;
var callback = callOnChange;
function handler(event) {
Options[optionName] = this.checked;
saveOptions();
if (callback != null)
callback(this.checked);
}
}
},
e_updateChanged: function () {
GlobalOptions.ptupdate = document.getElementById('ptupdate').checked;
GM_setValue('Options_??', JSON2.stringify(GlobalOptions));
},
e_miniRefreshChanged: function () {
Options.miniRefresh = document.getElementById('ptEnableMiniRefresh').checked;
saveOptions();
clearInterval(t.refreshTimer);
if (Options.miniRefresh) {
Tabs.Options.updateAll();
t.refreshTimer = setInterval(function () {
Tabs.Options.updateAll();
}, Options.miniRefreshIntvl * 60 * 1000);
}
},
e_WarnAscensionChanged: function () {
Options.WarnAscension = document.getElementById('ptWarnAscension').checked;
saveOptions();
clearInterval(t.WarnAscensionTimer);
if (Options.EnhCBtns && Options.WarnAscension) {
t.WarnAscensionTimer = setInterval(function () {
Tabs.Options.checkAscension();
}, 60 * 1000); // every min?
}
Tabs.Options.checkAscension();
},
checkAscension: function () {
logit('checking ascension...');
var t = Tabs.Options;
for (i = 0; i < uW.seed.cities.length; i++) {
var cityidx = i + 1;
var city = document.getElementById('citysel_' + cityidx);
if (!city) {
setTimeout(t.checkAscension, 2000);
return;
}
if (!Options.WarnAscension || !Options.EnhCBtns) {
uW.jQuery('#citysel_' + cityidx).removeClass('city_warning');
} else {
var cityExpTime = uW.seed.cityData.city[uW.seed.cities[i][0]].prestigeInfo.prestigeBuffExpire;
if (!isNaN(cityExpTime) && (cityExpTime >= unixTime()) && ((cityExpTime - unixTime()) <= (Options.WarnAscensionInterval * 3600))) {
if (uW.jQuery('#citysel_' + cityidx).hasClass('city_unselected')) {
uW.jQuery('#citysel_' + cityidx).addClass('city_warning');
}
} else {
uW.jQuery('#citysel_' + cityidx).removeClass('city_warning');
}
}
}
},
// This function grabs a fresh copy of the main_src and replaces the seed variable with the returned data.
// This refreshes the data without a full web page refresh.
updateAll: function () {
// stop update_seed_ajax while this is happening. This is a kabam indicator (but it does still fire on a cancel training.. who knows why they've done it like that)
uW.g_update_seed_ajax_do = true;
//potential fix for missing troop recalls: true flag forces troop march update
//unsafeWindow.update_seed_ajax(true);
// update the timestamps
var ts = (new Date().getTime() / 1000) + uW.g_timeoff;
var cts = parseInt((ts - 25.1) * 1000);
var upd = window.self.location.href;
upd = upd.replace(/ts=\d*\.\d+/, "ts=" + ts);
upd = upd.replace(/cts=\d*/, "cts=" + cts);
//logit("Request: " + upd);
var params = uW.Object.clone(uW.g_ajaxparams);
new AjaxRequest(
upd, {
method: "POST",
parameters: params,
onSuccess: function (rslt) {
// let update_seed_ajax run again in game
uW.g_update_seed_ajax_do = false;
var mainSrcHTMLCode = rslt.responseText;
var myregexp = /var seed=\{.*?\};/;
var match = myregexp.exec(mainSrcHTMLCode);
if (match != null) {
//logit("found match");
result = match[0];
result = result.substr(4);
var seed2 = eval(result);
for (jj in seed2) {
if (jj != 'resources')
if (seed2.hasOwnProperty(jj)) {
Seed[jj] = seed2[jj];
}
}
// delete Seed.ss;
for (var o = 0; o < Seed.cities.length; o++) {
var n = Seed.cities[o][0];
Seed.citystats["city" + n].pop[0] = parseInt(Seed.citystats["city" + n].pop[0]);
Seed.citystats["city" + n].pop[1] = parseInt(Seed.citystats["city" + n].pop[1]);
Seed.citystats["city" + n].pop[2] = parseInt(Seed.citystats["city" + n].pop[2]);
Seed.citystats["city" + n].gold[0] = parseInt(Seed.citystats["city" + n].gold[0]);
Seed.citystats["city" + n].gold[1] = parseInt(Seed.citystats["city" + n].gold[1]);
Seed.newTradeReports = parseInt(Seed.newTradeReports);
for (var m = 1; m < 5; m++) {
Seed.resources["city" + n]["rec" + m][0] = parseInt(Seed.resources["city" + n]["rec" + m][0]);
Seed.resources["city" + n]["rec" + m][1] = parseInt(Seed.resources["city" + n]["rec" + m][1]);
Seed.resources["city" + n]["rec" + m][2] = parseInt(Seed.resources["city" + n]["rec" + m][2]);
Seed.resources["city" + n]["rec" + m][3] = parseInt(Seed.resources["city" + n]["rec" + m][3]);
}
var b = Seed.queue_con["city" + n];
var d = unsafeWindow.Object.keys(Seed.buildings["city" + n]);
for (var h = 0; h < b.length; h++) {
for (var m = 0; m < d.length; m++) {
if (Seed.buildings["city" + n][d[m]][3] == b[h][2]) {
b[h][7] = Seed.buildings["city" + n][d[m]][2];
break;
}
}
}
}
if (Seed.queue_throne.length == 0) {
Seed.queue_throne = {}
}
unsafeWindow.kocThroneItems = {};
unsafeWindow.createThroneItems();
unsafeWindow.cm.ThroneView.renderInventory(unsafeWindow.kocThroneItems);
unsafeWindow.seed.player.g = seed_player_g;
}
},
onFailure: function () {
// let update_seed_ajax run again in game
uW.g_update_seed_ajax_do = false;
logit("ERROR ********: ", inspect(rslt, 3, 1));
if (notify != null)
notify(rslt.errorMsg);
},
});
},
}
/******************* KOC Map interface ****************/
Map = {
/***
0: bog
10: grassland
11: lake
20: woods
30: hills
40: mountain
50: plain
51: city / barb
53: misted city
***/
generateBlockList: function (left, top, width) {
var width5 = parseInt(width / 5);
var bl = [];
for (x = 0; x < width5; x++) {
xx = left + (x * 5);
if (xx > 745)
xx -= 750;
for (y = 0; y < width5; y++) {
yy = top + (y * 5);
if (yy > 745)
yy -= 750;
bl.push('bl_' + xx + '_bt_' + yy);
}
}
return bl.join(",");
},
callback: null,
request: function (left, top, width, cb) {
if (DEBUG_TRACE) logit(" 1 Map.request(): " + left + ' , ' + top + ' , ' + width);
left = parseInt(left / 5) * 5;
top = parseInt(top / 5) * 5;
width = parseInt((width + 4) / 5) * 5;
var blockString = this.generateBlockList(left, top, width);
Map.callback = cb;
if (uW.SANDBOX)
return RequestMAPTEST(left, top, width, callback);
var params = uW.Object.clone(uW.g_ajaxparams);
params.blocks = blockString;
new MyAjaxRequest(uW.g_ajaxpath + "ajax/fetchMapTiles.php" + uW.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (rslt) {
if (DEBUG_TRACE) logit(" 2 Map.request Map = " + inspect(Map, 2, 1, 2));
Map.callback(left, top, width, rslt);
},
onFailure: function (rslt) {
Map.callback(left, top, width, rslt);
}
});
},
};
/*************************************** Train Tab ***********************************************/
Tabs.Train = {
tabOrder: 15,
tabLabel: uW.g_js_strings.commonstr.train,
cont: null,
timer: null,
stats: {},
selectedCity: {},
cityNum: 0,
trainTimer: null,
running: false,
gamble: {
"1": {
"min": "5",
"max": "15",
"cost": "2"
},
"2": {
"min": "10",
"max": "25",
"cost": "4"
}
},
nextAuto: null,
defenseOptions: "<option value='53'>Crossbow</option><option value='55'>Trebuchet</option><option value='60'>Trap</option><option value='61'>Caltrop</option><option value='62'>Spiked Barrier</option>",
prevCityNo: 0,
init: function (div) {
var t = Tabs.Train;
t.cont = div;
uW.cancelTrain = t.butcancelTrain;
uW.cancelFort = t.butcancelFort;
s = "<DIV style='max-height:740px; height:740px; max-width:745px; width:745px; overflow-y:auto'><DIV id=trainTopSelect >\
<DIV class=ptstat id=trainheader>" + uW.g_js_strings.modal_openBarracks.trainttl + " & " + uW.g_js_strings.modal_openWalls.builddefenses + "</div>\
<DIV style='height:5px'></div><DIV class=ptentry>\
<DIV style='text-align:center; margin-bottom:5px;'>" + uW.g_js_strings.commonstr.city + ": <span id=ptspeedcity></span></div>\
<TABLE class=ptTab width=100%><TR valign=top><TD width=50%>\
<TABLE align=center><TR><TD align=right>" + uW.g_js_strings.modal_messages_viewdesertionreports.trooptypes + ": </td><TD colspan=2>\
<SELECT id=ptttType>";
for (var ui in uW.cm.UNIT_TYPES) {
i = uW.cm.UNIT_TYPES[ui];
s += '<option value=' + i + '>' + uW.unitcost['unt' + i][0] + '</option>';
}
s += "</select> (" + uW.g_js_strings.commonstr.max + " <span id=ptttSpMax></span>)</td></tr>\
<TR><TD align=right>" + uW.g_js_strings.modal_barracks_train.numtotrain + ": </td><TD><INPUT id='ptttInpPS' size=5 type='text' value='0'\></td>\
<TD><INPUT id='ptttButMaxPS' type=submit value='" + uW.g_js_strings.commonstr.max + "'\> (\
" + uW.g_js_strings.commonstr.max + " <span id=ptttSpMaxPS>0</span>)</td></tr>\
<TR><TD align=right>" + uW.buildingcost.bdg13[0] + ": </td><TD><INPUT id='ptttInpSlots' size=2 type='text' value='1'\></td>\
<TD width=75%><INPUT id='ptttButMaxSlots' type=submit value='" + uW.g_js_strings.commonstr.max + "'\> \
(" + uW.g_js_strings.commonstr.max + " <span id=ptttSpMaxSlots>1</span>)</td></tr>\
<TR><TD align=right valign=top></td><TD colspan=2><INPUT type=CHECKBOX id=chkPop" + (Options.maxIdlePop ? ' CHECKED ' : '') + "> \
<SPAN style='white-space:normal;'>" + uW.g_js_strings.commonstr.use + " " + uW.g_js_strings.commonstr.workers + "</span>\
<br><SELECT id=tutelage>\
<option value='0'><CENTER>--- " + uW.g_js_strings.commonstr.items + " " + uW.g_js_strings.commonstr.speedup + " ---</center></option>\
<option value='36'>" + uW.itemlist.i36.name + "</option>\
<option value='37'>" + uW.itemlist.i37.name + "</option>\
<option value='38'>" + uW.itemlist.i38.name + "</option>\
</select>\
<br><br><SELECT id=pttrgamble>\
<option value='0'><CENTER>--- " + uW.g_js_strings.commonstr.resources + " " + uW.g_js_strings.commonstr.speedup + " ---</center></option>\
<option value=1>Use " + t.gamble[1].cost + "x resources (" + t.gamble[1].min + " - " + t.gamble[1].max + "%)</option>\
<option value=2>Use " + t.gamble[2].cost + "x resources (" + t.gamble[2].min + " - " + t.gamble[2].max + "%)</option>\
</select>\
</td></tr>\
<TR><TD colspan=3 align=center><DIV id=pbTroopTimeEst></div></td></tr>\
<TR><TD colspan=3 align=center><DIV style='height:10px'></div><INPUT id='ptttButDo' type=submit value='" + uW.g_js_strings.modal_openBarracks.trainttl + "'\
></td></tr>\
</table></td><TD width=20></td><TD style='border-left:solid 2px;' width=50% align=center>\
<TABLE align=center><TR><TD align=right>" + uW.g_js_strings.modal_openWalls.builddefenses + ": </td><TD colspan=2>\
<SELECT id=pttdType>\
<option value='53'>" + uW.fortcost.frt53[0] + "</option>\
<option value='55'>" + uW.fortcost.frt55[0] + "</option>\
<option value='60'>" + uW.fortcost.frt60[0] + "</option>\
<option value='61'>" + uW.fortcost.frt61[0] + "</option>\
<option value='62'>" + uW.fortcost.frt62[0] + "</option>\
</select> (<span id=pttdSpMax></span>)</td>\
<TR><TD align=right>" + uW.g_js_strings.modal_walls_train.numdefbuild + ": </td><TD><INPUT id='pttdInpPS' size=5 type='text' value='0'\></td>\
<TD><INPUT id='pttdButMaxPS' type=submit value='" + uW.g_js_strings.commonstr.max + "'\> (" + uW.g_js_strings.commonstr.max + "\
<span id=pttdSpMaxPS>0</span>)</td></tr>\
<TR><TD align=right>" + uW.g_js_strings.commonstr.space + "(" + uW.buildingcost.bdg19[0] + "): </td>\
<TD><INPUT id='pttdInpSlots' size=2 type='text' value='1'\></td>\
<TD width=75%><INPUT id='pttdButMaxSlots' type=submit value='" + uW.g_js_strings.commonstr.max + "'\> (\
" + uW.g_js_strings.commonstr.max + " <span id=pttdSpMaxSlots>1</span>)</td></tr>\
<TR align=center><TD colspan=3><SPAN id=pttdSpace></span></td></tr>\
<TR><TD align=center colspan=3><INPUT type=CHECKBOX id=chkDoTraps" + (AutoTrainOptions.doTraps[1] ? ' CHECKED ' : '') + ">Max Traps (Min=1 Max=5)</TD></TR>\
<TR><TD align=center colspan=3><INPUT type=CHECKBOX id=chkDoCaltrops" + (AutoTrainOptions.doCalrops[1] ? ' CHECKED ' : '') + ">Max Caltraps (Min=1 Max=5)</TD></TR>\
<TR><TD align=center colspan=3><INPUT type=CHECKBOX id=chkDoSpikes" + (AutoTrainOptions.doSpikes[1] ? ' CHECKED ' : '') + ">Max Spikes (Min=1 Max=5)</TD></TR>\
<TR><TD align=center colspan=3><INPUT type=CHECKBOX id=chkDoXbows" + (AutoTrainOptions.doXbows[1] ? ' CHECKED ' : '') + ">Max Xbows (Min=1 Max=5)</TD></TR>\
<TR><TD colspan=3 align=center><DIV style='height:10px'>\
<SELECT id=siege>\
<option value='0'><CENTER>--- " + uW.g_js_strings.commonstr.speedup + " ---</center></option>\
<option value='26'>" + uW.itemlist.i26.name + "</option>\
</select></div>\
<BR><INPUT id='pttdButDo' type=submit value='" + uW.g_js_strings.modal_openWalls.builddefenses + "'\></td></tr></table>\
</td></tr></table></div></div>\
<TABLE align=center width=425 class=ptTab><TR><TD><div id=ptTrainStatus style='overflow-y:auto; max-height:78px; height: 78px;'></div></td></tr></table>\
<div style='height: 330px; background: #e8ffe8'>\
<TABLE width=100% class=ptTab><TR><TD colspan=3><DIV id=divSTtop></div></td></tr>\
<TR><TD width=50% style='padding-left:15px; padding-right:15px'><DIV style='text-align:center'>\
<B>" + uW.g_js_strings.commonstr.troops + " (" + uW.g_js_strings.modal_openBarracks.trainingttl + ")\
(<SPAN id=statTTtot></span>)</b><BR><HR></div><DIV id=divSTleft style='overflow-y: auto; height:210px; max-height:210px'></div></td>\
<TD width=50% style='padding-left:15px; padding-right:15px'><DIV style='text-align:center'><B>" + uW.g_js_strings.modal_openWalls.defqueue + " (<SPAN\ id=statDTtot></span>)</b><BR><HR></div><DIV id=divSTright style='overflow-y: auto; height:210px; max-height:210px'></div></td></tr>\
</div></div>";
t.cont.innerHTML = s;
t.clickCitySelect;
if (document.getElementById('ptttInpPS').value != "")
t.dispTroopTrainTimes();
document.getElementById('ptttInpPS').addEventListener('keyup', function () {
if (document.getElementById('ptttInpPS').value != "") {
t.dispTroopTrainTimes();
} else {
document.getElementById('ptttInpPS').value = "0"
t.dispTroopTrainTimes();
}
});
document.getElementById('ptttType').addEventListener('change', function () {
if (document.getElementById('ptttInpPS').value > 0) {
t.dispTroopTrainTimes();
}
t.lastQueString = null;
t.displayCityStats();
});
t.TTspMax = document.getElementById('ptttSpMax');
t.TTspMaxPS = document.getElementById('ptttSpMaxPS');
t.TTspMaxSlots = document.getElementById('ptttSpMaxSlots');
t.TTbutMaxSlots = document.getElementById('ptttButMaxSlots');
t.TTbutMaxPerSlot = document.getElementById('ptttButMaxPS');
t.TTinpPerSlot = document.getElementById('ptttInpPS');
t.TTinpSlots = document.getElementById('ptttInpSlots');
t.TTselType = document.getElementById('ptttType');
t.TTbutDo = document.getElementById('ptttButDo');
t.TDspMax = document.getElementById('pttdSpMax');
t.TDspMaxPS = document.getElementById('pttdSpMaxPS');
t.TDspMaxSlots = document.getElementById('pttdSpMaxSlots');
t.TDbutMaxSlots = document.getElementById('pttdButMaxSlots');
t.TDbutMaxPerSlot = document.getElementById('pttdButMaxPS');
t.TDinpPerSlot = document.getElementById('pttdInpPS');
t.TDinpSlots = document.getElementById('pttdInpSlots');
t.TDselType = document.getElementById('pttdType');
t.TDbutDo = document.getElementById('pttdButDo');
t.TDspSpace = document.getElementById('pttdSpace');
t.divTrainStatus = document.getElementById('ptTrainStatus');
t.TTinpSlots.addEventListener('change', t.updateTopTroops, false);
t.TTbutMaxPerSlot.addEventListener('click', t.clickTroopMaxPS, false);
t.TTbutMaxSlots.addEventListener('click', t.clickTroopMaxSlots, false);
t.TTselType.addEventListener('change', t.changeTroopSelect, false);
t.TTbutDo.addEventListener('click', t.clickTroopDo, false);
t.TDinpSlots.addEventListener('change', t.updateTopDef, false);
t.TDselType.addEventListener('change', t.changeDefSelect, false);
t.TDbutMaxPerSlot.addEventListener('click', t.clickDefMaxPS, false);
t.TDbutMaxSlots.addEventListener('click', t.clickDefMaxSlots, false);
t.TDbutDo.addEventListener('click', t.clickDefDo, false);
var dcp = new CdispCityPicker('ptspeed', document.getElementById('ptspeedcity'), true, t.clickCitySelect, 0);
document.getElementById('chkPop').addEventListener('change', t.clickCheckIdlePop, false);
document.getElementById('chkDoTraps').addEventListener('change', t.clickCheckDoTraps, false);
document.getElementById('chkDoCaltrops').addEventListener('change', t.clickCheckDoCaltrops, false);
document.getElementById('chkDoSpikes').addEventListener('change', t.clickCheckDoSpikes, false);
document.getElementById('chkDoXbows').addEventListener('change', t.clickCheckDoXbows, false);
document.getElementById('pttrgamble').addEventListener('change', t.changeTroopSelect, false);
document.getElementById('chkPop').addEventListener('change', t.clickCheckIdlePop, false);
t.changeTroopSelect();
t.changeDefSelect();
t.doAutoTrain(1);
},
dispTroopTrainTimes: function () {
var t = Tabs.Train;
var TroopTypeID = parseInt(document.getElementById('ptttType').value);
var NumOfTroops = parseInt(document.getElementById('ptttInpPS').value);
var TroopTime = unsafeWindow.modal_barracks_traintime(TroopTypeID, NumOfTroops);
var TroopName = unsafeWindow.unitcost['unt' + TroopTypeID][0];
var TotalTime2x5 = TroopTime * 0.95;
var TotalTime2x15 = TroopTime * 0.85;
var TotalTime4x10 = TroopTime * 0.9;
var TotalTime4x25 = TroopTime * 0.75;
var TotalTimeLancelot = TroopTime * 0.7;
var TotalTimeArthur = TroopTime * 0.5;
var TotalTimeMerlin = TroopTime * 0.3;
var TotalTTS = unsafeWindow.cm.ThroneController.effectBonus(77);
var baseTime = t.calcBaseTrainTime(TroopTypeID, NumOfTroops);
message = '<TABLE align=center><TR>';
message += '<TR><TD><B>Base Time NO TR: ' + timestr(baseTime, true) + ' </b></td></tr>';
message += '<TR><TD>Time with ' + TotalTTS + '% Throne Boost : </td><TD>' + timestr(TroopTime, true) + '</td></tr>';
message += '<TR><TD>Time with Lacelot\'s : </td><TD>' + timestr(TotalTimeLancelot, true) + ' </td></tr>';
message += '<TR><TD>Time with Arthur\'s : </td><TD>' + timestr(TotalTimeArthur, true) + ' </td></tr>';
message += '<TR><TD>Time with Merlin\'s : </td><TD>' + timestr(TotalTimeMerlin, true) + '</td></tr>';
message += '<TR><TD>Time with 2x Reso : </td><TD>' + timestr(TotalTime2x15, true) + ' - ' + timestr(TotalTime2x5, true) + ' </td></tr>';
message += '<TR><TD>Time with 4x Reso : </td><TD>' + timestr(TotalTime4x25, true) + ' - ' + timestr(TotalTime4x10, true) + ' </td></tr></table>';
document.getElementById('pbTroopTimeEst').innerHTML = message;
},
calcBaseTrainTime: function (d, f) {
var t = Tabs.Train;
var cityId = t.selectedCity.id;
var uw = unsafeWindow;
var c = +(uw.unitcost["unt" + d][7]) * f,
e, k = {}, h = uw.seed.buildings["city" + uw.currentcityid],
j = {}, l = uw.seed.knights["city" + uw.currentcityid],
a, g = uw.seed.leaders["city" + uw.currentcityid];
k.barracks = 0;
k.workshop = 0;
k.stable = 0;
k.tech = 0;
k.knight = 0;
k.ultimate = 0;
unsafeWindow.jQuery.each(h, function (n, m) {
m.id = +(m[0]);
m.level = +(m[1]);
if (d < 13 || d == 16) {
if (m.id === 13 && m.level > 0) {
k.barracks += (m.level + 9);
}
} else if (d == 13) {
if (m.id === 22 && m.level > 0) {
k.barracks += (m.level + 9);
}
} else if (d == 14) {
if (m.id === 24 && m.level > 0) {
k.barracks += (m.level + 9);
}
} else if (d == 15) {
if (m.id === 26 && m.level > 0) {
k.barracks += (m.level + 9);
}
} else {}
if (m.id === 16 && m.level > 0) {
if (+(d) >= 9 && +(d) <= 12) {
k.workshop = m.level;
}
}
if (m.id === 17 && m.level > k.stable) {
if (+(d) >= 7 && +(d) <= 8) {
k.stable = m.level;
}
}
});
e = k.barracks / 10;
c = Math.max(1, Math.ceil(c / e));
e = 1;
if (l) {
a = l["knt" + g.combatKnightId];
if (a) {
k.knight = (+(a.combatBoostExpireUnixtime) - uw.unixtime() > 0) ? (a.combat * 1.25) : a.combat;
} else {
k.knight = 0;
}
}
if (uw.seed.tech) {
// k.tech = uw.seed.tech.tch5;
k.tech = parseInt(uw.seed.tech.tch5);
}
k.ultimate = k.workshop + k.stable + k.tech;
e = e * (1 + (0.1 * k.ultimate) + (0.005 * k.knight));
if (uw.cm.WorldSettings.isOn("GUARDIAN_MARCH_EFFECT")) {
var b = uw.cm.guardianModalModel.getStoneTrainingSpeedBonus();
e = e * (1 + b);
}
c = Math.max(1, Math.ceil(c / e));
return c;
},
calcTRBoosts: function (StatID) {
var equipped = Seed.throne.slotEquip[1];
var total = 0;
for (var k = 0; k < equipped.length; k++) {
var item_id = equipped[k];
var y = unsafeWindow.kocThroneItems[item_id];
for (var O in y["effects"]) {
var i = +(O.split("slot")[1]);
var id = y["effects"]["slot" + i]["id"];
if (id == StatID) {
tier = parseInt(y["effects"]["slot" + i]["tier"]);
level = y["level"];
p = unsafeWindow.cm.thronestats.tiers[id][tier];
while (!p && (tier > 0)) {
tier--;
p = unsafeWindow.cm.thronestats.tiers[id][tier];
}
if (!p) continue; // can't find stats for tier
if (i <= y["quality"]) var Percent = p.base + ((level * level + level) * p.growth * 0.5);
total += Percent;
}
}
}
return total;
},
hide: function () {
var t = Tabs.Train;
clearTimeout(t.timer);
},
show: function () {
var t = Tabs.Train;
clearTimeout(t.timer);
t.displayCityStats();
t.changeTroopSelect();
t.changeDefSelect();
t.timer = setTimeout(t.show, 2000);
},
/******* TROOPS ******/
updateTopTroops: function () {
var t = Tabs.Train;
var slots = parseInt(t.TTinpSlots.value, 10);
if (isNaN(slots) || slots < 0)
slots = 0;
t.TTspMax.innerHTML = t.stats.MaxTrain;
// t.TTspMaxSlots.innerHTML = t.stats.barracks - t.stats.queued;
if (t.lastTroopSelect > 12 && t.lastTroopSelect < 16)
t.TTspMaxSlots.innerHTML = t.stats.barracks - t.stats.spqueued;
else
t.TTspMaxSlots.innerHTML = t.stats.barracks - t.stats.queued;
// if (slots<1 || (t.stats.barracks-t.stats.queued < 1))
if (slots < 1 || t.TTspMaxSlots.innerHTML < 1)
t.TTspMaxPS.innerHTML = 0;
else
t.TTspMaxPS.innerHTML = parseInt(t.stats.MaxTrain / slots);
},
clickTroopMaxPS: function () {
var t = Tabs.Train;
var slots = parseInt(t.TTinpSlots.value, 10);
var queued;
if (t.lastTroopSelect > 12 && t.lastTroopSelect < 16)
queued = t.stats.spqueued;
else
queued = t.stats.queued;
if (slots < 1 || (t.stats.barracks - queued < 1))
t.TTinpPerSlot.value = 0;
else
t.TTinpPerSlot.value = parseInt(t.stats.MaxTrain / slots);
t.dispTroopTrainTimes();
},
clickTroopMaxSlots: function () {
var t = Tabs.Train;
if (t.lastTroopSelect > 12 && t.lastTroopSelect < 16)
t.TTinpSlots.value = t.stats.barracks - t.stats.spqueued;
else
t.TTinpSlots.value = t.stats.barracks - t.stats.queued;
},
clickCitySelect: function (city) {
var t = Tabs.Train;
t.selectedCity = city;
t.lastQueString = null;
t.lastDQueString = null;
t.displayCityStats();
t.changeTroopSelect();
t.changeDefSelect();
t.JumpCity(city.name);
},
JumpCity: function (city) {
var t = Tabs.AllianceList;
for (i = 0; i < Seed.cities.length; i++) {
if (Seed.cities[i][1] == city) var cityNum = i;
}
cityNum++;
var obj = document.getElementById('citysel_' + cityNum);
return t.ClickWin(window, obj, 'click');
},
ClickWin: function (win, obj, evtName) {
var evt = win.document.createEvent("MouseEvents");
evt.initMouseEvent(evtName, true, true, win,
0, 0, 0, 0, 0, false, false, false, false, 0, null);
return !obj.dispatchEvent(evt);
},
clickCheckIdlePop: function () {
var t = Tabs.Train;
if (document.getElementById('chkPop').checked)
Options.maxIdlePop = true;
else
Options.maxIdlePop = false;
saveOptions();
t.displayCityStats();
t.changeTroopSelect();
},
clickCheckDoTraps: function () {
var t = Tabs.Train;
var cityNo = Cities.byID[t.selectedCity.id].idx + 1;
AutoTrainOptions.doTraps[cityNo] = (document.getElementById('chkDoTraps').checked)
saveAutoTrainOptions();
t.displayCityStats();
t.changeDefSelect();
},
clickCheckDoCaltrops: function () {
var t = Tabs.Train;
var cityNo = Cities.byID[t.selectedCity.id].idx + 1;
AutoTrainOptions.doCalrops[cityNo] = (document.getElementById('chkDoCaltrops').checked)
saveAutoTrainOptions();
t.displayCityStats();
t.changeDefSelect();
},
clickCheckDoSpikes: function () {
var t = Tabs.Train;
var cityNo = Cities.byID[t.selectedCity.id].idx + 1;
AutoTrainOptions.doSpikes[cityNo] = (document.getElementById('chkDoSpikes').checked)
saveAutoTrainOptions();
t.displayCityStats();
t.changeDefSelect();
},
clickCheckDoXbows: function () {
var t = Tabs.Train;
var cityNo = Cities.byID[t.selectedCity.id].idx + 1;
AutoTrainOptions.doXbows[cityNo] = (document.getElementById('chkDoXbows').checked)
saveAutoTrainOptions();
t.displayCityStats();
t.changeDefSelect();
},
limitingFactor: null,
changeTroopSelect: function () {
var t = Tabs.Train;
var cityId = t.selectedCity.id;
// unitcost: NAME, Food, Wood, Stone, Ore, Gold, Pop, ?
var id = t.TTselType.value;
t.lastTroopSelect = id;
t.limitingFactor = null;
var uc = uW.unitcost['unt' + id];
var actualuc = [];
for (var r = 1; r < 5; r++) {
if (document.getElementById('pttrgamble').value > 0)
actualuc[r] = uc[r] * t.gamble[document.getElementById('pttrgamble').value].cost;
else
actualuc[r] = uc[r];
}
if (id == 16) actualuc[5] = uc[11]["34001"];
var max = 9999999999;
if ((t.stats.food / actualuc[1]) < max) {
max = t.stats.food / actualuc[1];
t.limitingFactor = uW.resourceinfo['rec1'];
}
if ((t.stats.wood / actualuc[2]) < max) {
max = t.stats.wood / actualuc[2];
t.limitingFactor = uW.resourceinfo['rec2'];
}
if ((t.stats.stone / actualuc[3]) < max) {
max = t.stats.stone / actualuc[3];
t.limitingFactor = uW.resourceinfo['rec3'];
}
if ((t.stats.ore / actualuc[4]) < max) {
max = t.stats.ore / actualuc[4];
t.limitingFactor = uW.resourceinfo['rec4'];
}
if (id == 16)
if ((t.stats.yew / actualuc[5]) < max) {
max = t.stats.yew / actualuc[5];
t.limitingFactor = 'yew';
}
if ((t.stats.idlePop / uc[6]) < max) {
max = t.stats.idlePop / uc[6];
t.limitingFactor = 'pop';
}
t.stats.MaxTrain = parseInt(max);
if (t.stats.MaxTrain < 0)
t.stats.MaxTrain = 0;
if (matTypeof(uc[8]) == 'object') {
for (k in uc[8]) { // check building requirement
var isPrestige = getCityPrestige(cityId);
var b = getCityBuilding(cityId, k.substr(1));
if (isPrestige) {
var bid = parseInt(k.substr(1));
switch (bid) {
case 17: //Stable
b.maxLevel = 12;
case 16: //Workshop
b.maxLevel = 12;
case 15: //Blacksmith
b.maxLevel = 12;
}
}
if (b.maxLevel < uc[8][k][1]) {
t.stats.MaxTrain = 0;
t.limitingFactor = null;
break;
}
}
}
if (matTypeof(uc[9]) == 'object') {
for (k in uc[9]) { // check tech requirement
if (parseInt(Seed.tech['tch' + k.substr(1)]) < uc[9][k][1]) {
t.stats.MaxTrain = 0;
t.limitingFactor = null;
break;
}
}
}
if (t.lastTroopSelect == 13) {
var numdruidbarrack = getCityBuilding(cityId, 22).count;
if (numdruidbarrack == 0) {
t.stats.MaxTrain = 0;
t.limitingFactor = null;
}
} else if (t.lastTroopSelect == 14) {
var numfeybarrack = getCityBuilding(cityId, 24).count;
if (numfeybarrack == 0) {
t.stats.MaxTrain = 0;
t.limitingFactor = null;
}
} else if (t.lastTroopSelect == 15) {
var numbritonbarrack = getCityBuilding(cityId, 26).count;
if (numbritonbarrack == 0) {
t.stats.MaxTrain = 0;
t.limitingFactor = null;
}
} else if (t.lastTroopSelect > 16) {
t.stats.MaxTrain = 0;
t.limitingFactor = null;
}
if (t.limitingFactor) {
document.getElementById('ptttr_' + t.limitingFactor).className = 'boldRed';
document.getElementById('ptttr2_' + t.limitingFactor).className = 'boldRed';
}
t.updateTopTroops();
if (isPrestige && t.lastTroopSelect > 12 && t.lastTroopSelect < 16)
t.TTspMaxSlots.innerHTML++;
},
clickTroopDo: function () {
var t = Tabs.Train;
var cityId = t.selectedCity.id;
var unitId = t.TTselType.value;
var perSlot = parseInt(t.TTinpPerSlot.value, 10);
var numSlots = parseInt(t.TTinpSlots.value, 10);
var queued;
if (t.lastTroopSelect > 12 && t.lastTroopSelect < 16)
queued = t.stats.spqueued;
else
queued = t.stats.queued;
t.displayCityStats();
if (t.running) {
t.stopTraining('<SPAN class=boldRed>Training cancelled by user</span>');
return;
}
if (perSlot < 1) {
t.divTrainStatus.innerHTML = '<FONT COLOR=#550000>' + uW.g_js_strings.commonstr.invalid + ' (' + uW.g_js_strings.modal_barracks_train.numtotrain + ')</font>';
return;
}
if (perSlot * numSlots > t.stats.MaxTrain) {
t.divTrainStatus.innerHTML = '<FONT COLOR=#550000>Can\'t train that many troops (max is ' + t.stats.MaxTrain + ' total)</font>';
return;
}
if (numSlots < 1 || numSlots > t.stats.barracks - queued) {
t.divTrainStatus.innerHTML = '<FONT COLOR=#550000>' + uW.g_js_strings.commonstr.invalid + ' (' + uW.buildingcost.bdg13[0] + ')</font>';
return;
}
var tut = document.getElementById('tutelage').value;
var gamble = document.getElementById('pttrgamble').value;
t.TDbutDo.disabled = true;
t.TTbutDo.className = 'ptButCancel';
t.TTbutDo.value = 'CANCEL';
var que = [];
for (var i = 0; i < numSlots; i++)
que.push(['T', unitId, parseInt(perSlot)]);
t.divTrainStatus.innerHTML = '';
t.running = true;
t.doQueue(cityId, tut, gamble, que);
},
/******* DEF ******/
updateTopDef: function () {
var t = Tabs.Train;
var slots = parseInt(t.TDinpSlots.value, 10);
if (isNaN(slots) || slots < 0)
slots = 0;
t.TDspMax.innerHTML = uW.g_js_strings.commonstr.max + ':' + t.stats.MaxDefTrain + ' ' + uW.g_js_strings.commonstr.owned + ':' + t.stats.defOwned;
t.TDspMaxSlots.innerHTML = t.stats.wallLevel - t.stats.Dqueued;
if (slots < 1)
t.TDspMaxPS.innerHTML = 0;
else
t.TDspMaxPS.innerHTML = parseInt(t.stats.MaxDefTrain / slots);
t.TDspSpace.innerHTML = uW.buildingcost.bdg19[0] + ' (' + uW.g_js_strings.guardian.cl1 + '): <B>' + t.stats.wallLevel + '\
</b><BR>' + uW.g_js_strings.modal_openWalls.walldef + ': \
' + (t.stats.wallSpaceUsed + t.stats.wallSpaceQueued) + '/<B>' + t.stats.wallSpace + '</b><BR>\
' + uW.g_js_strings.modal_openWalls.fielddef + ': ' + (t.stats.fieldSpaceUsed + t.stats.fieldSpaceQueued) + '/<B>' + t.stats.fieldSpace + '</b>';
},
changeDefSelect: function () {
var t = Tabs.Train;
var cityId = t.selectedCity.id;
// unitcost: NAME, Food, Wood, Stone, Ore, Gold, Pop, ?
var id = t.TDselType.value;
t.lastDefSelect = id;
t.stats.defOwned = parseInt(Seed.fortifications['city' + cityId]['fort' + id]);
//
// Check if ascended city
var isPrestige = Seed.cityData.city[cityId].isPrestigeCity;
//
var uc = uW.fortcost['frt' + id];
var max = 9999999999;
if ((t.stats.food / uc[1]) < max)
max = t.stats.food / uc[1];
if ((t.stats.wood / uc[2]) < max)
max = t.stats.wood / uc[2];
if ((t.stats.stone / uc[3]) < max)
max = t.stats.stone / uc[3];
if ((t.stats.ore / uc[4]) < max)
max = t.stats.ore / uc[4];
if ((t.stats.idlePop / uc[6]) < max)
max = t.stats.idlePop / uc[6];
t.stats.MaxDefTrain = parseIntNan(max);
if (t.stats.MaxDefTrain < 0)
t.stats.MaxDefTrain = 0;
if (matTypeof(uc[8]) == 'object') {
for (k in uc[8]) { // check building requirement
var b = getCityBuilding(cityId, k.substr(1));
if (isPrestige) {
var bid = parseInt(k.substr(1));
logit(bid);
switch (bid) {
case 17: //Stable
b.maxLevel = 12;
case 16: //Workshop
b.maxLevel = 12;
case 15: //Blacksmith
b.maxLevel = 12;
}
}
logit(isPrestige);
logit(inspect(b, 3, 1));
if (b.maxLevel < uc[8][k][1]) {
t.stats.MaxDefTrain = 0;
break;
}
}
}
if (matTypeof(uc[9]) == 'object') {
for (k in uc[9]) { // check tech requirement
if (parseInt(Seed.tech['tch' + k.substr(1)]) < uc[9][k][1]) {
t.stats.MaxDefTrain = 0;
break;
}
}
}
var spaceEach = parseInt(uW.fortstats["unt" + id][5]);
if (id < 60)
var spaceAvail = t.stats.wallSpace - t.stats.wallSpaceUsed - t.stats.wallSpaceQueued;
else
var spaceAvail = t.stats.fieldSpace - t.stats.fieldSpaceUsed - t.stats.fieldSpaceQueued;
if (t.stats.MaxDefTrain * spaceEach > spaceAvail)
t.stats.MaxDefTrain = parseInt(spaceAvail / spaceEach);
t.updateTopDef();
},
clickDefMaxPS: function () {
var t = Tabs.Train;
var slots = parseInt(t.TDinpSlots.value, 10);
if (slots < 1)
t.TDinpPerSlot.value = 0;
else
t.TDinpPerSlot.value = parseInt(t.stats.MaxDefTrain / slots);
},
clickDefMaxSlots: function () {
var t = Tabs.Train;
t.TDinpSlots.value = t.stats.wallLevel - t.stats.Dqueued;
},
clickDefDo: function () {
var t = Tabs.Train;
var cityId = t.selectedCity.id;
var unitId = t.TDselType.value;
var perSlot = parseInt(t.TDinpPerSlot.value, 10);
var numSlots = parseInt(t.TDinpSlots.value, 10);
t.displayCityStats();
if (t.running) {
t.stopTraining('<SPAN class=boldRed>' + uW.g_js_strings.commonstr.cancelled + '</span>');
return;
}
if (perSlot < 1) {
//t.divTrainStatus.innerHTML = '<FONT COLOR=#550000>Number of units per slot must be greater than 0.</font>';
return;
}
if (perSlot * numSlots > t.stats.MaxDefTrain) {
t.divTrainStatus.innerHTML = '<FONT COLOR=#550000>' + uW.g_js_strings.modal_attack.maxtroops + ': ' + t.stats.MaxDefTrain + '</font>';
return;
}
if (numSlots < 1 || numSlots > t.stats.wallLevel - t.stats.Dqueued) {
t.divTrainStatus.innerHTML = '<FONT COLOR=#550000>' + uW.g_js_strings.commonstr.invalid + ' ()</font>';
return;
}
var siege = document.getElementById('siege').value;
t.TTbutDo.disabled = true;
t.TDbutDo.className = 'ptButCancel';
t.TDbutDo.value = 'CANCEL';
var que = [];
for (var i = 0; i < numSlots; i++)
que.push(['T', unitId, parseInt(perSlot)]);
t.divTrainStatus.innerHTML = '';
t.running = true;
t.doDefQueue(cityId, siege, que);
},
doDefQueue: function (cityId, siege, que, errMsg) {
var t = Tabs.Train;
clearTimeout(t.trainTimer);
try {
t.displayCityStats();
if (errMsg) {
t.stopTraining('<SPAN class=boldRed>ERROR: ' + errMsg + '</span>');
return;
}
var cmd = que.shift();
if (!cmd) {
t.stopTraining('<B>Done queueing defenses.</b>');
return;
}
if (cmd[0] == 'T') {
t.dispTrainStatus('Training ' + cmd[2] + ' ' + fortNamesShort[cmd[1]] + ' at ' + Cities.byID[cityId].name + ' (' + que.length + ' slots remaining)<BR>');
doDefTrain(cityId, siege, cmd[1], cmd[2],
function (errMsg) {
t.trainTimer = setTimeout(function () {
Tabs.Train.doDefQueue(cityId, siege, que, errMsg);
}, (Math.random() * 3500) + 1500);
});
}
} catch (err) {
logit(inspect(err, 8, 1));
t.stopTraining('<SPAN class=boldRed>PROGRAM ERROR: ' + err.message + '</span>');
}
},
// fix KofC bugs ....
// if first start time > now, make it now
// if any end time != next start time, fix it
fixQueTimes: function (q) {
var now = unixTime();
if (q[0][2] > now)
q[0][2] = now;
for (var i = 0; i < q.length; i++) {
if (q[i + 1] != null && q[i + 1][2] != q[i][3])
q[i][3] = q[i + 1][2];
}
},
expireTheQueue: function (q) {
if (q == null)
return;
var now = unixTime();
while (q.length > 0 && (q[0][3] - now) < 1)
q.shift();
},
displayCityStats: function () {
var t = Tabs.Train;
var cityId = t.selectedCity.id;
var isSpecial = false;
if (t.TTselType.value > 12 && t.TTselType.value < 16) {
isSpecial = true;
}
t.stats.food = parseInt(Seed.resources['city' + cityId].rec1[0] / 3600);
t.stats.wood = parseInt(Seed.resources['city' + cityId].rec2[0] / 3600);
t.stats.stone = parseInt(Seed.resources['city' + cityId].rec3[0] / 3600);
t.stats.ore = parseInt(Seed.resources['city' + cityId].rec4[0] / 3600);
t.stats.yew = parseInt(Seed.items.i34001);
t.stats.gold = Seed.citystats['city' + cityId].gold[0];
if (Options.maxIdlePop)
t.stats.idlePop = parseInt(Seed.citystats['city' + cityId].pop[0]);
else
t.stats.idlePop = parseInt(Seed.citystats['city' + cityId].pop[0]) - parseInt(Seed.citystats['city' + cityId].pop[3]);
t.stats.barracks = (isSpecial) ? (getCityBuilding(cityId, 22).count + getCityBuilding(cityId, 24).count + getCityBuilding(cityId, 26).count) : getCityBuilding(cityId, 13).count;
var m = '<CENTER><B>' + Cities.byID[cityId].name + ' (' + Cities.byID[cityId].x + ',' + Cities.byID[cityId].y + ')</b></center><HR>';
m += '<TABLE class=ptTab width=100%><TR align=center>';
for (i = 1; i <= 9; i++) {
m += '<TR><TD width=75px>' + uW.unitcost['unt' + i][0] + '</td><TD width=60px>' + addCommas(parseInt(Seed.units['city' + cityId]['unt' + i])) + '</td>';
m += '<TD width=75px>' + uW.unitcost['unt' + (i + 9)][0] + '</td><TD width=60px>' + addCommas(parseInt(Seed.units['city' + cityId]['unt' + (i + 9)])) + '</td>';
if (i <= 4) m += '<TD width=75px><SPAN id=ptttr_' + uW.resourceinfo['rec' + i] + '>' + uW.resourceinfo['rec' + i] + '</span></td><TD width=60px><SPAN id=ptttr2_' + uW.resourceinfo['rec' + i] + '>' + addCommas(parseInt(Seed.resources['city' + cityId]['rec' + i][0] / 3600)) + '</span></td>';
if (i == 5) m += '<TD width=75px><SPAN id=ptttr_gold>' + uW.resourceinfo['rec0'] + '</span></td><TD width=60px><SPAN id=ptttr2_gold>' + addCommas(Seed.citystats['city' + cityId].gold[0]) + '</span></td>';
if (i == 6) m += '<TD width=75px><SPAN id=ptttr_pop>Available Population</td><TD width=60px><SPAN id=ptttr2_pop>' + addCommas(t.stats.idlePop) + '</td>';
if (i == 7) m += '<TD width=75px><SPAN id=ptttr_yew>Pristine Yew Branch</td><TD width=60px><SPAN id=ptttr2_yew>' + addCommas(t.stats.yew) + '</td>';
if (i > 7) m += '<TD width=75px></td><TD width=60px></td>';
m += '</tr>';
}
m += '<TR><TD width=75px></td><TD width=60px></td>';
m += '<TD width=75px>' + uW.unitcost['unt' + (21)][0] + '</td><TD width=60px>' + addCommas(parseInt(Seed.units['city' + cityId]['unt' + (21)])) + '</td>';
m += '</table>';
document.getElementById('divSTtop').innerHTML = m;
// troop queue ....
var totTime = 0;
var q = Seed.queue_unt['city' + cityId];
t.expireTheQueue(q);
var qs = q.toString();
var now = unixTime();
// if (q!=null && q.length>0)
// totTime = q[q.length-1][3] - now;
if (qs == t.lastQueString) {
if (q != null && q.length > 0) {
var cur = q[0][3] - now;
// var cur = 0;
for (var i = 0; i < q.length; i++) {
if (q[i][7] && isSpecial) {
cur = q[i][3] - now;
break;
}
if (!q[i][7] && isSpecial) {
cur = q[i][3] - now;
break;
}
}
if (document.getElementById('ptttfq'))
document.getElementById('ptttfq').innerHTML = timestr(cur, true);
}
} else {
t.lastQueString = qs;
t.stats.queued = 0;
t.stats.spqueued = 0;
m = '<TABLE align=center class=ptTab>';
if (q != null && q.length > 0) {
if (!getCityPrestige(cityId))
t.fixQueTimes(q);
// t.stats.queued = q.length;
first = true;
first_special = true;
for (var i = 0; i < q.length; i++) {
var now = unixTime();
// if(isSpecial && q[i][0] < 13){
// continue;
// }
// if(!isSpecial && q[i][0] >= 13){
// continue;
// }
start = q[i][2];
end = q[i][3];
if (end > totTime)
totTime = end;
// if (first)
// if (first || (q[i][7] && first_special))
if (first || first_special)
actual = end - now;
else
actual = end - lastEnd;
if (actual < 0)
actual = 0;
q[i][6] = cityId;
//q[i][7] If true means special troop training
m += '<TR align=right><TD width="5px"><A><DIV onclick="cancelTrain(' + q[i][0] + ',' + q[i][1] + ',' + q[i][2] + ',' + q[i][3] + ',' + q[i][5] + ',' + q[i][6] + ',' + i + ')">X</div></a></td>';
m += '<TD>' + q[i][1] + ' </td><TD align=left> ' + uW.unitcost['unt' + q[i][0]][0];
// if (first)
// if (first || (q[i][7] && first_special))
if (first || first_special)
m += '</td><TD> ' + timestr(end - start, true) + '</td><TD> (<SPAN id=ptttfq>' + timestr(actual, true) + '</span>)';
else
m += '</td><TD> ' + timestr(actual, true) + '</td></tr>';
lastEnd = end;
if (first && !q[i][7])
first = false;
// if(q[i][7])
// first_special = false;
// t.stats.queued++;
if (q[i][7]) {
first_special = false;
t.stats.spqueued++;
} else {
t.stats.queued++;
}
}
}
m += '</table>';
document.getElementById('divSTleft').innerHTML = m;
t.totTime = totTime;
}
// m = t.stats.queued +' ' + uW.g_js_strings.commonstr.oftx +' ';
// if (t.stats.queued >= 0)
t.stats.qtotal = t.stats.queued + t.stats.spqueued;
m = t.stats.qtotal + ' ' + uW.g_js_strings.commonstr.oftx + ' ';
if (t.stats.qtotal >= 0)
m += t.stats.barracks;
// if (totTime > 0)
// m += ' - '+ uW.g_js_strings.commonstr.time + ': '+ uW.timestr(totTime);
if ((t.totTime - now) > 0)
m += ' - ' + uW.g_js_strings.commonstr.time + ': ' + uW.timestr(t.totTime - now);
document.getElementById('statTTtot').innerHTML = m;
// defense queue ....
getWallInfo(cityId, t.stats);
var totTime = 0;
var q = Seed.queue_fort['city' + cityId];
t.expireTheQueue(q);
var qs = q.toString();
if (q != null && q.length > 0)
totTime = q[q.length - 1][3] - now;
if (qs == t.lastDQueString) {
if (q != null && q.length > 0) {
var cur = q[0][3] - now;
document.getElementById('pttdfq').innerHTML = timestr(cur, true);
}
} else {
t.lastDQueString = qs;
t.stats.Dqueued = 0;
t.stats.wallSpaceQueued = 0;
t.stats.fieldSpaceQueued = 0;
m = '<TABLE align=center class=ptTab>';
if (q != null && q.length > 0) {
t.fixQueTimes(q);
t.stats.Dqueued = q.length;
first = true;
for (i = 0; i < q.length; i++) {
if (q[i][0] < 60)
t.stats.wallSpaceQueued += parseInt(uW.fortstats["unt" + q[i][0]][5]) * parseInt(q[i][1]);
else
t.stats.fieldSpaceQueued += parseInt(uW.fortstats["unt" + q[i][0]][5]) * parseInt(q[i][1]);
start = q[i][2];
end = q[i][3];
if (first)
actual = end - now;
else
actual = end - lastEnd;
if (actual < 0)
actual = 0;
q[i][7] = cityId;
m += '<TR align=right><TD width="5px"><A><DIV onclick="cancelFort(' + q[i][0] + ',' + q[i][1] + ',' + q[i][2] + ',' + q[i][3] + ',' + q[i][5] + ',' + q[i][6] + ',' + q[i][7] + ',' + i + ')">X</div></a></td>'
m += '<TD>' + q[i][1] + ' </td><TD align=left> ' + fortNamesShort[q[i][0]];
if (first)
m += '</td><TD> ' + timestr(end - start, true) + '</td><TD> (<SPAN id=pttdfq>' + timestr(actual, true) + '</span>)';
else
m += '</td><TD> ' + timestr(actual, true) + '</td></tr>';
lastEnd = end;
first = false;
}
}
m += '</table>';
document.getElementById('divSTright').innerHTML = m;
}
m = t.stats.Dqueued + ' slots';
if (totTime > 0)
m += ', ' + uW.timestr(totTime);
document.getElementById('statDTtot').innerHTML = m;
},
dispTrainStatus: function (msg) {
var t = Tabs.Train;
t.divTrainStatus.innerHTML = msg + t.divTrainStatus.innerHTML;
},
butcancelTrain: function (typetrn, numtrptrn, trnTmp, trnETA, trnNeeded, cityId, trainingId) {
var t = Tabs.Train;
var params = uW.Object.clone(uW.g_ajaxparams);
params.pf = 0;
params.requestType = "CANCEL_TRAINING";
params.cityId = cityId;
params.typetrn = typetrn;
params.numtrptrn = numtrptrn;
params.trnETA = trnETA;
params.trnTmp = trnTmp;
params.trnNeeded = trnNeeded;
new AjaxRequest(uW.g_ajaxpath + "ajax/cancelTraining.php" + uW.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (message) {
var rslt = eval("(" + message.responseText + ")");
if (rslt.updateSeed)
unsafeWindow.update_seed(rslt.updateSeed);
if (rslt.ok) {
var k = 0;
for (var j = 0; j < Seed.queue_unt["city" + cityId].length; j++) {
if (j > trainingId) {
Seed.queue_unt["city" + cityId][j][2] = parseInt(rslt.dateTraining[k]["start"]);
Seed.queue_unt["city" + cityId][j][3] = parseInt(rslt.dateTraining[k]["end"]);
k++;
}
}
Seed.queue_unt["city" + cityId].splice(trainingId, 1);
for (var i = 1; i < 5; i++) {
var totalReturn = parseInt(uW.unitcost["unt" + typetrn][i]) * parseInt(numtrptrn) * 3600 / 2;
Seed.resources["city" + cityId]["rec" + i][0] = parseInt(Seed.resources["city" + cityId]["rec" + i][0]) + totalReturn;
}
}
},
onFailure: function () {},
});
},
butcancelFort: function (typefrt, numtrpfrt, frtTmp, frtETA, frtNeeded, frtid, cityId, queueId) {
var t = Tabs.Train;
var params = uW.Object.clone(uW.g_ajaxparams);
params.pf = 0;
params.requestType = "CANCEL_FORTIFICATIONS";
params.cityId = cityId;
params.typefrt = typefrt;
params.numtrpfrt = numtrpfrt;
params.frtETA = frtETA;
params.frtTmp = frtTmp;
params.frtNeeded = frtNeeded;
params.frtid = frtid;
new AjaxRequest(uW.g_ajaxpath + "ajax/cancelFortifications.php" + uW.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (message) {
if (rslt.updateSeed)
unsafeWindow.update_seed(rslt.updateSeed);
var rslt = eval("(" + message.responseText + ")");
if (rslt.ok) {
var k = 0;
for (var j = 0; j < Seed.queue_fort["city" + cityId].length; j++) {
if (j > queueId) {
Seed.queue_fort["city" + cityId][j][2] = parseInt(rslt.dateFortifications[k]["start"]);
Seed.queue_fort["city" + cityId][j][3] = parseInt(rslt.dateFortifications[k]["end"]);
k++;
}
}
uW.update_seed(rslt.updateSeed);
Seed.queue_fort["city" + cityId].splice(queueId, 1);
for (var i = 1; i < 5; i++) {
Seed.resources["city" + cityId]["rec" + i][0] = parseInt(Seed.resources["city" + cityId]["rec" + i][0]) + totalReturn;
}
}
},
onFailure: function () {},
});
},
stopTraining: function (msg) {
var t = Tabs.Train;
clearTimeout(t.trainTimer);
t.trainTimer = null;
t.dispTrainStatus(msg + '<BR>');
t.TDbutDo.disabled = false;
t.TTbutDo.disabled = false;
t.TTbutDo.value = uW.g_js_strings.modal_openBarracks.trainttl;
t.TDbutDo.value = uW.g_js_strings.modal_openWalls.builddefenses;
t.TTbutDo.className = '';
t.TDbutDo.className = '';
t.running = false;
},
doQueue: function (cityId, tut, gamble, que, errMsg) {
var t = Tabs.Train;
clearTimeout(t.trainTimer);
try {
t.displayCityStats();
if (errMsg) {
t.stopTraining('<SPAN class=boldRed>' + errMsg + '</span>');
return;
}
var cmd = que.shift();
if (!cmd) {
t.stopTraining('<B>' + uW.g_js_strings.update_queue.troopqueue + '</b>');
return;
}
if (cmd[0] == 'T') {
t.dispTrainStatus(uW.g_js_strings.modal_barracks_train.starttraining + ': ' + cmd[2] + ' ' + uW.unitcost['unt' + cmd[1]][0] + ' at ' + Cities.byID[cityId].name + ' (' + que.length + ' slots remaining)<BR>');
doTrain(cityId, tut, gamble, cmd[1], cmd[2],
function (errMsg) {
if (t.running)
t.trainTimer = setTimeout(function () {
Tabs.Train.doQueue(cityId, tut, gamble, que, errMsg);
}, (Math.random() * 2500) + 1000);
}
);
}
} catch (err) {
logit(inspect(err, 8, 1));
t.stopTraining('<SPAN class=boldRed>' + uW.g_js_strings.barbarian.erroroccured + ' ' + err.message + '</span>');
}
},
doAutoTraps: function (cityNo) {
var t = Tabs.Train;
wall = {};
var cityId = Cities.cities[cityNo - 1].id
var cityID = 'city' + cityId;
getWallInfo(cityId, wall);
availableSpace = wall.fieldSpace - wall.fieldSpaceUsed;
if (availableSpace > 0 && wall.slotsBusy < 3) {
var food = parseInt(Seed.resources['city' + cityId].rec1[0] / 3600);
var wood = parseInt(Seed.resources['city' + cityId].rec2[0] / 3600);
var stone = parseInt(Seed.resources['city' + cityId].rec3[0] / 3600);
var ore = parseInt(Seed.resources['city' + cityId].rec4[0] / 3600);
availableSlots = 3 - wall.slotsBusy;
var foodRes = AutoTrainOptions.keepFood[cityNo];
var woodRes = AutoTrainOptions.keepWood[cityNo];
var stoneRes = AutoTrainOptions.keepStone[cityNo];
var oreRes = AutoTrainOptions.keepOre[cityNo];
var availFood = food - foodRes;
var availWood = wood - woodRes;
var availStone = stone - stoneRes;
var availOre = ore - oreRes;
secsPerTrap = Cities.byID[cityId]['Def60Time'];
if (secsPerTrap > 0 && availableSpace > 2 && availableSlots > 0) {
if (availFood > 400 && availWood > 800 & availStone > 200 & availOre > 400) {
var numberToTrain = 9999999999;
if ((availFood / 400) < numberToTrain)
numberToTrain = parseInt(availFood / 400);
if ((availWood / 800) < numberToTrain)
numberToTrain = parseInt(availWood / 800);
if ((availStone / 200) < numberToTrain)
numberToTrain = parseInt(availStone / 200);
if ((availOre / 400) < numberToTrain)
numberToTrain = parseInt(availOre / 400);
if (numberToTrain > 5)
numberToTrain = 5;
if (wall.Trap + wall.TrapTraining < 10 || availableSpace < 15) {
numberToTrain = 1;
actionLog('Building 1 Trap in city ' + Cities.byID[cityId].name);
} else
actionLog('Building ' + numberToTrain + ' Traps in city ' + Cities.byID[cityId].name);
try {
doDefTrain(cityId, 60, numberToTrain);
} catch (err) {
logit(inspect(err, 8, 1));
}
}
}
}
},
doAutoCaltrops: function (cityNo) {
var t = Tabs.Train;
wall = {};
var cityId = Cities.cities[cityNo - 1].id
var cityID = 'city' + cityId;
getWallInfo(cityId, wall);
availableSpace = wall.fieldSpace - wall.fieldSpaceUsed;
if (availableSpace > 0 && wall.slotsBusy < 3) {
var food = parseInt(Seed.resources['city' + cityId].rec1[0] / 3600);
var wood = parseInt(Seed.resources['city' + cityId].rec2[0] / 3600);
var stone = parseInt(Seed.resources['city' + cityId].rec3[0] / 3600);
var ore = parseInt(Seed.resources['city' + cityId].rec4[0] / 3600);
availableSlots = 3 - wall.slotsBusy;
var foodRes = AutoTrainOptions.keepFood[cityNo];
var woodRes = AutoTrainOptions.keepWood[cityNo];
var stoneRes = AutoTrainOptions.keepStone[cityNo];
var oreRes = AutoTrainOptions.keepOre[cityNo];
var availFood = food - foodRes;
var availWood = wood - woodRes;
var availStone = stone - stoneRes;
var availOre = ore - oreRes;
secsPerCaltrop = Cities.byID[cityId]['Def61Time'];
if (secsPerCaltrop > 0 && availableSpace > 2 && availableSlots > 0) {
if (availFood > 100 && availWood > 400) {
var numberToTrain = 9999999999;
if ((availFood / 100) < numberToTrain)
numberToTrain = parseInt(availFood / 100);
if ((availWood / 400) < numberToTrain)
numberToTrain = parseInt(availWood / 400);
if (numberToTrain > 5)
numberToTrain = 5;
if (wall.Caltrops + wall.CaltropsTraining < 10 || availableSpace < 15) {
numberToTrain = 1;
actionLog('Building 1 Caltrop in city ' + Cities.byID[cityId].name);
} else
actionLog('Building ' + numberToTrain + ' Caltrops in city ' + Cities.byID[cityId].name);
try {
doDefTrain(cityId, 61, numberToTrain);
} catch (err) {
logit(inspect(err, 8, 1));
}
}
}
}
},
doAutoSpikes: function (cityNo) {
var t = Tabs.Train;
wall = {};
var cityId = Cities.cities[cityNo - 1].id
var cityID = 'city' + cityId;
getWallInfo(cityId, wall);
availableSpace = wall.fieldSpace - wall.fieldSpaceUsed;
if (availableSpace > 0 && wall.slotsBusy < 3) {
var food = parseInt(Seed.resources['city' + cityId].rec1[0] / 3600);
var wood = parseInt(Seed.resources['city' + cityId].rec2[0] / 3600);
var stone = parseInt(Seed.resources['city' + cityId].rec3[0] / 3600);
var ore = parseInt(Seed.resources['city' + cityId].rec4[0] / 3600);
availableSlots = 3 - wall.slotsBusy;
var foodRes = AutoTrainOptions.keepFood[cityNo];
var woodRes = AutoTrainOptions.keepWood[cityNo];
var stoneRes = AutoTrainOptions.keepStone[cityNo];
var oreRes = AutoTrainOptions.keepOre[cityNo];
var availFood = food - foodRes;
var availWood = wood - woodRes;
var availStone = stone - stoneRes;
var availOre = ore - oreRes;
secsPerSpike = Cities.byID[cityId]['Def62Time'];
if (secsPerSpike > 0 && availableSpace > 2 && availableSlots > 0) {
if (availFood > 150 && availWood > 750 & availStone > 50) {
var numberToTrain = 9999999999;
if ((availFood / 150) < numberToTrain)
numberToTrain = parseInt(availFood / 150);
if ((availWood / 750) < numberToTrain)
numberToTrain = parseInt(availWood / 750);
if ((availStone / 50) < numberToTrain)
numberToTrain = parseInt(availStone / 50);
if (numberToTrain > 5)
numberToTrain = 5;
if (wall.SpikedBarrier + wall.SpikedBarrierTraining < 10 || availableSpace < 15) {
numberToTrain = 1;
actionLog('Building 1 Spike in city ' + Cities.byID[cityId].name);
} else
actionLog('Building ' + numberToTrain + ' Spikes in city ' + Cities.byID[cityId].name);
try {
doDefTrain(cityId, 61, numberToTrain);
} catch (err) {
logit(inspect(err, 8, 1));
}
}
}
}
},
doAutoCrossbows: function (cityNo) {
var t = Tabs.Train;
wall = {};
var cityId = Cities.cities[cityNo - 1].id
var cityID = 'city' + cityId;
getWallInfo(cityId, wall);
availableSpace = wall.wallSpace - wall.wallSpaceUsed;
if (availableSpace > 0 && wall.slotsBusy < 2) {
var food = parseInt(Seed.resources['city' + cityId].rec1[0] / 3600);
var wood = parseInt(Seed.resources['city' + cityId].rec2[0] / 3600);
var stone = parseInt(Seed.resources['city' + cityId].rec3[0] / 3600);
var ore = parseInt(Seed.resources['city' + cityId].rec4[0] / 3600);
availableSlots = 2 - wall.slotsBusy;
var foodRes = AutoTrainOptions.keepFood[cityNo];
var woodRes = AutoTrainOptions.keepWood[cityNo];
var stoneRes = AutoTrainOptions.keepStone[cityNo];
var oreRes = AutoTrainOptions.keepOre[cityNo];
var availFood = food - foodRes;
var availWood = wood - woodRes;
var availStone = stone - stoneRes;
var availOre = ore - oreRes;
secsPerXbow = Cities.byID[cityId]['Def53Time'];
if (secsPerXbow > 0 && availableSpace > 2 && availableSlots > 0) {
if (availFood > 250 && availWood > 2000 & availStone > 750 & availOre > 500) {
var numberToTrain = 9999999999;
if ((availFood / 250) < numberToTrain)
numberToTrain = parseInt(availFood / 250);
if ((availWood / 2000) < numberToTrain)
numberToTrain = parseInt(availWood / 2000);
if ((availStone / 750) < numberToTrain)
numberToTrain = parseInt(availStone / 750);
if ((availOre / 500) < numberToTrain)
numberToTrain = parseInt(availOre / 500);
if (numberToTrain > 5)
numberToTrain = 5;
if (wall.Crossbows + wall.CrossbowsTraining < 10 || availableSpace < 15) {
numberToTrain = 1;
actionLog('Building 1 Crossbow in city ' + Cities.byID[cityId].name);
} else
actionLog('Building ' + numberToTrain + ' Crossbows in city ' + Cities.byID[cityId].name);
try {
doDefTrain(cityId, 53, numberToTrain);
} catch (err) {
logit(inspect(err, 8, 1));
}
}
}
}
},
doAutoTrain: function (cityNo) {
var t = Tabs.Train;
clearTimeout(t.nextAuto);
var cityId = Cities.cities[cityNo - 1].id
var cityID = 'city' + cityId;
var troopType = AutoTrainOptions.troopType[cityNo];
if (troopType > 0) {
var unitQ = Seed.queue_unt['city' + cityId];
var queued = 0;
if (unitQ != null && unitQ.length > 0)
queued = unitQ.length;
var slots = Cities.byID[cityId].numBarracks - queued;
secsPerTroop = Cities.byID[cityId]['Troop' + troopType + 'Time'];
if (slots > 0 && secsPerTroop > 0)
t.doAutoTroopTrain(cityNo);
}
if (AutoTrainOptions.doTraps[cityNo])
t.doAutoTraps(cityNo);
if (AutoTrainOptions.doCalrops[cityNo])
t.doAutoCaltrops(cityNo);
if (AutoTrainOptions.doSpikes[cityNo])
t.doAutoSpikes(cityNo);
if (AutoTrainOptions.doXbows[cityNo])
t.doAutoCrossbows(cityNo);
if (cityNo == Cities.numCities)
t.nextAuto = setTimeout(function () {
t.doAutoTrain(1);
}, (AutoTrainOptions.intervalSecs * 1000));
else
t.nextAuto = setTimeout(function () {
t.doAutoTrain(cityNo + 1);
}, 7000);
},
}
/*************************************** OVERVIEW TAB ************************************************/
var GMTclock = {
span: null,
timer: null,
init: function () {
this.span = document.createElement('span');
this.span.style.fontWeight = 'bold';
document.getElementById('kochead_time').parentNode.appendChild(this.span);
this.setEnable(Options.gmtClock);
},
setEnable: function (tf) {
var t = GMTclock;
if (tf) {
setTimeout(function () {
t.everySecond();
}, 1000);
} else {
t.span.innerHTML = '';
}
},
everySecond: function () {
var t = GMTclock;
var now = new Date();
now.setTime(now.getTime() + (now.getTimezoneOffset() * 60000));
GMTclock.span.innerHTML = ' (' + now.toLocaleFormat('%H:%M') + ')';
if (Options.gmtClock) {
setTimeout(function () {
t.everySecond();
}, 1000);
} else {
GMTclock.span.innerHTML = '';
}
},
}
function getResourceProduction(cityId) {
var ret = [0, 0, 0, 0, 0];
var now = unixTime();
var search = 'type==10 || type==11';
var wilds = [0, 0, 0, 0, 0];
var w = Seed.wilderness["city" + cityId];
for (var k in w) {
var type = parseInt(w[k].tileType);
if (type == 10 || type == 11)
wilds[1] += parseInt(w[k].tileLevel);
else
wilds[type / 10] += parseInt(w[k].tileLevel);
}
knight = 0;
var s = Seed.knights["city" + cityId];
if (s) {
s = s["knt" + Seed.leaders["city" + cityId].resourcefulnessKnightId];
if (s) {
var knight = parseInt(s.resourcefulness);
if (s.resourcefulnessBoostExpireUnixtime > now)
knight *= 1.25;
}
}
var workerFactor = 1;
var c = parseInt(Seed.citystats["city" + cityId]["pop"][0]); // Current population
var w = parseInt(Seed.citystats["city" + cityId]["pop"][3]); // Labor force
if (w > c)
workerFactor = c / w;
for (var i = 1; i < 5; i++) {
var usage = Seed.resources["city" + cityId]["rec" + i];
var items = 0;
if (parseInt(Seed.playerEffects["r" + i + "BstExp"]) > now) {
items = 0.25;
}
var tech = Seed.tech["tch" + i];
ret[i] = parseInt((usage[2] * (1 + tech / 10 + knight / 100 + items + 0.05 * wilds[i]) * workerFactor + 100));
}
return ret;
}
function getWallInfo(cityId, objOut) {
objOut.wallSpaceUsed = 0;
objOut.fieldSpaceUsed = 0;
objOut.wallLevel = 0;
objOut.wallSpace = 0;
objOut.fieldSpace = 0;
var b = Seed.buildings["city" + cityId];
if (b.pos1 == null)
return;
objOut.wallLevel = parseInt(b.pos1[1]);
var spots = 0;
for (var i = 1; i < (objOut.wallLevel + 1); i++)
spots += (i * 1500);
objOut.wallSpace = spots;
objOut.fieldSpace = spots;
var fort = Seed.fortifications["city" + cityId];
for (k in fort) {
var id = parseInt(k.substr(4));
if (id < 60)
objOut.wallSpaceUsed += parseInt(uW.fortstats["unt" + id][5]) * parseInt(fort[k]);
else
objOut.fieldSpaceUsed += parseInt(uW.fortstats["unt" + id][5]) * parseInt(fort[k]);
}
}
Tabs.OverView = {
tabOrder: 1,
tabLabel: uW.g_js_strings.commonstr.overview,
cont: null,
displayTimer: null,
curTabBut: null,
curTabName: null,
resTotal: {},
troopTotal: {},
init: function (div) {
var t = Tabs.OverView;
dt = new Date();
dt.setTime(Seed.player.datejoinUnixTime * 1000);
t.cont = div;
var main = '<DIV class=ptstat style="margin-top:5px; margin-bottom:5px;"><TABLE cellspacing=0 cellpadding=0 class=ptTab width=97% align=center>';
main += '<TR align=left><TD><SPAN class=ptStatLight>Joined on:</span> ' + dt.toLocaleDateString() + '</td>';
main += '<TD><SPAN class=ptStatLight>Might:</span> ' + addCommas(Seed.player.might) + '</td>';
main += '<TD><SPAN class=ptStatLight>Alliance:</span> ' + getMyAlliance()[1] + '</td>';
main += '<TD align=right><SPAN class=ptStatLight>Domain:</span> ' + uW.domainName + '</td></tr></table></div>';
main += '<TABLE class=ptTab align=left><TR>';
main += '<TD><INPUT class=pbSubtab ID=ptmrchSubS type=submit value=' + uW.g_js_strings.commonstr.overview + '></td>';
main += '<TD><INPUT class=pbSubtab ID=ptmrchSubA type=submit value=' + uW.g_js_strings.commonstr.resources + '></td>';
main += '<TD><INPUT class=pbSubtab ID=ptmrchSubB type=submit value=' + uW.g_js_strings.commonstr.troops + '></td>';
main += '<TD><INPUT class=pbSubtab ID=ptmrchSubC type=submit value=' + uW.g_js_strings.modaltitles.buildings + '></td>';
main += '<TD><INPUT class=pbSubtab ID=ptmrchSubD type=submit value=' + uW.g_js_strings.commonstr.info + '></td></tr></table><BR><BR>';
main += '<DIV id=ptOverOutput align=left style="margin-top:10px; background-color:#F8F8F8; height:680px;"></div>';
main += '<TD width = "100px" ; border:none"><a href="https://code.google.com/p/koc-power-tools/wiki/HowToOverview" target="_blank">HELP</a></td></tr>';
t.cont.innerHTML = main;
t.Overv = document.getElementById('ptOverOutput');
document.getElementById('ptmrchSubS').addEventListener('click', e_butSubtab, false);
document.getElementById('ptmrchSubA').addEventListener('click', e_butSubtab, false);
document.getElementById('ptmrchSubB').addEventListener('click', e_butSubtab, false);
document.getElementById('ptmrchSubC').addEventListener('click', e_butSubtab, false);
document.getElementById('ptmrchSubD').addEventListener('click', e_butSubtab, false);
changeSubtab(document.getElementById('ptmrchSub' + Options.curOverTab));
function e_butSubtab(evt) {
changeSubtab(evt.target);
}
function changeSubtab(but) {
if (but == t.curTabBut)
return;
if (t.curTabBut) {
t.curTabBut.className = 'pbSubtab';
t.curTabBut.disabled = false;
}
t.curTabBut = but;
but.className = 'pbSubtab pbSubtabSel';
but.disabled = true;
t.curTabName = but.id.substr(-1);
Options.curOverTab = t.curTabName;
t.show();
}
},
hide: function () {
var t = Tabs.OverView;
clearTimeout(t.displayTimer);
},
show: function () {
var t = Tabs.OverView;
clearTimeout(t.displayTimer);
if (t.curTabName == 'S')
t.paintOverview();
else if (t.curTabName == 'A')
t.showResources();
else if (t.curTabName == 'B')
t.showTroops();
else if (t.curTabName == 'C')
t.showBuilds();
else if (t.curTabName == 'D')
t.showInfo();
},
showResources: function () {
var t = Tabs.OverView;
t.Overv.innerHTML = null;
t.Overv.style.maxHeight = '745px';
t.Overv.style.overflowY = 'scroll';
t.Overv.style.maxWidth = '745px';
t.Overv.style.overflowX = 'scroll';
clearTimeout(t.displayTimer);
var z = "<DIV id=overMain style='font-size:11px'><TABLE class=ptTabOverview cellpadding=0 cellspacing=0><TR valign=top align=right><TD style='background: #FFFFFF; border:none;'></td>";
for (i = 0; i < Cities.numCities; i++) {
z += "<TD width=81 style='background: #FFFFFF'><B>" + Cities.cities[i].name.substring(0, 11) + '</b><BR>' + coordLink(Cities.cities[i].x, Cities.cities[i].y) + "<BR>" + uW.provincenames['p' + Cities.cities[i].provId];
cityID = 'city' + Cities.cities[i].id;
Gate = parseInt(Seed.citystats[cityID].gate);
if (Gate == 0)
z += '<BR>Hiding</td>';
else
z += '<BR><SPAN class=boldRed>Defending</span></td>';
}
// boosts
var trupkeepreduce = 0;
trupkeepreduce = Math.min(equippedthronestats(79), 33);
var trprodres = equippedthronestats(82);
var trprod = [0, 0, 0, 0, 0];
trprod[1] = Math.min(equippedthronestats(83) + trprodres, 2000);
trprod[2] = Math.min(equippedthronestats(84) + trprodres, 2000);
trprod[3] = Math.min(equippedthronestats(85) + trprodres, 2000);
trprod[4] = Math.min(equippedthronestats(86) + trprodres, 2000);
var trkntres = Math.min(equippedthronestats(76), 165);
for (var a = 1; a <= 5; a++) {
var total = 0;
z += '<TR><TD colspan="8" style="background: #FFFFFF"><B>' + ((a != 5) ? uW.resourceinfo['rec' + a] : uW.resourceinfo['7']) + ': </b></td></tr><TR>';
for (b = 0; b < Cities.numCities; b++) total += parseInt((a != 5) ? Seed.resources["city" + Seed.cities[b][0]]['rec' + a][0] / 3600 : Seed.resources["city" + Seed.cities[b][0]]['rec' + a][0]);
z += '<TD>' + addCommas(total) + '</td>';
for (b = 0; b < Cities.numCities; b++) z += '<TD align=right ">' + addCommasInt((a != 5) ? Seed.resources["city" + Seed.cities[b][0]]['rec' + a][0] / 3600 : Seed.resources["city" + Seed.cities[b][0]]['rec' + a][0]) + '</font></td>';
z += '</tr><TR><TD style="background: #FFFFFF"><FONT COLOR="686868">' + uW.g_js_strings.showResourceTooltip.caplimit + ':</font></td>';
for (b = 0; b < Cities.numCities; b++) {
z += '<TD align=right style="background: #FFFFFF">';
var kntId = uW.seed.leaders["city" + Seed.cities[b][0]].resourcefulnessKnightId;
var kntresful = 0;
if (kntId > 0)
trkntresful = trkntres;
if (a == 5) {
var aethcapinc = 0;
aethcapinc += equippedthronestats(88);
var equippedItems = equippedthroneItems(equippedItems);
var currSet = uW.cm.ThroneController.hasFactionBonus(equippedItems);
if (currSet.hazBonus && currSet.faction === "fey")
aethcapinc += uW.cm.ThroneController.effectBonus(95);
var aethercap = Math.round(2000000 * (1 + Math.min(aethcapinc, unsafeWindow.cm.thronestats.boosts["ResourceCap"].Max) / 100));
z += (aethercap > parseInt(Seed.resources["city" + Seed.cities[b][0]]['rec' + a][0])) ? '<FONT COLOR= "669900">' : '<FONT COLOR="686868">';
z += addCommas(aethercap);
} else {
if (parseInt(Seed.resources["city" + Seed.cities[b][0]]['rec' + a][1] / 3600) > parseInt(Seed.resources["city" + Seed.cities[b][0]]['rec' + a][0] / 3600)) z += '<FONT COLOR= "669900">';
else z += '<FONT COLOR="686868">';
z += addCommas(parseInt(Seed.resources["city" + Seed.cities[b][0]]['rec' + a][1] / 3600));
}
z += '</font></td>';
}
if (a != 5) {
z += '</tr><TR><TD style="background: #FFFFFF"><FONT COLOR="686868">' + uW.g_js_strings.showResourceTooltip.hrprod + ':</font></td>';
for (b = 0; b < Cities.numCities; b++) {
var rp = getResourceProduction(Seed.cities[b][0]);
var bp = uW.cm.Resources.getProductionBase(a, Seed.cities[b][0]);
var upkbase = uW.cm.Resources.getUpkeep(a, Seed.cities[b][0]) / (1 - trupkeepreduce / 100);
var usage = parseInt(Seed.resources["city" + Seed.cities[b][0]]['rec' + a][3]);
// adjust for throne room upkeep reduction
if (a == 1)
usage = parseInt(usage - upkbase * trupkeepreduce / 100);
z += '<TD align=right style="background: #FFFFFF"><FONT COLOR="686868">' + addCommas(parseInt(rp[a] - usage + bp * (trprod[a]) / 100)) + '</font></td>';
}
}
z += '</tr>';
if (a == 1) {
z += '<TR><TD style="background: #FFFFFF"><FONT COLOR="686868">' + uW.g_js_strings.commonstr.upkeep + ':</font></td>';
for (b = 0; b < Cities.numCities; b++) {
var rp = getResourceProduction(Seed.cities[b][0]);
var bp = uW.cm.Resources.getProductionBase(a, Seed.cities[b][0]);
var usage = parseInt(Seed.resources["city" + Seed.cities[b][0]]['rec' + a][3]);
var upkbase = uW.cm.Resources.getUpkeep(a, Seed.cities[b][0]) / (1 - trupkeepreduce / 100);
// adjust for throne room bonuses
usage = parseInt(usage - upkbase * trupkeepreduce / 100);
var prod = rp[a] - usage + bp * (trprod[a]) / 100;
var timeLeft = parseInt(Seed.resources["city" + Seed.cities[b][0]]['rec' + a][0]) / 3600 / (0 - prod) * 3600;
if (prod > 0) z += '<TD align=right style="background: #FFFFFF"><FONT COLOR="686868">----</font></td>';
else {
if (Options.enableFoodWarn && timeLeft < (Options.foodWarnHours * 3600)) z += '<TD align=right style="background: #FFFFFF"><FONT COLOR=RED>';
else z += '<TD align=right style="background: #FFFFFF"> <FONT COLOR="686868">';
z += timestrShort(timeLeft) + '</font></td>';
}
}
}
var totalmarching = 0;
for (b = 0; b < Cities.numCities; b++) {
var march = Seed.queue_atkp['city' + Seed.cities[b][0]];
if (march != [])
for (c in march)
if (march[c]['resource' + a] != undefined && march[c]['marchType'] != 9) totalmarching += parseInt(march[c]['resource' + a]);
}
if (totalmarching > 0) {
z += '</tr><TR><TD style="background: #FFFFFF"><FONT COLOR="686868">' + uW.g_js_strings.commonstr.marching + ':</font></td>';
for (b = 0; b < Cities.numCities; b++) {
var recmarching = 0;
var march = Seed.queue_atkp['city' + Seed.cities[b][0]];
if (march != [])
for (c in march)
if (march[c]['resource' + a] != undefined && march[c]['marchType'] != 9) recmarching += (parseInt(march[c]['resource' + a]));
if (recmarching != 0) z += '<TD align=right style="background: #FFFFFF"><FONT COLOR="686868">' + addCommas(recmarching) + '</font></td>';
else z += '<TD align=right style="background: #FFFFFF"></td>';
}
}
}
z += '</tr><TR><TD colspan="8" style="background: #FFFFFF; border:none"> </td><TR><TD colspan="8" style="background: #FFFFFF"><B>' + uW.g_js_strings.commonstr.gold + ':</b></td></tr><TR>';
var goldtotal = 0;
for (b = 0; b < Cities.numCities; b++) goldtotal += parseInt(Seed.citystats["city" + Seed.cities[b][0]]['gold'][0]);
z += '<TD>' + addCommas(goldtotal) + '</td>';
for (b = 0; b < Cities.numCities; b++) {
z += '<TD align=right >' + addCommas(Seed.citystats["city" + Seed.cities[b][0]]['gold'][0]) + '</td>';
}
z += '<TR><TD style="background: #FFFFFF"><FONT COLOR="686868">' + uW.g_js_strings.showGoldTooltip.netincome + ':</font></td>';
for (b = 0; b < Cities.numCities; b++) {
var f = 1;
if (parseInt(Seed.playerEffects.r0BstExp) > unixTime()) f = 2;
var g = parseInt(parseInt(Seed.citystats["city" + Seed.cities[b][0]]['gold'][1] * Seed.citystats["city" + Seed.cities[b][0]]['pop'][0]) * 0.01) * f;
var h = parseInt(Seed.citystats["city" + Seed.cities[b][0]]["gold"][2] * 10 * -1);
z += '<TD align=right style="background: #FFFFFF"><FONT COLOR="686868">' + addCommas(g + h) + '</font></td>';
}
z += '</tr><TR><TD colspan="8" style="background: #FFFFFF"> </td> </tr><TR><TD style="background: #F8F8F8"><B>' + uW.g_js_strings.showPopTooltip.idlepop + ':</b></td>';
for (b = 0; b < Cities.numCities; b++) {
var i = Seed.citystats["city" + Seed.cities[b][0]]['pop'][0];
var j = Seed.citystats["city" + Seed.cities[b][0]]['pop'][3];
var k = i - j;
if (k > 0) z += '<TD align=right style="background: #FFFFFF">' + addCommas(k) + '</td>';
else z += '<TD align=right style="background: #FFFFFF"><FONT COLOR=red>' + addCommas(k) + '</font></td>';
}
z += '</tr><TR><TD colspan="8" style="background: #FFFFFF"> </td> </tr><TR><TD style="background: #F8F8F8"><B>' + uW.g_js_strings.showMyWilderness.conqueredwild + ':</b></td>';
for (b = 0; b < Cities.numCities; b++) {
var totWilds = 0;
dat = Seed.wilderness['city' + Seed.cities[b][0]];
if (dat != null && matTypeof(dat) == 'object')
for (k in dat)
++totWilds;
var castle = parseInt(Seed.buildings['city' + Seed.cities[b][0]].pos0[1]);
if (castle == 11) castle = 12;
else if (castle == 12) castle = 14;
if (totWilds < castle)
z += '<TD align=right "><FONT COLOR=RED>' + totWilds + '/' + castle + '</font></span>';
else
z += '<TD align=right>' + totWilds + '/' + castle + '</span>';
}
z += '</tr>';
for (c in uW.cm.WILDERNESS_TYPES) {
var wildtype = '';
switch (c) {
case 'GRASSLAND':
wildtype = uW.g_js_strings.commonstr.grassland;
break;
case 'LAKE':
wildtype = uW.g_js_strings.commonstr.lake;
break;
case 'WOODS':
wildtype = uW.g_js_strings.commonstr.woods;
break;
case 'HILLS':
wildtype = uW.g_js_strings.commonstr.hills;
break;
case 'MOUNTAIN':
wildtype = uW.g_js_strings.commonstr.mountain;
break;
case 'PLAIN':
wildtype = uW.g_js_strings.commonstr.plain;
break;
}
var grandtotal = 0;
for (b = 0; b < Cities.numCities; b++) {
dat = Seed.wilderness['city' + Seed.cities[b][0]];
if (dat != null && matTypeof(dat) == 'object')
for (k in dat)
if (dat[k]['tileType'] == uW.cm.WILDERNESS_TYPES[c]) grandtotal++;
}
if (grandtotal > 0) {
z += '<TR><TD style="background: #FFFFFF">' + wildtype + '</td>';
for (b = 0; b < Cities.numCities; b++) {
var total = 0;
dat = Seed.wilderness['city' + Seed.cities[b][0]];
if (dat != null && matTypeof(dat) == 'object')
for (k in dat)
if (dat[k]['tileType'] == uW.cm.WILDERNESS_TYPES[c])
++total;
if (total > 0) z += '<TD align=right style="background: #FFFFFF">' + total + '</td>';
else z += '<TD style="background: #FFFFFF"></td>';
}
z += '</tr>';
}
}
var totboosts = false;
var l = Seed.playerEffects;
for (p in l)
if (l[p] > unixTime()) totboosts = true;
if (totboosts) {
z += '</tr><TR><TD colspan="8" style="background: #FFFFFF; border:none"> </td> </tr><TR><TD style="background: #F8F8F8"><B>' + uW.g_js_strings.commonstr.boost + ':</b></td>';
for (p in l) {
if (p == 'r0BstExp' && l[p] > unixTime()) z += '<TR><TD style="background: #FFFFFF">' + uW.resourceinfo['rec' + 0] + '</td><TD align=right style="background: #FFFFFF">' + timestr((l[p] - unixTime())) + '</td></tr>';
if (p == 'r1BstExp' && l[p] > unixTime()) z += '<TR><TD style="background: #FFFFFF">' + uW.resourceinfo['rec' + 1] + '</td><TD align=right style="background: #FFFFFF">' + timestr((l[p] - unixTime())) + '</td></tr>';
if (p == 'r2BstExp' && l[p] > unixTime()) z += '<TR><TD style="background: #FFFFFF">' + uW.resourceinfo['rec' + 2] + '</td><TD align=right style="background: #FFFFFF">' + timestr((l[p] - unixTime())) + '</td></tr>';
if (p == 'r3BstExp' && l[p] > unixTime()) z += '<TR><TD style="background: #FFFFFF">' + uW.resourceinfo['rec' + 3] + '</td><TD align=right style="background: #FFFFFF">' + timestr((l[p] - unixTime())) + '</td></tr>';
if (p == 'r4BstExp' && l[p] > unixTime()) z += '<TR><TD style="background: #FFFFFF">' + uW.resourceinfo['rec' + 4] + '</td><TD align=right style="background: #FFFFFF">' + timestr((l[p] - unixTime())) + '</td></tr>';
if (p == 'atkExpire' && l[p] > unixTime()) z += '<TR><TD style="background: #FFFFFF">' + uW.g_js_strings.commonstr.attack + '</td><TD align=right style="background: #FFFFFF">' + timestr((l[p] - unixTime())) + '</td></tr>';
if (p == 'defExpire' && l[p] > unixTime()) z += '<TR><TD style="background: #FFFFFF">' + uW.g_js_strings.commonstr.defend + '</td><TD align=right style="background: #FFFFFF">' + timestr((l[p] - unixTime())) + '</td></tr>';
if (p == 'loadExpire' && l[p] > unixTime()) z += '<TR><TD style="background: #FFFFFF">' + uW.g_js_strings.modal_barracks_train.load + '</td><TD align=right style="background: #FFFFFF">' + timestr((l[p] - unixTime())) + '</td></tr>';
if (p == 'returnExpire' && l[p] > unixTime()) z += '<TR><TD style="background: #FFFFFF">' + uW.g_js_strings.commonstr.returning + '</td><TD align=right style="background: #FFFFFF">' + timestr((l[p] - unixTime())) + '</td></tr>';
if (p == 'troopUpkeepReductExp' && l[p] > unixTime()) z += '<TR><TD style="background: #FFFFFF">' + uW.g_js_strings.commonstr.upkeep + '</td><TD align=right style="background: #FFFFFF">' + timestr((l[p] - unixTime())) + '</td></tr>';
if (p == 'fogExpire' && l[p] > unixTime()) z += '<TR ><TD style="background: #FFFFFF">' + uW.itemlist.i10021.name + '</td><TD align=right style="background: #FFFFFF">' + timestr((l[p] - unixTime())) + '</td></tr>';
}
}
z += '</table></div>';
t.Overv.innerHTML = z;
t.displayTimer = setTimeout(t.showResources, 1000);
},
showTroops: function () {
var t = Tabs.OverView;
t.Overv.innerHTML = null;
t.Overv.style.maxHeight = '650px';
t.Overv.style.overflowY = 'scroll';
t.Overv.style.maxWidth = '745px';
t.Overv.style.overflowX = 'scroll';
var n = "<TABLE class=ptTabOverview cellpadding=0 cellspacing=0><TR valign=top align=right></td><TD colspan='2' id=update align=center style='background: #FFFFFF; border:none; vertical-align:middle'><INPUT id=TEST type=submit value=" + uW.g_js_strings.modal_progress_actions.updatestatus + "></td></td>";
for (i = 0; i < Cities.numCities; i++) {
n += "<TD width=81 style='background: #FFFFFF'><B>" + Cities.cities[i].name.substring(0, 11) + '</b><BR>' + coordLink(Cities.cities[i].x, Cities.cities[i].y) + "<BR>" + uW.provincenames['p' + Cities.cities[i].provId] + "</td>";
}
for (var ui in uW.cm.UNIT_TYPES) {
a = uW.cm.UNIT_TYPES[ui];
var total = 0;
var marching = 0;
var raiding = 0;
var tottraining = 0;
for (b = 0; b < Cities.numCities; b++) {
var train = Seed.queue_unt['city' + Seed.cities[b][0]];
if (train != [])
for (c in train)
if (train[c][0] == a) tottraining += parseInt(train[c][1]);
}
if (tottraining > 0) var rowsp = 3;
else var rowsp = 2;
n += '<TR><TD rowspan="' + rowsp + '" style="background: #FFFFFF; vertical-align:top;"><img src=https://kabam1-a.akamaihd.net/silooneofcamelot//fb/e2/src/img/units/unit_' + a + '_30.jpg></td>';
for (b = 0; b < Cities.numCities; b++) total += parseInt(Seed.units['city' + Seed.cities[b][0]]['unt' + a]);
if (total > 0) n += '<TD align=right >' + addCommas(total) + '</td>';
else n += '<TD align=right > </td>';
for (b = 0; b < Cities.numCities; b++) {
if (Seed.units['city' + Seed.cities[b][0]]['unt' + a] > 0) n += '<TD align=right >' + addCommas(Seed.units['city' + Seed.cities[b][0]]['unt' + a]) + '</td>';
else n += '<TD ></td>';
}
n += '</tr><TR><TD style="background: #FFFFFF"><FONT COLOR="686868">' + uW.g_js_strings.commonstr.marching + '</font></td>';
for (b = 0; b < Cities.numCities; b++) {
marching = 0;
raiding = 0;
var atkp = Seed.queue_atkp['city' + Seed.cities[b][0]];
if (atkp != []) {
for (c in atkp) {
if (atkp[c]['marchType'] == 9) raiding += (parseInt(atkp[c]['unit' + a + 'Count']) + parseInt(atkp[c]['unit' + a + 'Return']));
else if (atkp[c]['marchType'] != undefined) marching += parseInt(atkp[c]['unit' + a + 'Count']);
}
if (marching > 0 || raiding > 0) {
n += '<TD align=right style="background: #FFFFFF"><FONT COLOR="686868">' + addCommas(marching) + ' / ';
n += addCommas(raiding) + '</font></td>';
} else n += '<TD style="background: #FFFFFF"></td>';
}
}
if (tottraining > 0) {
n += '</tr><TR><TD style="background: #FFFFFF"><FONT COLOR="686868">' + uW.g_js_strings.modal_openBarracks.trainingttl + '</font></td>';
for (b = 0; b < Cities.numCities; b++) {
training = 0;
var train = Seed.queue_unt['city' + Seed.cities[b][0]];
if (train != []) {
for (c in train)
if (train[c][0] == a) training += parseInt(train[c][1]);
if (training > 0) {
n += '<TD align=right style="background: #FFFFFF"><FONT COLOR="686868">' + addCommas(training) + '</font></td>';
} else n += '<TD style="background: #FFFFFF"></td>';
}
}
n += '</tr>';
}
}
n += '<TR><TD colspan="8" style="background: #FFFFFF; border:none;"> </td> </tr>';
n += '<TR><TD colspan="2" style="border=solid">' + uW.g_js_strings.openKnights.myknights + ':</td>';
for (b = 0; b < Cities.numCities; b++) {
var knights = 0;
var knightscity = Seed.knights['city' + Seed.cities[b][0]];
if (knightscity != [])
for (c in knightscity)
if (knightscity[c]['knightId'] > 0) knights++;
n += '<TD align=right >' + knights + '</td>';
}
n += '</tr><TR><TD colspan="2" >' + uW.g_js_strings.commonstr.combat + ':</td>';
for (b = 0; b < Cities.numCities; b++) {
var combat = 0;
var knightscity = Seed.knights['city' + Seed.cities[b][0]];
if (knightscity != [])
for (c in knightscity)
if (knightscity[c]['combat'] > combat)
if (Seed.leaders['city' + Seed.cities[b][0]]['combatKnightId'] != knightscity[c]['knightId']) combat = knightscity[c]['combat'];
n += '<TD align=right style="background: #FFFFFF">' + combat + '</td>';
}
n += '<TR><TD colspan="8" style="background: #FFFFFF; border:none;"> </td> </tr>';
n += '<TR><TD colspan="2" style="border=solid">' + uW.g_js_strings.modal_barracks_trainingtab.totaltraintime + ':</td>';
for (b = 0; b < Cities.numCities; b++) {
var time = 0;
now = unixTime();
var unt = Seed.queue_unt['city' + Seed.cities[b][0]];
//alert(unt.length);
if (unt != null && unt.length > 0) time = (unt[unt.length - 1][3] - now);
if (time < 0) time = 0;
if (time < 3600) n += '<TD align=right ><FONT COLOR=red>' + timestr(time) + '</font></td>';
else n += '<TD align=right >' + timestr(time) + '</td>';
}
n += '</tr></table>';
t.Overv.innerHTML = n;
document.getElementById('TEST').addEventListener('click', function () {
/*
var params = uW.Object.clone(uW.g_ajaxparams);
new AjaxRequest(uW.g_ajaxpath + "/fb/e2/src/main_src.php?g=&y=0&n=nan001&l=nl_NL&messagebox=&standalone=0&res=1&iframe=1&lang=en&ts=1304248288.7067&s=250&appBar=" + uW.g_ajaxsuffix, {
method: "POST",
parameters: params,
onSuccess: function (rslt) {
var mainSrcHTMLCode = rslt.responseText;
var myregexp = /var seed=\{.*?\};/;
var match = myregexp.exec(mainSrcHTMLCode);
if (match != null) {
result = match[0];
result = result.substr(4);
var seed = eval(result);
uW.document.seed = seed;
Seed = seed;
uW.seed = seed;
document.getElementById('update').style.background ='#99FF99';
setTimeout(function(){ (document.getElementById('update').style.background ='#FFFFF'); }, 1000);
}
},
onFailure: function () {
if (notify != null)
notify(rslt.errorMsg);
},
});
*/
Tabs.Options.updateAll();
}, false);
t.displayTimer = setTimeout(t.showTroops, 1000);
},
showBuilds: function () {
var t = Tabs.OverView;
clearTimeout(t.displayTimer);
t.Overv.innerHTML = null;
t.Overv.style.maxHeight = '650px';
t.Overv.style.overflowY = 'scroll';
t.Overv.style.maxWidth = '745px';
t.Overv.style.overflowX = 'scroll';
var wall = 0;
var blacksmith = 0;
var fletching = 0;
var geometry = 0;
var metalalloys = 0;
var logging = 0;
var poisonededge = 0;
var FieldSpace = {
1: 13,
2: 16,
3: 19,
4: 22,
5: 25,
6: 28,
7: 31,
8: 34,
9: 37,
10: 40,
11: 41,
12: 42
};
fertilizer = Seed.tech['tch1'];
logging = Seed.tech['tch2'];
stoneworking = Seed.tech['tch3'];
mining = Seed.tech['tch4'];
geometry = Seed.tech['tch5'];
eagleeyes = Seed.tech['tch6'];
poisonededge = Seed.tech['tch8'];
metalalloys = Seed.tech['tch9'];
featherweightpowder = Seed.tech['tch10'];
magicalmapping = Seed.tech['tch11'];
alloyhorseshoes = Seed.tech['tch12'];
fletching = Seed.tech['tch13'];
shrinkingpowder = Seed.tech['tch14'];
healingpotions = Seed.tech['tch15'];
giantsstrength = Seed.tech['tch16'];
var m = '<DIV id=BuildsDiv style="font-size:12px"><TABLE cellpadding=5 cellspacing=0 border="1" style="border: 1px solid; border-style: none none none none;"><TR valign=top align=right>';
m += "<TD align=left width=85 style='background-color:" + Colors.OverviewDarkRow + ";'><INPUT id=showReq type=checkbox " + (t.showReq ? 'CHECKED ' : '') + ">Show missing req.</td>";
for (i = 0; i < Cities.numCities; i++) {
m += "<TD width=79 style='background-color:" + Colors.OverviewDarkRow + "'><B>" + Cities.cities[i].name.substring(0, 11) + "</b><BR>" + coordLink(Cities.cities[i].x, Cities.cities[i].y) + "<BR></td>";
}
m += '<TR valign=top align=right><TD width=85 style="background-color:' + Colors.OverviewDarkRow + ';">Building</td>';
for (i = 0; i < Seed.cities.length; i++) {
city = 'city' + Seed.cities[i][0];
m += '<TD width=79 style="background:#FFFFFF">';
if (Seed.queue_con[city][0] != undefined) {
m += uW.buildingcost['bdg' + Seed.queue_con[city][0][0]][0];
m += ' (' + Seed.queue_con[city][0][1] + ')';
m += '<br>' + timestr((Seed.queue_con[city][0][4] - unixTime()), true);
}
m += '</td>';
}
m += '</tr>';
m += '<TR valign=top align=right><TD width=85 style="background-color:' + Colors.OverviewDarkRow + ';">Researching</td>';
for (i = 0; i < Seed.cities.length; i++) {
city = 'city' + Seed.cities[i][0];
m += '<TD width=79 style="background:#FFFFFF">';
if (Seed.queue_tch[city][0] != undefined) {
m += uW.techcost['tch' + Seed.queue_tch[city][0][0]][0];
m += ' (' + Seed.queue_tch[city][0][1] + ')';
m += '<br>' + timestr((Seed.queue_tch[city][0][3] - unixTime()), true);
}
m += '</td>';
}
m += '</tr><TR><TD colspan="8" style="background: #FFFFFF; border:none"> </td></tr>';
m += '<TR valign=top align=right><TD width=85 style="background-color:' + Colors.OverviewDarkRow + ';">' + uW.fortcost['frt53'][0] + '</td>';
for (i = 0; i < Seed.cities.length; i++) {
city = 'city' + Seed.cities[i][0];
for (y in Seed.buildings[city]) {
if (Seed.buildings[city][y][0] == 15) blacksmith = Seed.buildings[city][y][1];
}
if (Seed.buildings[city].pos1 == null) wall = 0;
else wall = parseInt(Seed.buildings[city].pos1[1]);
var WallSpace = 0;
for (var b = 1; b < (wall + 1); b++) {
WallSpace += (b * 3000)
};
max = WallSpace / 2 / 2 - parseInt(Seed.fortifications[city]["fort53"]) - parseInt(Seed.fortifications[city]["fort55"]);
m += '<TD width=79 style="background:#FFFFFF">' + Seed.fortifications[city]["fort53"];
if (wall >= 6 && blacksmith >= 6 && fletching >= 5 && max > 0) m += '<br>Left: ' + max + '</td>';
else if (t.showReq) {
if (wall < 6) m += '<br><FONT COLOR= "CC0000">Wall: ' + wall + '(6)</font>';
if (blacksmith < 6) m += '<br><FONT COLOR= "CC0000">BlackS.: ' + blacksmith + '(6)</font>';
if (fletching < 5) m += '<br><FONT COLOR= "CC0000">Fletch.: ' + fletching + '(5)</font>';
m += '</td>';
}
}
m += '</tr><TR valign=top align=right><TD width=85 style="background-color:' + Colors.OverviewDarkRow + ';">' + uW.fortcost['frt55'][0] + '</td>';
for (i = 0; i < Seed.cities.length; i++) {
city = 'city' + Seed.cities[i][0];
for (y in Seed.buildings[city]) {
if (Seed.buildings[city][y][0] == 15) blacksmith = Seed.buildings[city][y][1];
}
if (Seed.buildings[city].pos1 == null) wall = 0;
else wall = parseInt(Seed.buildings[city].pos1[1]);
var WallSpace = 0;
for (var b = 1; b < (wall + 1); b++) {
WallSpace += (b * 3000)
};
max = WallSpace / 2 / 4 - parseInt(Seed.fortifications[city]["fort53"]) - parseInt(Seed.fortifications[city]["fort55"]);
m += '<TD width=79 style="background:#FFFFFF">' + Seed.fortifications[city]["fort55"];
if (wall >= 8 && blacksmith >= 8 && fletching >= 7 && geometry >= 7 && max > 0) m += '<br>Left: ' + max + '</td>';
else if (t.showReq) {
if (wall < 8) m += '<br><FONT COLOR= "CC0000">Wall: ' + wall + '(8)</font>';
if (blacksmith < 8) m += '<br><FONT COLOR= "CC0000">BlackS.: ' + blacksmith + '(8)</font>';
if (fletching < 7) m += '<br><FONT COLOR= "CC0000">Fletch.: ' + fletching + '(7)</font>';
if (geometry < 7) m += '<br><FONT COLOR= "CC0000">Geomet.: ' + geometry + '(7)</font>';
m += '</td>';
}
}
m += '<TR valign=top align=right><TD width=85 style="background-color:' + Colors.OverviewDarkRow + ';">Wall defences</td>';
for (i = 0; i < Seed.cities.length; i++) {
city = 'city' + Seed.cities[i][0];
if (Seed.buildings[city].pos1 == null) wall = 0;
else wall = parseInt(Seed.buildings[city].pos1[1]);
build = (parseInt(Seed.fortifications[city]["fort53"]) * 2) + (parseInt(Seed.fortifications[city]["fort55"]) * 4);
var WallSpace = 0;
for (var b = 1; b < (wall + 1); b++) {
WallSpace += (b * 3000)
};
max = WallSpace / 2;
if (build < max) m += '<TD width=79 style="background:#FFFFFF"><FONT COLOR= "CC0000">';
else m += '<TD width=79 style="background:#FFFFFF"><FONT COLOR= "669900">';
m += build + '</font>';
m += '/' + max + '</td>';
}
m += '</tr><TR valign=top align=right><TD width=85 style="background-color:' + Colors.OverviewDarkRow + ';">' + uW.fortcost['frt60'][0] + '</td>';
for (i = 0; i < Seed.cities.length; i++) {
city = 'city' + Seed.cities[i][0];
for (y in Seed.buildings[city]) {
if (Seed.buildings[city][y][0] == 15) blacksmith = Seed.buildings[city][y][1];
}
if (Seed.buildings[city].pos1 == null) wall = 0;
else wall = parseInt(Seed.buildings[city].pos1[1]);
var WallSpace = 0;
for (var b = 1; b < (wall + 1); b++) {
WallSpace += (b * 3000)
};
max = WallSpace / 2 / 4 - (parseInt(Seed.fortifications[city]["fort60"]) * 4) - (parseInt(Seed.fortifications[city]["fort61"]) * 1) - (parseInt(Seed.fortifications[city]["fort62"]) * 3);
m += '<TD width=79 style="background:#FFFFFF">' + Seed.fortifications[city]["fort60"];
if (wall >= 4 && blacksmith >= 4 && poisonededge >= 4 && max > 0) m += '<br>Left: ' + max + '</td>';
else if (t.showReq) {
if (wall < 4) m += '<br><FONT COLOR= "CC0000">Wall: ' + wall + '(4)</font>';
if (blacksmith < 4) m += '<br><FONT COLOR= "CC0000">BlackS.: ' + blacksmith + '(4)</font>';
if (poisonededge < 4) m += '<br><FONT COLOR= "CC0000">Poison.: ' + poisonededge + '(4)</font>';
m += '</td>';
}
}
m += '</tr><TR valign=top align=right><TD width=85 style="background-color:' + Colors.OverviewDarkRow + ';">' + uW.fortcost['frt61'][0] + '</td>';
for (i = 0; i < Seed.cities.length; i++) {
city = 'city' + Seed.cities[i][0];
for (y in Seed.buildings[city]) {
if (Seed.buildings[city][y][0] == 15) blacksmith = Seed.buildings[city][y][1];
}
if (Seed.buildings[city].pos1 == null) wall = 0;
else wall = parseInt(Seed.buildings[city].pos1[1]);
var WallSpace = 0;
for (var b = 1; b < (wall + 1); b++) {
WallSpace += (b * 3000)
};
max = WallSpace / 2 / 1 - (parseInt(Seed.fortifications[city]["fort60"]) * 4) - (parseInt(Seed.fortifications[city]["fort61"]) * 1) - (parseInt(Seed.fortifications[city]["fort62"]) * 3);
m += '<TD width=79 style="background:#FFFFFF">' + Seed.fortifications[city]["fort61"];
if (wall >= 1 && metalalloys >= 1 && max > 0) m += '<br>Left: ' + max + '</td>';
else if (t.showReq) {
if (wall < 1) m += '<br><FONT COLOR= "CC0000">Wall: ' + wall + '(1)</font>';
if (metalalloys < 1) m += '<br><FONT COLOR= "CC0000">Metal.: ' + metalalloys + '(1)</font>';
m += '</td>';
}
}
m += '</tr><TR valign=top align=right><TD style="background-color:' + Colors.OverviewDarkRow + ';">' + uW.fortcost['frt62'][0] + '</td>';
for (i = 0; i < Seed.cities.length; i++) {
city = 'city' + Seed.cities[i][0];
for (y in Seed.buildings[city]) {
if (Seed.buildings[city][y][0] == 15) blacksmith = Seed.buildings[city][y][1];
}
if (Seed.buildings[city].pos1 == null) wall = 0;
else wall = parseInt(Seed.buildings[city].pos1[1]);
var WallSpace = 0;
for (var b = 1; b < (wall + 1); b++) {
WallSpace += (b * 3000)
};
max = (WallSpace / 2 / 3).toFixed(0) - (parseInt(Seed.fortifications[city]["fort60"]) * 4) - (parseInt(Seed.fortifications[city]["fort61"]) * 1) - (parseInt(Seed.fortifications[city]["fort62"]) * 3);
m += '<TD width=79 style="background:#FFFFFF">' + Seed.fortifications[city]["fort62"];
if (wall >= 2 && blacksmith >= 2 && logging >= 2 && max > 0) m += '<br>Left: ' + max + '</td>';
else if (t.showReq) {
if (wall < 2) m += '<br><FONT COLOR= "CC0000">Wall: ' + wall + '(2)</font>';
if (blacksmith < 2) m += '<br><FONT COLOR= "CC0000">BlackS.: ' + blacksmith + '(2)</font>';
if (logging < 2) m += '<br><FONT COLOR= "CC0000">Logg.: ' + logging + '(2)</font>';
m += '</td>';
}
}
m += '<TR valign=top align=right><TD width=85 style="background-color:' + Colors.OverviewDarkRow + ';">Field defences</td>';
for (i = 0; i < Seed.cities.length; i++) {
city = 'city' + Seed.cities[i][0];
if (Seed.buildings[city].pos1 == null) wall = 0;
else wall = parseInt(Seed.buildings[city].pos1[1]);
build = (parseInt(Seed.fortifications[city]["fort60"]) * 4) + (parseInt(Seed.fortifications[city]["fort61"]) * 1) + (parseInt(Seed.fortifications[city]["fort62"]) * 3);
var WallSpace = 0;
for (var b = 1; b < (wall + 1); b++) {
WallSpace += (b * 3000)
};
max = WallSpace / 2;
if (build < max) m += '<TD width=79 style="background:#FFFFFF"><FONT COLOR= "CC0000">';
else m += '<TD width=79 style="background:#FFFFFF"><FONT COLOR= "669900">';
m += build + '</font>';
m += '/' + max + '</td>';
}
m += '</tr><TR><TD colspan="8" style="background: #FFFFFF; border:none"> </td></tr>';
// to do: change to match ascended cities (city center)
m += '<TR valign=top align=right><TD width=85 style="background-color:' + Colors.OverviewDarkRow + ';">City space</td>';
for (i = 0; i < Seed.cities.length; i++) {
var count = 0;
city = 'city' + Seed.cities[i][0];
for (y in Seed.buildings[city]) {
if (Seed.buildings[city][y][0] >= 5 && Seed.buildings[city][y][0] <= 21 && Seed.buildings[city][y][0] != 19) count++;
}
if (count == 31) m += '<TD width=79 style="background:#FFFFFF"><FONT COLOR= "669900">';
else m += '<TD width=79 style="background:#FFFFFF"><FONT COLOR= "CC0000">';
m += count + '</font> (31)</td>';
}
m += '</tr>';
// to do: change to match ascended cities (fields vs. resource points)
m += '<TR valign=top align=right><TD width=85 style="background-color:' + Colors.OverviewDarkRow + ';">Field space</td>';
for (i = 0; i < Seed.cities.length; i++) {
var count = 0;
var castle = 0;
city = 'city' + Seed.cities[i][0];
for (y in Seed.buildings[city]) {
if (Seed.buildings[city][y][0] == 0) castle = Seed.buildings[city][y][1];
if (Seed.buildings[city][y][0] >= 1 && Seed.buildings[city][y][0] <= 4) count++;
}
if (count == FieldSpace[castle]) m += '<TD width=79 style="background:#FFFFFF"><FONT COLOR= "669900">';
else m += '<TD width=79 style="background:#FFFFFF"><FONT COLOR= "CC0000">';
m += count + '</font> (' + FieldSpace[castle] + ')</td>';
}
m += '</tr>';
for (b = 0; b <= 27; b++) {
m += '<TR valign=top align=right><TD width=85 style="background-color:' + Colors.OverviewDarkRow + ';">' + uW.buildingcost['bdg' + b][0] + '</td>';
for (c = 0; c < Seed.cities.length; c++) {
var cid = Seed.cities[c][0];
var fid = 0;
if (Seed.cityData.city[cid].isPrestigeCity == true) {
fid = Seed.cityData.city[cid].prestigeInfo.prestigeType;
}
m += '<TD style="width:79px; max-width:79px; word-wrap: break-word; background:#FFFFFF">';
city = 'city' + Seed.cities[c][0];
var count = 0;
for (y in Seed.buildings[city]) {
if (Seed.buildings[city][y][0] == b) {
count++;
if (count > 1) m += ",";
if (Seed.buildings[city][y][1] >= 9) m += '<FONT COLOR= "669900">';
m += Seed.buildings[city][y][1];
if (Seed.buildings[city][y][1] >= 9) m += '</font>';
}
}
if (count == 0) {
if ((b == 21 && fid == 1) || ((b == 22 || b == 23) && fid != 1) || ((b == 24 || b == 25) && fid != 2) || ((b == 26 || b == 27) && fid != 3)) {
m += '-';
} else {
m += '<FONT COLOR= "CC0000">0</font>';
}
}
m += '</td>';
}
m += '</tr>';
}
m += '</tr><TR><TD colspan="8" style="background: #FFFFFF; border:none"> </td></tr>';
for (i = 0; i < Cities.numCities; i++) {}
m += '<TR valign=top align=right><TD width=85 style="background-color:' + Colors.OverviewDarkRow + ';">Guardians</td>';
for (i = 0; i < Seed.cities.length; i++) {
for (g = 0; g < Seed.guardian.length; g++) {
if (Seed.guardian[g]['cityId'] == Seed.cities[i][0] && Seed.guardian[g]['level'] != 0) {
m += '<TD width=79 style="background:#FFFFFF">';
if (Seed.guardian[g]['level'] >= 9) m += '<FONT COLOR= "669900">';
m += Seed.guardian[g]['level'] + "(" + Seed.guardian[g]['type'] + ")</td>";
if (Seed.guardian[g]['level'] >= 9) m += '</font>';
} else {
if (Seed.guardian[g]['cityId'] == Seed.cities[i][0] && Seed.guardian[g]['level'] == 0) m += '<TD width=79 style="background:#FFFFFF"><FONT COLOR= "CC0000">0</font></td>'
};
}
}
m += '</tr></table><BR></table><BR><TABLE class=ptBuilds border=1px cellpadding=2 cellspacing=0><TR valign=top align=left>';
for (i in uW.techcost) {
m += '<TD border=1px style="width:150px; background:#FFFFFF">' + uW.techcost[i][0] + '</td><TD align=center style="width:50px; max-width:150px; background:#FFFFFF;">';
if (Seed.tech[i] >= 9) m += '<FONT COLOR= "669900">';
if (Seed.tech[i] == 0) m += '<FONT COLOR= "CC0000">';
m += Seed.tech[i];
if (Seed.tech[i] >= 9 || Seed.tech[i] == 0) m += '</font>';
if (t.showReq) {
for (z = 0; z < Seed.cities.length; z++) {
city = 'city' + Seed.cities[z][0];
for (y in Seed.buildings[city]) {
var farm, sawmill, quarry, mine, alchemylab, workshop, blacksmith, stable, storehouse, barracks = 0;
if (Seed.buildings[city][y][0] == 1 && Seed.buildings[city][y][0] > farm) farm = Seed.buildings[city][y][1];
if (Seed.buildings[city][y][0] == 2 && Seed.buildings[city][y][0] > sawmill) sawmill = Seed.buildings[city][y][1];
if (Seed.buildings[city][y][0] == 3 && Seed.buildings[city][y][0] > quarry) quarry = Seed.buildings[city][y][1];
if (Seed.buildings[city][y][0] == 4 && Seed.buildings[city][y][0] > mine) mine = Seed.buildings[city][y][1];
if (Seed.buildings[city][y][0] == 9) storehouse = Seed.buildings[city][y][1];
if (Seed.buildings[city][y][0] == 11) alchemylab = Seed.buildings[city][y][1];
if (Seed.buildings[city][y][0] == 13 && Seed.buildings[city][y][0] > barracks) barracks = Seed.buildings[city][y][1];
if (Seed.buildings[city][y][0] == 15) blacksmith = Seed.buildings[city][y][1];
if (Seed.buildings[city][y][0] == 16) workshop = Seed.buildings[city][y][1];
if (Seed.buildings[city][y][0] == 17) stable = Seed.buildings[city][y][1];
}
}
m += '<FONT COLOR= "CC0000">';
switch (i) {
case '1':
if (alchemylab < Seed.tech[i]) m += '<BR>Alchemy Lab ' + alchemylab + '(' + (Seed.tech[i]) + ')';
if (farm < Seed.tech[i]) m += '<BR>Farm ' + farm + '(' + (Seed.tech[i] + 1) + ')</td>';
break;
case '2':
if (alchemylab < Seed.tech[i]) m += '<BR>Alchemy Lab ' + alchemylab + '(' + (Seed.tech[i]) + ')';
if (sawmill < Seed.tech[i]) m += '<BR>Sawmill ' + sawmill + '(' + (Seed.tech[i]) + ')';
break;
case '3':
if (alchemylab < Seed.tech[i]) m += '<BR>Alchemy Lab ' + alchemylab + '(' + (Seed.tech[i]) + ')';
if (quarry < Seed.tech[i]) m += '<BR>Quarry ' + quarry + '(' + (Seed.tech[i]) + ')</td>';
break;
case '4':
if (alchemylab < Seed.tech[i]) m += '<BR>Alchemy Lab ' + alchemylab + '(' + (Seed.tech[i]) + ')';
if (mine < Seed.tech[i]) m += '<BR>Mine ' + mine + '(' + (Seed.tech[i]) + ')';
break;
case '5':
if (alchemylab < 3) m += '<BR>Alchemy Lab ' + alchemylab + '(3)';
if (alchemylab >= 3 && alchemylab < Seed.tech[i]) m += '<BR>Alchemy Lab ' + alchemylab + '(' + (Seed.tech[i]) + ')';
if (workshop < Seed.tech[i]) m += '<BR>Workshop ' + workshop + '(' + (Seed.tech[i]) + ')';
if (stoneworking < 2) m += '<BR>Stoneworking ' + stoneworking + '(2)';
break;
case '6':
if (alchemylab < 3) m += '<BR>Alchemy Lab ' + alchemylab + '(3)';
if (alchemylab >= 3 && alchemylab < Seed.tech[i]) m += '<BR>Alchemy Lab ' + alchemylab + '(' + (Seed.tech[i]) + ')';
break;
case '8':
if (alchemylab < 2) m += '<BR>Alchemy Lab ' + alchemylab + '(2)';
if (alchemylab >= 2 && alchemylab < Seed.tech[i]) m += '<BR>Alchemy Lab ' + alchemylab + '(' + (Seed.tech[i]) + ')';
if (barracks < 2) m += '<BR>Barracks ' + barracks + '(2)';
break;
case '9':
if (alchemylab < 3) m += '<BR>Alchemy Lab ' + alchemylab + '(3)';
if (alchemylab >= 3 && alchemylab < Seed.tech[i]) m += '<BR>Alchemy Lab ' + alchemylab + '(' + (Seed.tech[i]) + ')';
if (blacksmith < Seed.tech[i]) m += '<BR>Blacksmith ' + blacksmith + '(' + (Seed.tech[i]) + ')';
if (mining < Seed.tech[i]) m += '<BR>Mining ' + mining + '(' + (Seed.tech[i]) + ')';
break;
case '10':
if (alchemylab < 4) m += '<BR>Alchemy Lab ' + alchemylab + '(4)';
if (alchemylab >= 4 && alchemylab < Seed.tech[i]) m += '<BR>Alchemy Lab ' + alchemylab + '(' + (Seed.tech[i]) + ')';
break;
case '11':
if (alchemylab < 4) m += '<BR>Alchemy Lab ' + alchemylab + '(4)';
if (alchemylab >= 4 && alchemylab < Seed.tech[i]) m += '<BR>Alchemy Lab ' + alchemylab + '(' + (Seed.tech[i]) + ')';
break;
case '12':
if (alchemylab < 5) m += '<BR>Alchemy Lab ' + alchemylab + '(5)';
if (alchemylab >= 5 && alchemylab < Seed.tech[i]) m += '<BR>Alchemy Lab ' + alchemylab + '(' + (Seed.tech[i]) + ')';
if (stable < Seed.tech[i]) m += '<BR>Stable ' + stable + '(' + (Seed.tech[i] + 1) + ')';
if (metalalloys < Seed.tech[i]) m += '<BR>Metal Alloys ' + metalalloys + '(' + (Seed.tech[i] + 1) + ')';
break;
case '13':
if (alchemylab < 4) m += '<BR>Alchemy Lab ' + alchemylab + '(4)';
if (alchemylab >= 4 && alchemylab < Seed.tech[i]) m += '<BR>Alchemy Lab ' + alchemylab + '(' + (Seed.tech[i]) + ')';
if (logging < 4) m += '<BR>Logging ' + logging + '(4)';
break;
case '14':
if (alchemylab < 6) m += '<BR>Alchemy Lab ' + alchemylab + '(6)';
if (alchemylab >= 6 && alchemylab < Seed.tech[i]) m += '<BR>Alchemy Lab ' + alchemylab + '(' + (Seed.tech[i]) + ')';
if (storehouse < Seed.tech[i]) m += '<BR>Storehouse ' + storehouse + '(' + (Seed.tech[i]) + ')';
if (logging < 3) m += '<BR>Logging ' + logging + '(3)';
break;
case '15':
if (alchemylab < 6) m += '<BR>Alchemy Lab ' + alchemylab + '(6)';
if (alchemylab >= 6 && alchemylab < Seed.tech[i]) m += '<BR>Alchemy Lab ' + alchemylab + '(' + (Seed.tech[i]) + ')';
if (featherweightpowder < 3) m += '<BR>Featherweight Powder ' + featherweightpowder + '(3)';
break;
case '16':
if (alchemylab < 5) m += '<BR>Alchemy Lab ' + alchemylab + '(5)';
if (alchemylab >= 5 && alchemylab < Seed.tech[i]) m += '<BR>Alchemy Lab ' + alchemylab + '(' + (Seed.tech[i]) + ')';
if (logging < 5) m += '<BR>Logging ' + logging + '(5)';
if (geometry < 2) m += '<BR>Geometry ' + geometry + '(2)';
break;
}
m += '</font>';
}
m += '</td></tr>';
}
m += '</table><br />';
m += '<table class="ptBuilds" border="1px" cellpadding="2" cellspacing="0"><tr valign="top" align="left">';
for (i in uW.techcost2) {
m += '<td border="1px" style="width: 150px; background: #ffffff;">' + uW.techcost2[i][0] + '</td>';
m += '<td align="center" style="width: 50px; max-width: 150px; background: #ffffff;">';
if (Seed.tech2[i] >= 9) m += '<font color="669900">';
if (Seed.tech2[i] == 0) m += '<font color="cc0000">';
m += Seed.tech2[i];
if (Seed.tech2[i] >= 9 || Seed.tech2[i] == 0) m += '</font>';
// to do: show missing requirements
//if (t.showReq) {}
m += '</td></tr>';
}
m += '</table></div>';
t.Overv.innerHTML = m;
document.getElementById('showReq').addEventListener('change', function () {
t.showReq = document.getElementById('showReq').checked;
t.showBuilds();
}, false);
t.displayTimer = setTimeout(t.showBuilds, 1000);
},
showInfo: function () {
var t = Tabs.OverView;
t.Overv.innerHTML = null;
t.Overv.style.maxHeight = '650px';
t.Overv.style.overflowY = 'scroll';
t.Overv.style.maxWidth = '745px';
t.Overv.style.overflowX = 'scroll';
clearTimeout(t.displayTimer);
//Useful links
var u = '<DIV class=ptstat>USEFULL LINKS</div><DIV id=ptLinks><TABLE align=center cellpadding=1 cellspacing=0><TR>';
u += '<TD width="300px" ; border:none">Scripts</td><TD width="300px" ; border:none">Information sites</td></tr>';
u += '<TR><TD width="300px" ; border:none"><a href="https://userscripts.org/scripts/show/116541" target="_blank">Power Tools (Koc Scripters)</a></td>';
u += '<TD width="300px" ; border:none"><a href="http://koctools.com/index.php?pageid=servers" target="_blank">KOCTools</a></td></tr>';
u += '<TR><TD width="100px" ; border:none"><a href="https://code.google.com/p/koc-power-tools/wiki/Home?tm=6" target="_blank">Power Tools WIKI</a></td>';
u += '<TD width="300px" ; border:none"><a href="http://koc.dunno.com/index.sjs?f=ListServers" target="_blank">KOC Mapper</a></td></tr>';
u += '<TR><TD width="100px" ; border:none"><a href="https://userscripts.org/scripts/show/101052" target="_blank">Power Bot (Koc Scripters)</a></td>';
u += '<TD width="300px" ; border:none"><a href="https://kocscripters.com/">KOC scripters site</a></td></tr>';
u += '<TR><TD width="100px" ; border:none"><a href="https://code.google.com/p/koc-power-bot/wiki/Home?tm=6" target="_blank">Power Bot WIKI</a></td>';
u += '<TD width="300px" ; border:none"><a href="http://koc.wikia.com/wiki/" target="_blank">Koc Wikia</a></td></tr>';
u += '<TR><TD width="100px" ; border:none"><a href="https://addons.mozilla.org/en/firefox/addon/greasemonkey/" target="_blank">Greasemonkey</a></td><TD width="100px" ; border:none"></td>';
u += '<TR><TD width="100px" ; border:none"><a href="https://addons.mozilla.org/en/firefox/addon/scriptish/" target="_blank">Scriptish</a></td><TD width="100px" ; border:none"></td>';
u += '</tr></table></div><BR>';
//Crest info
var crestreq = {
3:{1101:4, 1102:2, 1103:1},
4:{1103:4, 1104:3, 1105:1},
5:{1106:4, 1107:3, 1108:2},
6:{1109:4, 1110:3, 1111:2},
7:{1112:4, 1113:3, 1114:2},
8:{1115:4, 1120:3, 1121:2}
};
u += '<DIV class=ptstat>CREST INFO</div><DIV id=ptLinks><TABLE align=center cellpadding=1 cellspacing=0><TR>';
for (city in crestreq) {
deed = 'q800' + city;
if (Seed.quests[deed] == 1) u += '<TD width=75px style="background:#CCFFCC">';
else u += '<TD width=75px ">';
u += uW.g_js_strings.commonstr.city + ' ' + city + '</td>';
for (crest in crestreq[city]) {
owned = Seed.items['i' + crest];
if (Seed.quests[deed] == 1) u += '<TD 200px style="background:#CCFFCC">';
else u += '<TD 200px ">';
if (owned == undefined) owned = 0;
if (owned < crestreq[city][crest]) u += '<FONT color=red>' + owned + '/' + crestreq[city][crest] + '</font> ' + uW.itemlist['i' + crest]['name'] + '</td>';
else u += '<FONT color=green>' + owned + '/' + crestreq[city][crest] + '</font> ' + uW.itemlist['i' + crest]['name'] + '</td>';
}
u += '</tr>';
}
u += '</table><BR>';
//Unit info
fortmight = {
u53: "4",
u55: "7",
u60: "1",
u61: "2",
u62: "3",
};
rownum = 0;
u += '<STYLE>.xtabH {background:#ffffe8; border:none; padding-right: 5px; padding-left: 5px; margin-left:10px; }\
.xtabHL { background:#ffffe8; border-width: 1px; border-style: none none none solid; padding-right:5px; padding-left:5px; margin-left:10px; }\
.xtabL { background:none; border-width: 1px; border-style: none none none solid; padding-right:5px; padding-left: 5px; margin-left:10px; }\
.xtabLine { padding:0px; spacing:0px; height:1px; border-color:black; border-width: 1px; border-style: none none solid none }</style>\
<DIV style="overflow-y:auto; overflow-x:hidden"><DIV class=ptstat>UNIT INFORMATION</div><TABLE align=center cellpadding=1 cellspacing=0>\
<TR align=center><TD class=xtab></td><TD class=xtabHL colspan=5><B>COST TO BUILD</b></td><TD class=xtabHL colspan=7><B>STATS</b></td><TD class=xtabHL><B>Upkeep</b></td></tr>\
<TR valign=bottom align=right><TD class=xtab></td><TD class=xtabHL>Food</td><TD class=xtabH>Wood</td><TD class=xtabH>Stone</td>\
<TD class=xtabH>Ore</td><TD class=xtabH>Pop</td><TD class=xtabHL>Might</td><TD class=xtabH>Life</td><TD class=xtabH>Atk</td><TD class=xtabH>Def</td><TD class=xtabH>Speed</td><TD class=xtabH>Range</td><TD class=xtabH>Load</td>\
<TD class=xtabHL>Food</td></tr>\
<TR style="height:1px;"><TD style="padding:0px; spacing:0px; height:1px; border-color:black; border-width: 1px; border-style: none none solid none" colspan=14></td></tr>';
for (var ui in uW.cm.UNIT_TYPES) {
i = uW.cm.UNIT_TYPES[ui];
if (++rownum % 2)
rsty = '';
else
rsty = ' style="background: #e8e8e8" ';
cost = uW.unitcost['unt' + i]; // NAME, Food, Wood, Stone, Ore, ?, IdlePop, Time
stats = uW.unitstats['unt' + i]; // Life, Attack, Defense, Speed, Range, Load
food = uW.unitupkeeps[i];
might = uW.unitmight['unt' + i];
u += '<TR ' + rsty + 'align=right><TD class=xtab align=left><B>' + cost[0].substr(0, 16) + '</b></td><TD class=xtabL>' + cost[1] + '</td><TD class=xtab>' + cost[2] + '</td>\
<TD class=xtab>' + cost[3] + '</td><TD class=xtab>' + cost[4] + '</td><TD class=xtab>' + cost[6] + '</td><TD class=xtabL>' + might + '</td>\
<TD class=xtab>' + stats[0] + '</td><TD class=xtab>' + stats[1] + '</td><TD class=xtab>' + stats[2] + '</td><TD class=xtab>' + stats[3] + '</td>\
<TD class=xtab>' + stats[4] + '</td><TD class=xtab>' + stats[5] + '</td><TD class=xtabL>' + food + '</td></tr>';
}
u += '<TR class=xtabLine><TD colspan=14 class=xtabLine></td></tr>';
for (k in uW.fortcost) {
if (++rownum % 2)
rsty = '';
else
rsty = ' style="background: #e8e8e8" ';
cost = unsafeWindow.fortcost[k]; // NAME, Food, Wood, Stone, Ore, ?, IdlePop, Time
fi = k.substring(3);
stats = unsafeWindow.fortstats['unt' + fi]; // Life, Attack, Defense, Speed, Range, Load
food = 0;
might = fortmight['u' + fi];
name = cost[0].replace('Defensive', '');
name = name.replace('Wall-Mounted', '');
u += '<TR ' + rsty + 'align=right><TD align=left class=xtab><B>' + name + '</b></td><TD class=xtabL>' + cost[1] + '</td><TD class=xtab>' + cost[2] + '</td>\
<TD class=xtab>' + cost[3] + '</td><TD class=xtab>' + cost[4] + '</td><TD class=xtab>' + cost[6] + '</td><TD class=xtabL>' + might + '</td>\
<TD class=xtab>' + stats[0] + '</td><TD class=xtab>' + stats[1] + '</td><TD class=xtab>' + stats[2] + '</td><TD class=xtab>' + stats[3] + '</td>\
<TD class=xtab>' + stats[4] + '</td><TD class=xtab>' + stats[5] + '</td><TD class=xtabL>' + food + '</td></tr>';
}
u += '<TR class=xtabLine><TD colspan=14 class=xtabLine></td></tr>';
u += '</table></div><BR>';
//Troop Train Estimates
function _displayrow(name, row) {
var tot = 0;
style = ((rownum++ % 2) ? '' : ' style = "background: #e8e8e8"');
u += '<TR' + style + '><TD align=right><B>' + name + '</B></td>';
for (i = 0; i < row.length; i++) {
u += ((row[i] == 0) ? '<td align=right><SPAN class=boldRed>0</SPAN></td>' : '<td align=right>' + addCommas(parseInt(row[i])) + '</td>');
tot += parseInt(row[i]);
}
u += '<td align=right>' + addCommas(tot) + '</td></tr>';
}
u += '<DIV class=ptstat>TROOP TRAIN TIMES ESTIMATES</div><TABLE align=center cellpadding=1 cellspacing=0><TR align=right><TD></td>';
infoRows = [];
for (r = 0; r < nTroopType + 12; r++)
infoRows[r] = [];
for (i = 0; i < Cities.numCities; i++) {
cityID = 'city' + Cities.cities[i].id;
u += "<TD align=center valign=bottom width=60px><B>" + Cities.cities[i].name.substr(0, 10) + "</B></TD>";
// getTroopDefTrainEstimates(cityID);
infoRows[0][i] = Cities.cities[i].numCottages;
infoRows[1][i] = Cities.cities[i].numBarracks;
infoRows[2][i] = Cities.cities[i].foremanBasePoliticsScore;
infoRows[3][i] = Cities.cities[i].marshallCombatScore;
infoRows[5][i] = Cities.cities[i].stableLevel;
infoRows[6][i] = Cities.cities[i].workshopLevel;
for (var j = 1; j < nTroopType + 1; j++)
if (j < 19) infoRows[j + 6][i] = ((Cities.cities[i]['Troop' + j + 'Time'] > 0) ? (3600 / Cities.cities[i]['Troop' + j + 'Time']) : 0);
else infoRows[j + 6][i] = ((Cities.cities[i]['Troop' + (j + 2) + 'Time'] > 0) ? (3600 / Cities.cities[i]['Troop' + (j + 2) + 'Time']) : 0);
infoRows[nTroopType + 7][i] = Cities.cities[i]['Def53Time'];
if (infoRows[nTroopType + 7][i] > 0)
infoRows[nTroopType + 7][i] = 3600 / infoRows[nTroopType + 7][i];
infoRows[nTroopType + 8][i] = Cities.cities[i]['Def55Time'];
if (infoRows[nTroopType + 8][i] > 0)
infoRows[nTroopType + 8][i] = 3600 / infoRows[nTroopType + 8][i];
infoRows[nTroopType + 9][i] = Cities.cities[i]['Def60Time'];
if (infoRows[nTroopType + 9][i] > 0)
infoRows[nTroopType + 9][i] = 3600 / infoRows[nTroopType + 9][i];
infoRows[nTroopType + 10][i] = Cities.cities[i]['Def61Time'];
if (infoRows[nTroopType + 10][i] > 0)
infoRows[nTroopType + 10][i] = 3600 / infoRows[nTroopType + 10][i];
infoRows[nTroopType + 11][i] = Cities.cities[i]['Def62Time'];
if (infoRows[nTroopType + 11][i] > 0)
infoRows[nTroopType + 11][i] = 3600 / infoRows[nTroopType + 11][i];
}
u += "<td align=center valign=bottom width=60px><b>Total</td></tr>";
var rownum = 0;
_displayrow("Cottages Total", infoRows[0]);
_displayrow("Barracks Total", infoRows[1]);
_displayrow("Foreman Politics", infoRows[2]);
_displayrow("Marshall Combat", infoRows[3]);
_displayrow("Stable Lvl", infoRows[5]);
_displayrow("Workshop Lvl", infoRows[6]);
u += "<TR><TD></TD><TD nowrap align=center colspan=" + (Cities.numCities) + "><B>Troop Hourly Production</B></TD></TR>";
_displayrow("STroop", infoRows[7]);
_displayrow("Militia", infoRows[8]);
_displayrow("Scout", infoRows[9]);
_displayrow("Pike", infoRows[10]);
_displayrow("Sword", infoRows[11]);
_displayrow("Archer", infoRows[12]);
_displayrow("Cavalry", infoRows[13]);
_displayrow("HCavalry", infoRows[14]);
_displayrow("Wagon", infoRows[15]);
_displayrow("Balista", infoRows[16]);
_displayrow("Ram", infoRows[17]);
_displayrow("Catapult", infoRows[18]);
_displayrow("Bloodthorn", infoRows[19]);
_displayrow("Executioner", infoRows[20]);
_displayrow("Siege Wall", infoRows[21]);
_displayrow("Flame Archer", infoRows[22]);
_displayrow("Hussar", infoRows[23]);
_displayrow("Halberdier", infoRows[24]);
_displayrow("Onager", infoRows[25]);
u += "<TR><TD></TD><TD nowrap align=center colspan=" + (Cities.numCities) + "><B>Wall Defense Hourly Production</B></TD></TR>";
_displayrow("XBow", infoRows[nTroopType + 7]);
_displayrow("Trebuchet", infoRows[nTroopType + 8]);
_displayrow("Spike", infoRows[nTroopType + 9]);
_displayrow("Trap", infoRows[nTroopType + 10]);
_displayrow("Caltrop", infoRows[nTroopType + 11]);
u += '</tr></table>';
u += '<DIV class=ptstat>MISC INFO</div><TABLE><TR><TD width="200px" style="background-color:#FFFFFF; border:none">KofC client version: ' + KOCversion + '</td>';
u += '<TD style="background-color:#FFFFFF; border:none"><INPUT id=ptButDebug type=submit name="SEED" value="DEBUG"></tr></td></table></div>';
t.Overv.innerHTML = u;
document.getElementById('ptButDebug').addEventListener('click', function () {
debugWin.doit()
}, false);
},
paintOverview: function () {
var rownum = 0;
var t = Tabs.OverView;
clearTimeout(Tabs.OverView.displayTimer);
t.Overv.innerHTML = null;
t.Overv.style.maxHeight = '650px';
t.Overv.style.overflowX = Options.overviewAllowOverflow ? 'visible' : 'scroll';
t.Overv.style.width = Options.overviewAllowOverflow ? '' : '745px';
t.Overv.style.maxWidth = Options.overviewAllowOverflow ? '' : '745px';
function _row(name, row, noTotal) {
var t = Tabs.OverView;
if (rownum++ % 2)
style = '';
else
style = ' style = "background: #e8e8e8"';
var tot = 0;
var m = [];
m.push('<TR style="background: #fff" align=right');
m.push(style);
m.push('><TD');
m.push(style);
m.push('><B>');
m.push(name);
m.push(' </td>');
if (noTotal) {
m.push('<TD');
m.push(style);
m.push('> </td>');
} else {
for (i = 0; i < row.length; i++)
tot += row[i];
m.push('<TD style="background: #ffc">');
if (name == 'Gold' || name == 'Food' || name == 'Wood' || name == 'Stone' || name == 'Ore' || name == 'Aetherstone')
t.resTotal[name] = tot;
else
t.troopTotal[name] = tot;
if (TEST_WIDE)
m.push('X,');
m.push(addCommas(tot));
m.push('</td>');
}
for (i = 0; i < row.length; i++) {
m.push('<TD');
m.push(style);
m.push('>');
if (TEST_WIDE)
m.push('X,');
m.push(addCommas(row[i]));
m.push('</td>');
}
m.push('</tr>');
return m.join('');
}
//DebugTimer.start();
try {
if (Options.includeMarching)
march = getMarchInfo();
if (Options.includeTrainingExt)
train = getTrainInfo();
dt = new Date();
dt.setTime(Seed.player.datejoinUnixTime * 1000);
str = "<DIV id=overMainDiv style='font-size:" + Options.overviewFontSize + "px'><TABLE class=ptTabOverview cellpadding=0 cellspacing=0><TR valign=top align=right><TD width=65></td><TD width=88 style='background: #ffc'><B>TOTAL</b></td>";
for (i = 0; i < Cities.numCities; i++) {
str += "<TD width=81><B>" + Cities.cities[i].name.substring(0, 11) + '</b><BR>' + coordLink(Cities.cities[i].x, Cities.cities[i].y) + "<BR>" + unsafeWindow.provincenames['p' + Cities.cities[i].provId] + "</td>";
}
if (Options.includeMarching)
str += '<TD width=81><B>Marching</b></td>';
if (Options.includeTrainingExt)
str += '<TD width=81><B>Training</b></td>';
str += "<td> </td></tr>";
str += '<TR valign=top align=right><TD><input id=ptpostres style="font-size:' + Options.overviewFontSize + 'px" type="submit" value="Post To Chat"></input></td><TD style=\'background: #ffc\'></td>';
for (i = 0; i < Cities.numCities; i++) {
cityID = 'city' + Cities.cities[i].id;
Gate = parseInt(Seed.citystats[cityID].gate);
if (Gate == 0)
str += '<TD>Hiding</td>';
else
str += '<TD><SPAN class=boldRed>Defending</span></td>';
}
rows = [];
rows[0] = [];
for (i = 0; i < Cities.numCities; i++) {
cityID = 'city' + Cities.cities[i].id;
rows[0][i] = parseInt(Seed.citystats[cityID].gold[0]);
}
for (r = 1; r < 5; r++) {
rows[r] = [];
for (i = 0; i < Cities.numCities; i++) {
cityID = 'city' + Cities.cities[i].id;
rows[r][i] = parseInt(Seed.resources[cityID]['rec' + r][0] / 3600);
}
}
rows[5] = [];
for (i = 0; i < Cities.numCities; i++) { //Aetherstone
cityID = 'city' + Cities.cities[i].id;
rows[5][i] = parseInt(Seed.resources[cityID]['rec5'][0]);
}
if (Options.includeMarching) {
for (var i = 0; i < 5; i++)
rows[i][Cities.numCities] = march.resources[i]; //Aetherstone does not show up in march info
}
str += _row('Gold', rows[0]);
str += _row('Food', rows[1]);
str += _row('Wood', rows[2]);
str += _row('Stone', rows[3]);
str += _row('Ore', rows[4]);
str += _row('Aetherstone', rows[5]);
str += '<TR><td><input id=ptposttroop style="font-size:' + Options.overviewFontSize + 'px" type="submit" value="Post To Chat"></input></td><TD colspan=11><BR></td></tr>';
for (r = 1; r < nTroopType + 1; r++) {
rows[r] = [];
for (i = 0; i < Cities.numCities; i++) {
cityID = 'city' + Cities.cities[i].id;
if (r < 19) rows[r][i] = parseIntNan(Seed.units[cityID]['unt' + r]);
else rows[r][i] = parseIntNan(Seed.units[cityID]['unt' + (r + 2)]);
}
}
var colnum = Cities.numCities;
if (Options.includeMarching) {
for (var i = 1; i < nTroopType + 1; i++) {
if (i < 19) rows[i][colnum] = parseIntNan(march.marchUnits[i]);
else rows[i][colnum] = parseIntNan(march.marchUnits[i + 2]);
}
colnum++;
}
if (Options.includeTrainingExt) {
for (var i = 1; i < nTroopType + 1; i++) {
if (i < 19) rows[i][colnum] = parseIntNan(train.trainUnts[i]);
else rows[i][colnum] = parseIntNan(train.trainUnts[i + 2]);
}
}
if (Options.includeTraining) {
var q = Seed.queue_unt;
for (i = 0; i < Cities.numCities; i++) {
q = Seed.queue_unt['city' + Cities.cities[i].id];
if (q && q.length > 0) {
for (qi = 0; qi < q.length; qi++)
rows[q[qi][0]][i] += parseIntNan(q[qi][1]);
}
}
}
rownum = 0;
str += _row('SupTrp', rows[1]);
str += _row('Militia', rows[2]);
str += _row('Scout', rows[3]);
str += _row('Pike', rows[4]);
str += _row('Sword', rows[5]);
str += _row('Archer', rows[6]);
str += _row('Cavalry', rows[7]);
str += _row('Heavy', rows[8]);
str += _row('Wagon', rows[9]);
str += _row('Ballista', rows[10]);
str += _row('Ram', rows[11]);
str += _row('Catapult', rows[12]);
str += _row('Bloodthorn', rows[13]);
str += _row('Executioner', rows[14]);
str += _row('Siege Wall', rows[15]);
str += _row('Flame Archer', rows[16]);
str += _row('Hussar', rows[17]);
str += _row('Halberdier', rows[18]);
str += _row('Onager', rows[19]);
str += '<TR><TD colspan=11><BR></td></tr>';
row = [];
for (i = 0; i < Cities.numCities; i++) {
var rp = getResourceProduction(Cities.cities[i].id);
var usage = parseInt(Seed.resources["city" + Cities.cities[i].id]['rec1'][3]);
var bp = uW.cm.Resources.getProductionBase(1, Cities.cities[i].id);
//
// adjust for throne room bonuses
var trupkeepreduce = 0;
trupkeepreduce = Math.min(equippedthronestats(79), 33);
var trprodres = equippedthronestats(82);
var trprod = [0, 0, 0, 0, 0];
trprod[1] = Math.min(equippedthronestats(83) + trprodres, 2000);
var upkbase = uW.cm.Resources.getUpkeep(1, Cities.cities[i].id) / (1 - trupkeepreduce / 100);
usage = parseInt(usage - upkbase * trupkeepreduce / 100);
row[i] = parseInt(rp[1] - usage + bp * trprod[1] / 100);
}
str += _row('Food +/-', row, true);
for (i = 0; i < Cities.numCities; i++) {
if (row[i] >= 0)
row[i] = '----';
else {
var timeLeft = parseInt(Seed.resources["city" + Cities.cities[i].id]['rec1'][0]) / 3600 / (0 - row[i]) * 3600;
if (timeLeft > 86313600)
row[i] = '----';
else {
if (Options.enableFoodWarn && timeLeft < (Options.foodWarnHours * 3600))
row[i] = '<SPAN class=whiteOnRed>' + timestrShort(timeLeft) + '</span>';
else
row[i] = timestrShort(timeLeft);
}
}
}
str += _row('Food left', row, true);
row = [];
for (i = 0; i < Cities.numCities; i++) {
var cityAscended = [];
cityAscended[i] = false;
if (Seed.cityData.city[Cities.cities[i].id].isPrestigeCity) cityAscended[i] = true;
//if (cityAscended[i]){
var baseValsByLevel = {
1: 100000,
2: 200000,
3: 300000,
4: 400000,
5: 500000,
6: 600000,
7: 700000,
8: 800000,
9: 900000,
10: 1000000,
11: 5000000,
12: 50000000
}
var baseSthProt = [];
for (k in Seed.buildings['city' + Cities.cities[i].id]) {
if (Seed.buildings['city' + Cities.cities[i].id][k][0] == 9) {
baseSthProt[i] = baseValsByLevel[Seed.buildings['city' + Cities.cities[i].id][k][1]];
}
}
//tch14 = shrinking powder..
var SthPrtResearch = parseInt(Seed.tech.tch14)
var TRStHsBoost = Math.min(equippedthronestats(89), 1250);
var totalSthPrt = []
var researchToApply = ((SthPrtResearch / 10) + 1)
var TRBoostToApply = ((TRStHsBoost / 100) + 1)
if (TRStHsBoost == 0) TRStHsBoost = 1
totalSthPrt[i] = addCommas(parseInt((baseSthProt[i] * researchToApply) * TRBoostToApply))
row[i] = totalSthPrt[i]
/*}else{
row[i] = 'Not Coded';
} // if ascended */
}
str += _row('StrHse Prot', row, true)
str += '<TR><TD><BR></td></tr>';
for (i = 0; i < Cities.numCities; i++) {
var totWilds = 0;
dat = Seed.wilderness['city' + Cities.cities[i].id];
if (dat != null && matTypeof(dat) == 'object')
for (k in dat)
++totWilds;
var castle = parseInt(Seed.buildings['city' + Cities.cities[i].id].pos0[1]);
if (castle == 11) castle = 12;
else if (castle == 12) castle = 14;
if (totWilds < castle)
row[i] = '<SPAN class=boldRed><B>' + totWilds + '/' + castle + '</b></span>';
else
row[i] = totWilds + '/' + castle;
}
str += _row('#Wilds', row, true);
row = [];
for (i = 0; i < Cities.numCities; i++) {
totKnights = 0;
dat = Seed.knights['city' + Cities.cities[i].id];
for (k in dat)
++totKnights;
row[i] = totKnights;
}
str += _row('#Knights', row, true);
var now = unixTime();
var row = [];
var rowsp = [];
var rowrev = [];
for (i = 0; i < Cities.numCities; i++) {
var totTime = 0;
var totTime2 = 0;
var q = Seed.queue_unt['city' + Cities.cities[i].id];
if (q != null && q.length > 0)
totTime = q[q.length - 1][3] - now;
if (totTime < 0)
totTime = 0;
row[i] = 0;
rowsp[i] = 0;
if (q != null && q.length > 0) {
if (q[q.length - 1][7]) {
row[i] = 0;
if (totTime < 3600)
rowsp[i] = '<SPAN class=boldRed><B>' + timestr(totTime) + '</b></span>';
else
rowsp[i] = timestr(totTime);
} else {
if (totTime < 3600)
row[i] = '<SPAN class=boldRed><B>' + timestr(totTime) + '</b></span>';
else
row[i] = timestr(totTime);
if (q.length > 1) {
for (j = 2; j < q.length + 1; j++) {
if (q[q.length - j][7]) {
totTime2 = q[q.length - j][3] - now;
if (totTime2 < 0)
totTime2 = 0;
if (totTime2 < 3600)
rowsp[i] = '<SPAN class=boldRed><B>' + timestr(totTime2) + '</b></span>';
else
rowsp[i] = timestr(totTime2);
break;
}
}
}
}
}
var qr = Seed.queue_revive['city' + Cities.cities[i].id];
if (qr != null && qr.length > 0)
totTime = qr[qr.length - 1][3] - now;
if (totTime < 0)
totTime = 0;
rowrev[i] = 0;
if (qr != null && qr.length > 0) {
if (totTime < 3600)
rowrev[i] = '<SPAN class=boldRed><B>' + timestr(totTime) + '</b></span>';
else
rowrev[i] = timestr(totTime);
}
}
str += _row('TroopQ', row, true);
str += _row('SpecialTroopQ', rowsp, true);
str += _row('ReviveQ', rowrev, true);
var row = [];
for (i = 0; i < Cities.numCities; i++) {
var wall = {};
getWallInfo(Cities.cities[i].id, wall);
var totTime = 0;
var q = Seed.queue_fort['city' + Cities.cities[i].id];
if (q != null && q.length > 0)
totTime = q[q.length - 1][3] - now;
if (totTime < 0)
totTime = 0;
if (totTime < 1 && (wall.wallSpaceUsed < wall.wallSpace - 4 || wall.fieldSpaceUsed < wall.fieldSpace - 4))
row[i] = '<SPAN class=boldRed><B>' + timestr(totTime) + '</b></span>';
else
row[i] = timestr(totTime);
}
str += _row('WallQue', row, true);
str += '<TR><TD class=xtab></td><TD class=xtab colspan=4><BR><INPUT type=CHECKBOX id=idCheck' + (Options.includeMarching ? ' CHECKED' : '') + '>Include Marching Troops/Resources</td></tr>';
str += '<TR><TD class=xtab></td><TD class=xtab colspan=4><INPUT type=CHECKBOX id=ptoverIncTrain' + (Options.includeTraining ? ' CHECKED' : '') + '>Include troops in training in cities</td></tr>';
str += '<TR><TD class=xtab></td><TD class=xtab colspan=4><INPUT type=CHECKBOX id=ptoverIncTrainExt' + (Options.includeTrainingExt ? ' CHECKED' : '') + '>Include troops in training total</td></tr>';
str += '<TR><TD class=xtab></td><TD class=xtab colspan=4><INPUT type=CHECKBOX id=ptOverOver' + (Options.overviewAllowOverflow ? ' CHECKED' : '') + '>Allow width overflow \
FONT SIZE: ' + htmlSelector({
9: 9,
10: 10,
11: 11,
12: 12
}, Options.overviewFontSize, 'id=ptoverfont') + '</td></tr><BR>';
str += "</table></div>";
str += 'Koc Power Tools Version:' + Version;
t.Overv.innerHTML = str;
document.getElementById('idCheck').addEventListener('click', e_clickEnableMarch, false);
document.getElementById('ptoverIncTrain').addEventListener('click', e_clickEnableTraining, false);
document.getElementById('ptoverIncTrainExt').addEventListener('click', e_clickEnableTrainingExt, false);
document.getElementById('ptOverOver').addEventListener('click', e_allowWidthOverflow, false);
document.getElementById('ptoverfont').addEventListener('change', e_fontSize, false);
document.getElementById('ptpostres').addEventListener('click', postRes, false);
document.getElementById('ptposttroop').addEventListener('click', postTroop, false);
//DebugTimer.display ('Draw Overview');
} catch (e) {
new CdialogCancelContinue('<PRE>' + inspect(e, 3, 1) + '</pre>', null, null, true);
t.Overv.innerHTML = '<PRE>' + e.name + ' : ' + e.message + ' on ' + e.lineNumber + '</pre>';
}
t.displayTimer = setTimeout(t.paintOverview, 5000);
function e_clickEnableMarch() {
var t = Tabs.OverView;
Options.includeMarching = document.getElementById('idCheck').checked;
t.paintOverview();
}
function e_clickEnableTraining() {
var t = Tabs.OverView;
Options.includeTraining = document.getElementById('ptoverIncTrain').checked;
t.paintOverview();
}
function e_clickEnableTrainingExt() {
var t = Tabs.OverView;
Options.includeTrainingExt = document.getElementById('ptoverIncTrainExt').checked;
t.paintOverview();
}
function e_fontSize(evt) {
document.getElementById('ptOverOutput').style.fontSize = evt.target.value + 'px';
Options.overviewFontSize = evt.target.value;
t.paintOverview();
}
function e_allowWidthOverflow(evt) {
var t = Tabs.OverView;
var tf = document.getElementById('ptOverOver').checked;
Options.overviewAllowOverflow = tf;
if (tf)
t.Overv.style.overflowX = 'visible';
else
t.Overv.style.overflowX = 'auto';
t.paintOverview();
}
function postRes() {
var t = Tabs.OverView;
var msg = ':::. Total Resources |'
for (var key in t.resTotal) {
msg += '||' + key + ': ' + addCommas(t.resTotal[key]);
}
msg += '|';
var automsg = sendChat('/a ' + msg);
}
function postTroop() {
var t = Tabs.OverView;
var msg = ':::. Total Troops |'
for (var key in t.troopTotal) {
msg += '||' + key + ': ' + addCommas(t.troopTotal[key]);
}
msg += '|';
var automsg = sendChat('/a ' + msg);
}
},
};
/*************** March Tab **********/
Tabs.Attaque = {
cont: null,
displayTimer: null,
tabLabel: 'March',
state: null,
curTabBut: null,
curTabName: null,
BOAttackTimer: null,
sourceCity: {},
destinationCity: {},
rows: [],
iused: new Array(),
init: function (div) {
var t = Tabs.Attaque;
t.cont = div;
t.state = null;
clearTimeout(t.displayTimer);
},
getContent: function () {
var t = Tabs.Attaque;
return t.cont;
},
hide: function () {
var t = Tabs.Attaque;
t.state = null;
clearTimeout(t.displayTimer);
},
show: function () {
var t = Tabs.Attaque;
setTimeout(t.Refreshtroops, 10000);
var rownum = 0;
var ModelCity = {};
if (t.state == null) {
m = "<DIV class=ptstat><b>QUICK MARCH TOOL</b></div>";
m += "<div id='statpourRAA'></div>";
m += "<TABLE width=600 class=ptTab border=0 align=center>\
<tr><td><INPUT type=checkbox id=ptmarch_autoknight " + (Options.marchautoknight ? 'CHECKED' : '') + " /> Auto select knight</td></tr>\
<tr><td colspan=4 align=center><input type=button id=REEaction value='Scout'> <input type=button id=RAAaction value='Attack'> <input type=button id=RARaction value='Reassign'> <input type=button id=RENaction value='Reinforce'> <input type=button id=RENBaction value='Reinforce + Max Food'></td></tr><tr align=center valign=top><td width=130><b><u>Source</b></u><br><span id=RAAsrcRptspeedcity></span></td>\
<td><b><u>Destination</b></u><br>X:<input type=text id=RAAtypetrpx size=3> Y:<input type=text id=RAAtypetrpy size=3><br><a href='javascript:void(0);' id='BOchargelistelieux'>Fetch Members</a> : <select id='listeFavori'></select></td>\
<td><b><u>Distance</u></b><br><span id='BOEstimationD'> </span><td><b><u>Closest City</u></b><br><span id=BOVilleProche></span>\
</tr><tr align=center valign=top>\
<td colspan=4 align=left><table border=0 bordercolor=black cellspacing=0 cellpadding=0 width=100% style='text-align:center'><tr><td rowspan=" + nTroopType + 1 + "><div id=RAAstatsource></div></td><td colspan=2><a href='javascript:void(0)' id=BO_RAZ_Units title='Clear' >Units Selected</a></td><td>Attack Time</td><td>Reinforce Time</td></tr>";
for (var ui in uW.cm.UNIT_TYPES) {
r = uW.cm.UNIT_TYPES[ui];
m += '<tr><td align=right><img height=20 title="' + unsafeWindow.unitcost['unt' + r][0] + '" alt="' + unsafeWindow.unitcost['unt' + r][0] + '" src=https://kabam1-a.akamaihd.net/silooneofcamelot//fb/e2/src/img/units/unit_' + r + '_30.jpg></td><td align=left><input style="border:1px solid black;height:16px;font-size:11px;" id="RAAnbunit' + r + '" type=text size=7 value="0" ></td><td><span id="BOEstimationTT' + r + '"> </span></td><td><span id="BOEstimationTZ' + r + '"> </span></td></tr>';
}
var itemlist = [55, 57, 931, 932];
var BOitems = "";
for (var i = 0; i < itemlist.length; i++) {
BOitems += "<img src='https://kabam1-a.akamaihd.net/silooneofcamelot//fb/e2/src/img/items/30/" + itemlist[i] + ".jpg' /><input type=checkbox id='BOitem_" + itemlist[i] + "'><span id='BOitemSpan_" + itemlist[i] + "'>" + unsafeWindow.ksoItems[itemlist[i]].count + "</span> ";
}
m += "</table></td></tr>\
<tr><td colspan=4>Knight : <SELECT id='RAApiKnight' type=list></select> Champion : <SELECT id='RAApiChampion' type=list></select> (use only for Attack) <br>" + BOitems + "</td></tr></table>\
<DIV class=ptstat>Saved Unit Configuration :</div><TABLE><tr><td colspan=2><select id=BO_AT_Fav></select><input type=button value='Reset' id=BO_AT_Fav_Sup><input type=button value='Reset All' id=BO_AT_Fav_RESET></td><td colspan=2>New : <input type=type id=BO_AT_Fav_Nom size=10 maxlength=12> <input type=button value='Save Troops' id=BO_AT_Fav_ajou>\
<tr><td colspan=4><div id=ptRAAStatus style='overflow-y:auto; max-height:50px; height: 50px;'></div></td></tr></table>\
<DIV class=ptstat>Auto Attack - Work in Progress</div><table></tr><tr><td><input type=button id='BOActiveAttack' value='ACTIVER : OFF' ></td><td colspan=3><span id='BOCompAttack'></span></tr>\
<tr><td><b>Heure arrivée :</b> <input type=text size=7 id='BOHorloge' value='" + Options.AttackHorloge + "'></td><td><input type=button value='Enregistrer' id='BOSaveAttack'></td><td><input type=button value='Editer l\'attaque' id='BOEditAttack' disabled></td></tr>\
<tr><td colspan=4><span id='BOAttackProg'></span></td></tr></table>";
t.cont.innerHTML = m;
t.statpourRAA = ById('statpourRAA');
//Gestion des favoris
t.Favoris = ById('BO_AT_Fav');
function metajourfavori() {
t.Favoris.innerHTML = "<option value=''>...</option>";
var lisf = Options.AttackFav;
for (var m in lisf) {
var lis = lisf[m];
t.Favoris.innerHTML += "<option value='" + m + "'>" + lis[0] + "</option>";
}
}
ById("ptmarch_autoknight").addEventListener('click', function () {
Options.marchautoknight = this.checked;
saveOptions();
t.show();
}, false);
ById("BO_AT_Fav_RESET").addEventListener('click', function () {
Options.AttackFav = {};
saveOptions();
metajourfavori();
}, false);
ById("BO_AT_Fav_Sup").addEventListener('click', function () {
numfav = ById("BO_AT_Fav").value;
if (numfav != "") {
Options.AttackFav[numfav] = {};
delete Options.AttackFav[numfav];
//Options.AttackFav=unset(Options.AttackFav, numfav);
saveOptions();
metajourfavori();
}
}, false);
ById("BO_RAZ_Units").addEventListener('click', function () {
for (var ui in uW.cm.UNIT_TYPES) ById("RAAnbunit" + uW.cm.UNIT_TYPES[ui]).value = 0;
}, false);
ById("BO_AT_Fav_ajou").addEventListener('click', function () {
if (ById("BO_AT_Fav_Nom").value == "") {
alert("Please fill in a name!");
return;
}
var a = ById("BO_AT_Fav_Nom").value;
Options.AttackFav[a] = {};
var lisf = Options.AttackFav[a];
lisf[0] = ById("BO_AT_Fav_Nom").value;
for (var ui in uW.cm.UNIT_TYPES) lisf[uW.cm.UNIT_TYPES[ui]] = ById("RAAnbunit" + uW.cm.UNIT_TYPES[ui]).value;
ById("BO_AT_Fav_Nom").value = "";
saveOptions();
metajourfavori();
}, false);
ById("BO_AT_Fav").addEventListener('change', function () {
numfav = ById("BO_AT_Fav").value;
if (numfav == "") {
for (var ui in uW.cm.UNIT_TYPES) ById("RAAnbunit" + uW.cm.UNIT_TYPES[ui]).value = 0;
} else {
var lisf = Options.AttackFav[numfav];
for (var m in lisf) {
if (m > 0)
if (ById("RAAnbunit" + m)) ById("RAAnbunit" + m).value = lisf[m];
}
}
}, false);
// Fin gestion des favoris
ById("BOitem_55").addEventListener('click', function () {
ById("BOitem_57").checked = false;
t.estimerRes();
}, false);
ById("BOitem_57").addEventListener('click', function () {
ById("BOitem_55").checked = false;
t.estimerRes();
}, false);
t.statutRAA = ById('ptRAAStatus');
t.destinationCityx = ById('RAAtypetrpx');
t.destinationCityy = ById('RAAtypetrpy');
t.destinationCityx.value = Options.Xrenfort;
t.destinationCityy.value = Options.Yrenfort;
if (ById('maparea_map').style.display != "none") {
t.destinationCityx.value = ById('mapXCoor').value;
t.destinationCityy.value = ById('mapYCoor').value;
}
t.listeFavoris = ById('listeFavori');
t.listeFavoris.addEventListener('change', t.SelectFavoris, false);
t.chargelistelieux = ById('BOchargelistelieux');
t.chargelistelieux.addEventListener('click', t.chercherFavoris, false);
t.actionREN = ById('RENaction');
t.actionRENB = ById('RENBaction');
t.actionREE = ById('REEaction');
t.actionRAA = ById('RAAaction');
t.actionRAR = ById('RARaction');
t.actionREN.addEventListener('click', function () {
t.clickATTAQUEDo(2, 0);
}, false);
t.actionRAA.addEventListener('click', function () {
t.clickATTAQUEDo(4, 0);
}, false);
t.actionRAR.addEventListener('click', function () {
t.clickATTAQUEDo(5, 0);
}, false);
t.actionRENB.addEventListener('click', function () {
t.clickATTAQUEDo(2, 1);
}, false);
t.actionREE.addEventListener('click', function () {
t.clickATTAQUEDo(3, 0);
}, false);
t.destinationCityx.addEventListener('change', function () {
t.estimerRes();
}, false);
t.destinationCityy.addEventListener('change', function () {
t.estimerRes();
}, false);
var dcp0 = new CdispCityPicker('ptRAA0', ById('RAAsrcRptspeedcity'), false, t.clickRAACitySourceSelect, Cities.byID[unsafeWindow.currentcityid].idx);
t.estimerRes();
t.BOAttackProg = ById('BOAttackProg');
t.BOHorloge = ById('BOHorloge');
t.BOSaveAttack = ById('BOSaveAttack');
t.BOEditAttack = ById('BOEditAttack');
t.BOCompAttack = ById('BOCompAttack');
t.BOActiveAttack = ById('BOActiveAttack');
t.BOActiveAttack.addEventListener('click', t.AutoattackOnOff, false);
t.BOSaveAttack.addEventListener('click', function () {
var itemlist = [55, 57, 931, 932];
for (var i = 0; i < itemlist.length; i++) {
ById('BOitemSpan_' + itemlist[i]).checked = false;
}
t.enregistreAttack();
}, false);
if (Options.AttackCibleX != 0 && Options.AttackCibleY != 0) {
t.BOEditAttack.disabled = false;
}
t.BOEditAttack.addEventListener('click', function () {
t.destinationCityx.value = Options.AttackCibleX;
t.destinationCityy.value = Options.AttackCibleY;
ById("RAApiKnight").value = Options.AttackKnight;
ById("RAApiChampion").value = Options.AttackChampion;
nHtml.Click(ById("ptRAA0_" + Cities.byID[Options.AttackFromCity].idx));
for (var ui in uW.cm.UNIT_TYPES) ById("RAAnbunit" + uW.cm.UNIT_TYPES[ui]).value = Options.AttackUnits[parseInt(uW.cm.UNIT_TYPES[ui]) - 1];
}, false);
metajourfavori();
if (Options.AttackOnOff) {
t.BOActiveAttack.value = 'ACTIVER : ON';
t.activeAttack();
}
t.clickRAACitySourceSelect(t.sourceCity);
var closestNum = t.getclosestcity();
t.dcp1 = new CdispCityPicker('ptmarch_citydest', ById('BOVilleProche'), false, t.estimerRes, null).bindToXYboxes(ById("RAAtypetrpx"), ById("RAAtypetrpy"));
}
},
getclosestcity: function () {
var t = Tabs.Attaque;
var x1 = parseInt(t.sourceCity.x);
var x2 = parseInt(t.destinationCityx.value);
var y1 = parseInt(t.sourceCity.y);
var y2 = parseInt(t.destinationCityy.value);
var dist = distance(x1, y1, x2, y2);
var closestDist = 999999;
var closestLoc = null;
var closestNum = 1;
for (var c = 0; c < Cities.numCities; c++) {
var city = Cities.cities[c];
var dist = distance(city.x, city.y, x2, y2);
if (dist < closestDist) {
closestDist = dist;
closestLoc = city.x + ',' + city.y;
closestNum = c;
}
}
return closestNum;
},
AutoattackOnOff: function () {
// click click sur le bouton Activer le compte à rebour !
var t = Tabs.Attaque;
t.BOCompAttack.innerHTML = '';
clearTimeout(t.BOAttackTimer);
if (t.BOActiveAttack.value == 'ACTIVER : OFF') {
t.BOActiveAttack.value = 'ACTIVER : ON';
Options.AttackOnOff = true;
saveOptions();
t.activeAttack();
} else {
Options.AttackOnOff = false;
saveOptions();
t.BOActiveAttack.value = 'ACTIVER : OFF';
}
},
activeAttack: function () {
var t = Tabs.Attaque;
clearTimeout(t.BOAttackTimer);
if (Options.AttackGoHorloge) {
var depart = new Date()
depart.setTime(Options.AttackGoHorloge);
var now = unixTime() * 1000;
if (now >= Options.AttackGoHorloge) {
t.BOCompAttack.innerHTML = '<center><font color=red>LANCEMENT ATTAQUE EFFECTUE</font></center>';
t.destinationCityx.value = Options.AttackCibleX;
t.destinationCityy.value = Options.AttackCibleY;
ById("RAApiKnight").value = Options.AttackKnight;
ById("RAApiChampion").value = Options.AttackChampion;
nHtml.Click(ById("ptRAA0_" + Cities.byID[Options.AttackFromCity].idx));
for (var ui in uW.cm.UNIT_TYPES) ById("RAAnbunit" + uW.cm.UNIT_TYPES[ui]).value = Options.AttackUnits[parseInt(uW.cm.UNIT_TYPES[ui]) - 1];
t.clickATTAQUEDo(4, 0);
clearTimeout(t.BOAttackTimer);
Options.AttackGoHorloge = null;
saveOptions();
}
if (now > depart.getTime()) {
t.BOCompAttack.innerHTML = '<center><font color=red>IMPOSSIBLE</font></center>';
clearTimeout(t.BOAttackTimer);
Options.AttackGoHorloge = null;
saveOptions();
return false;
}
t.BOAttackTimer = setTimeout(function () {
var depart = new Date();
depart.setTime(Options.AttackGoHorloge);
var now = unixTime() * 1000;
var tempsrestant = depart.getTime() - now;
t.BOCompAttack.innerHTML = '<center><font color=red><b>ATTAQUE DANS ' + timestr(tempsrestant / 1000) + '</b></font></center>';
t.activeAttack();
}, 1000);
}
},
enregistreAttack: function () {
var t = Tabs.Attaque;
if (t.BOHorloge.value.match("^[0-9]{2}:[0-9]{2}:[0-9]{2}$")) {
var horloge = t.BOHorloge.value;
Options.AttackHorloge = horloge;
var ndate = new Date();
ndate.setHours(horloge.substr(0, 2));
ndate.setMinutes(horloge.substr(3, 2));
ndate.setSeconds(0);
var atunits = new Array();
for (var ui in uW.cm.UNIT_TYPES) atunits.push(parseInt(ById("RAAnbunit" + uW.cm.UNIT_TYPES[ui]).value));
Options.AttackUnits = atunits;
Options.AttackFromCity = t.sourceCity.id;
Options.AttackKnight = ById("RAApiKnight").value;
Options.AttackChampion = ById("RAApiChampion").value;
Options.AttackCibleX = t.destinationCityx.value;
Options.AttackCibleY = t.destinationCityy.value;
var x1 = parseInt(t.sourceCity.x);
var x2 = parseInt(t.destinationCityx.value);
var y1 = parseInt(t.sourceCity.y);
var y2 = parseInt(t.destinationCityy.value);
var dist = distance(x1, y1, x2, y2);
var tempplusgrand = 0;
for (var ui in uW.cm.UNIT_TYPES) {
r = uW.cm.UNIT_TYPES[ui];
if (parseInt(ById("RAAnbunit" + r).value) > 0) {
var m = estETA(dist, r, t.sourceCity.id);
if (tempplusgrand < m.ETA) tempplusgrand = m.ETA;
}
}
var departtime = ndate.getTime() - (tempplusgrand * 1000);
var depart = new Date()
depart.setTime(departtime);
var now = unixTime() * 1000;
if (now > depart.getTime()) {
t.BOAttackProg.innerHTML = "Depart impossible !";
return false;
}
Options.AttackGoHorloge = depart.getTime();
saveOptions();
t.BOAttackProg.innerHTML = "Attaque sur " + Options.AttackCibleX + "," + Options.AttackCibleY + " enregistrée";
t.BOEditAttack.disabled = false;
} else {
t.BOAttackProg.innerHTML = "Mauvais format de l'horloge.";
}
},
clickATTAQUEDo: function (typemarche, bouffe) {
var t = Tabs.Attaque;
var totalunit = 0;
if (typemarche == 3 && ById("RAAnbunit3").value == 0) ById("RAAnbunit3").value = 1;
for (var ui in uW.cm.UNIT_TYPES) {
r = uW.cm.UNIT_TYPES[ui];
if (typemarche == 3 && r != 3) {
ById("RAAnbunit" + r).value = 0;
}
if (parseInt(ById("RAAnbunit" + r).value) > parseInt(ById("RAAdestunit" + r).value)) {
ById("RAAnbunit" + r).style.backgroundColor = "red";
return false;
}
totalunit = totalunit + parseInt(ById("RAAnbunit" + r).value);
ById("RAAnbunit" + r).style.backgroundColor = "";
}
var errMsg = "";
if (isNaN(t.destinationCityx.value) || t.destinationCityx.value < 0 || t.destinationCityx.value > 749)
errMsg = "X coordinates must be between 0 and 749<BR>";
if (isNaN(t.destinationCityy.value) || t.destinationCityy.value < 0 || t.destinationCityy.value > 749)
errMsg += "Y coordinates must be between 0 and 749<br>";
if (ById("RAApiKnight").value == 0 && typemarche == 4) {
errMsg += "No knight selected!<BR>";
}
if (errMsg != "") {
t.statutRAA.innerHTML = "<FONT COLOR=#550000>" + errMsg + "</font>";
return;
}
var x = t.destinationCityx.value;
var y = t.destinationCityy.value;
// On sauvegardes les coordonnes en cas de F5
t.SaveCoordsOptions(x, y);
// Les objets pour l'attaque !
var e = 1;
var f = unsafeWindow.unixtime();
if (Seed.playerEffects.aurasExpire) {
if (Seed.playerEffects.aurasExpire > f) {
e = 1.15
}
}
if (Seed.playerEffects.auras2Expire) {
if (Seed.playerEffects.auras2Expire > f) {
e = 1.3
}
}
var l_elem = ById("BOitem_931");
if (l_elem && l_elem.checked && parseInt(Seed.items["i931"]) > 0) {
e += 0.25;
}
var l_elem = ById("BOitem_932");
if (l_elem && l_elem.checked && parseInt(Seed.items["i932"]) > 0) {
e += 0.5;
}
var trmarchsizebuff = Math.floor(equippedthronestats(66));
if (trmarchsizebuff > unsafeWindow.cm.thronestats.boosts.MarchSize.Max) trmarchsizebuff = unsafeWindow.cm.thronestats.boosts.MarchSize.Max;
if (trmarchsizebuff > 0)
// e+=(trmarchsizebuff/100);
e *= (1 + trmarchsizebuff / 100);
if (unsafeWindow.seed.cityData.city[t.sourceCity.id].isPrestigeCity) {
var b = unsafeWindow.seed.cityData.city[t.sourceCity.id].prestigeInfo.prestigeLevel;
var r = unsafeWindow.cm.WorldSettings.getSetting("ASCENSION_RALLYPOINT_BOOST"),
m = JSON.parse(r),
u = m.values[b - 1][1],
k = parseFloat(u);
e *= k
if (unsafeWindow.seed.cityData.city[t.sourceCity.id].prestigeInfo.blessings.indexOf(207) != -1) e *= 1.1;
}
var params = unsafeWindow.Object.clone(unsafeWindow.g_ajaxparams);
if (totalunit == 0) {
t.statutRAA.innerHTML = '<FONT COLOR=#550000>You have no available units!</font>';
return;
}
var niveauPointRall = parseInt(getCityBuilding(t.sourceCity.id, 12).maxLevel); // 12=Point de ralliement
var maxtroupe = Math.round(niveauPointRall * 10000 * e - 0.001);
if (niveauPointRall == 11) maxtroupe = Math.round(150000 * e - 0.001);
if (niveauPointRall == 12) maxtroupe = Math.round(200000 * e - 0.001);
if (totalunit > maxtroupe) {
t.statutRAA.innerHTML = '<FONT COLOR=#550000>You can only send ' + maxtroupe + ' units.</font>';
return;
}
var iused = new Array();
var itemlist = [55, 57, 931, 932];
for (var i = 0; i < itemlist.length; i++) {
var l_elem = ById("BOitem_" + itemlist[i]);
if (l_elem && l_elem.checked && parseInt(Seed.items["i" + itemlist[i]]) > 0) {
iused.push(itemlist[i]);
}
}
var res = 0;
if (bouffe == 1) {
for (var ui in uW.cm.UNIT_TYPES) {
i = uW.cm.UNIT_TYPES[ui];
res += parseInt(unsafeWindow.unitstats['unt' + i][5] * ById("RAAnbunit" + i).value * (1 + (0.10 * Seed.tech.tch10) + Math.min(equippedthronestats(6) / 100, 6.25)));
}
}
params.items = iused.join(",");
params.cid = t.sourceCity.id;
params.type = typemarche; // 5 = REASSIGNER - 4 = ATTAQUE - 2 = RENFORCER
params.xcoord = x;
params.ycoord = y;
params.kid = ById("RAApiKnight").value;
params.r1 = res - 1; // reduce max by 1 to avoid load capacity errors due to roundoff
params.r2 = 0;
params.r3 = 0;
params.r4 = 0;
params.gold = 0;
params.champid = 0;
for (var ui in uW.cm.UNIT_TYPES) {
i = uW.cm.UNIT_TYPES[ui];
params["u" + i] = 0;
}
if (typemarche != 3) {
for (var ui in uW.cm.UNIT_TYPES) {
i = uW.cm.UNIT_TYPES[ui];
if (ById("RAAnbunit" + i).value > 0) params["u" + i] = ById("RAAnbunit" + i).value;
}
} else {
params.u3 = ById("RAAnbunit3").value;
ById("RAAnbunit3").value = 0;
}
if (typemarche == 4)
if (ById('RAApiChampion').value != "") {
var championidx = "";
for (i = 0; i < Seed.champion.champions.length; i++) {
if (Seed.champion.champions[i].championId == ById('RAApiChampion').value) championidx = i;
}
params.champid = ById('RAApiChampion').value;
}
t.actionRAA.disabled = true;
t.actionREN.disabled = true;
t.actionREE.disabled = true;
t.statutRAA.innerHTML = "<i><b>Sending march....</b></i>";
new MyAjaxRequest(unsafeWindow.g_ajaxpath + "ajax/march.php" + unsafeWindow.g_ajaxsuffix, {
method: "post",
parameters: params,
loading: true,
onSuccess: function (transport) {
var t = Tabs.Attaque;
var rslt = transport;
if (rslt.ok) {
var timediff = parseInt(rslt.eta) - parseInt(rslt.initTS);
var rtimediff = parseInt(rslt.returnTS) - parseInt(rslt.initTS);
var ut = unsafeWindow.unixtime();
var unitsarr = {};
for (var ui in unsafeWindow.cm.UNIT_TYPES){
i = unsafeWindow.cm.UNIT_TYPES[ui];
if (params["u" + i])
unitsarr[i] = params["u" + i];
else
unitsarr[i] = 0;
}
var resources = new Array();
resources[0] = params.gold;
for (i = 1; i <= 5; i++) {
resources[i] = params["r" + i];
}
var currentcityid = t.sourceCity.id;
unsafeWindow.attach_addoutgoingmarch(rslt.marchId, rslt.marchUnixTime, ut + timediff, params.xcoord, params.ycoord, unitsarr, params.type, params.kid, resources, rslt.tileId, rslt.tileType, rslt.tileLevel, currentcityid, true, ut + rtimediff);
if (rslt.updateSeed) {
unsafeWindow.update_seed(rslt.updateSeed)
};
for (var i = 0; i < iused.length; i++) {
Seed.items["i" + iused[i]] = parseInt(Seed.items["i" + iused[i]]) - 1;
unsafeWindow.ksoItems[iused[i]].subtract();
}
var typeattaque = "";
switch (typemarche) {
case 2:
typeattaque = "Reinforce successful";
break;
case 3:
typeattaque = "Scout successful";
break;
case 4:
typeattaque = "Attack successful";
break;
case 5:
typeattaque = "Reassign successful";
break;
default:
typeattaque = "March successful";
}
t.statutRAA.innerHTML = "<center><font size='3px'><b>" + typeattaque + "</b></font></center>";
if (params.champid) uW.cm.ChampionManager.setIsMarching(championidx, true);
t.clickRAACitySourceSelect(t.sourceCity);
} else {
t.statutRAA.innerHTML = "<font color=red size='3px'><b>Error sending march!<b></font>";
if (rslt.error_code && (rslt.error_code == 212 || rslt.error_code == 213)) {
Seed.knights['city' + params.cid]['knt' + params.kid].knightStatus = 10;
};
if (rslt.msg) {
t.statutRAA.innerHTML += "<br><font color=black size='2px'>" + rslt.msg + "</font>";
} else {
t.statutRAA.innerHTML += "<br>Waiting for 2 seconds!</font>";
//setTimeout(function() { t.clickATTAQUEDo(); }, 2000);
}
}
t.actionRAA.disabled = false;
t.actionREN.disabled = false;
t.actionREE.disabled = false;
},
onFailure: function () {
var t = Tabs.Attaque;
t.statutRAA.innerHTML = "<font color=red size='3px'><b>Error communicating with server!<b></font>";
t.actionRAA.disabled = false;
t.actionREN.disabled = false;
t.actionREE.disabled = false;
}
}, true);
},
estimerRes: function () {
var t = Tabs.Attaque;
// CAlcul de ETA = Estimation du temps de marches
var x1 = parseInt(t.sourceCity.x);
var x2 = parseInt(t.destinationCityx.value);
var y1 = parseInt(t.sourceCity.y);
var y2 = parseInt(t.destinationCityy.value);
var dist = distance(x1, y1, x2, y2);
ById("BOEstimationD").innerHTML = '<b>' + dist + '</b> <a href="javascript:void(0)" onclick="cm.utils.CoordinateLinkController.onClick(event)" class="coordinateLink">(' + t.destinationCityx.value + ',' + t.destinationCityy.value + ')</a>';
for (var ui in uW.cm.UNIT_TYPES) {
r = uW.cm.UNIT_TYPES[ui];
var m = estETA(dist, r, t.sourceCity.id);
ById("BOEstimationTT" + r).innerHTML = "<b>" + m.etaStr + "</b>";
ById("BOEstimationTZ" + r).innerHTML = "<b>" + m.friendEtaStr + "</b>";
}
},
SelectFavoris: function () {
var t = Tabs.Attaque;
if (t.listeFavoris.value != '') {
var valeur = t.listeFavoris.value;
var x = valeur.substr(0, valeur.lastIndexOf(','));
var y = valeur.substr(valeur.lastIndexOf(',') + 1, valeur.length);
t.destinationCityx.value = x;
t.destinationCityy.value = y;
}
t.estimerRes();
},
chercherFavoris: function () {
var t = Tabs.Attaque;
var myA = getMyAlliance();
if (myA[0] != 0) {
var params = unsafeWindow.Object.clone(unsafeWindow.g_ajaxparams);
params.perPage = 100;
params.allianceId = myA[0];
new MyAjaxRequest(unsafeWindow.g_ajaxpath + "ajax/getUserLeaderboard.php" + unsafeWindow.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (rslt) {
// on vide la liste
//t.listeFavoris.innerHTML=null;
if (rslt.ok) {
var z = 0;
var m = "";
for (var i = 0; i < rslt.results.length; i++) {
p = rslt.results[i];
if (p.userId != 0) {
for (var c = 0; c < p.cities.length; c++) {
if (Seed.player.name != p.displayName) {
m += "<option value='" + p.cities[c].xCoord + "," + p.cities[c].yCoord + "'>" + p.displayName + " - City " + (c + 1) + " - " + p.cities[c].xCoord + "," + p.cities[c].yCoord + "</option>";
}
} //fin for cities
} //fin if user
} //fin for resultat
t.listeFavoris.innerHTML = "<option value=''>Selection...</option>" + m;
} // fin
},
onFailure: function (rslt) {
t.listeFavoris.innerHTML = "<option>Error getting info</option>";
},
});
} else {
// Si pas d'alliance !
t.listeFavoris.innerHTML = "<option>Pas d'alliance !</option>";
}
},
SaveCoordsOptions: function (x, y) {
Options.Xrenfort = x;
Options.Yrenfort = y;
saveOptions();
},
Refreshtroops: function () {
if (!ById("RAAstatsource")) return;
var t = Tabs.Attaque;
var cityID = 'city' + t.sourceCity.id;
for (var ui in uW.cm.UNIT_TYPES)
ById('RAAdestunit' + uW.cm.UNIT_TYPES[ui]).value = parseInt(Seed.units[cityID]['unt' + uW.cm.UNIT_TYPES[ui]]);
setTimeout(t.Refreshtroops, 1000);
},
clickRAACitySourceSelect: function (city) {
var t = Tabs.Attaque;
if (t.sourceCity != city) {
t.sourceCity = city;
}
var m = "";
m = "<table cellspacing=0 cellpadding=0 width=80%><tr><td colspan=2>Units Available</td></tr>";
var cityID = 'city' + t.sourceCity.id;
for (var ui in uW.cm.UNIT_TYPES) {
r = uW.cm.UNIT_TYPES[ui];
m += '<tr><td align=right><img title="' + unsafeWindow.unitcost['unt' + r][0] + '" alt="' + unsafeWindow.unitcost['unt' + r][0] + '" height=20 src=https://kabam1-a.akamaihd.net/silooneofcamelot//fb/e2/src/img/units/unit_' + r + '_30.jpg></td>\
<td align=left><input style="border:1px solid black;height:20px;font-size:11px;" id="RAAdestunit' + r + '" type=text size=10 readonly value="' + parseInt(Seed.units[cityID]['unt' + r]) + '"> \
<input type=button value="--->" id="RAApdestunit' + r + '" style="border:1px solid black;height:16px;font-size:11px;"></td></tr>';
}
m += "</table>";
ById("RAAstatsource").innerHTML = m;
var knt = new Array();
for (k in Seed.knights['city' + t.sourceCity.id]) {
if (Seed.knights['city' + t.sourceCity.id][k]["knightStatus"] == 1 && Seed.leaders['city' + t.sourceCity.id]["resourcefulnessKnightId"] != Seed.knights['city' + t.sourceCity.id][k]["knightId"] && Seed.leaders['city' + t.sourceCity.id]["politicsKnightId"] != Seed.knights['city' + t.sourceCity.id][k]["knightId"] && Seed.leaders['city' + t.sourceCity.id]["combatKnightId"] != Seed.knights['city' + t.sourceCity.id][k]["knightId"] && Seed.leaders['city' + t.sourceCity.id]["intelligenceKnightId"] != Seed.knights['city' + t.sourceCity.id][k]["knightId"]) {
knt.push({
Name: Seed.knights['city' + t.sourceCity.id][k]["knightName"],
Combat: Seed.knights['city' + t.sourceCity.id][k]["combat"],
ID: Seed.knights['city' + t.sourceCity.id][k]["knightId"],
});
}
}
knt = knt.sort(function sort(a, b) {
a = parseInt(a['Combat']);
b = parseInt(b['Combat']);
return a == b ? 0 : (a > b ? -1 : 1);
});
ById('RAApiKnight').options.length = 0;
var o = document.createElement("option");
o.text = "--Select a Knight--"
o.value = 0;
ById("RAApiKnight").options.add(o);
for (k in knt) {
if (knt[k]["Name"] != undefined) {
var o = document.createElement("option");
o.text = (knt[k]["Name"] + ' (' + knt[k]["Combat"] + ')')
o.value = knt[k]["ID"];
ById("RAApiKnight").options.add(o);
}
}
if (ById('RAApiKnight').options.length > 0) {
if (Options.marchautoknight)
ById('RAApiKnight').selectedIndex = 1;
}
ById('RAApiChampion').options.length = 0;
var o = document.createElement("option");
o.text = "--Select a Champion--";
o.value = 0;
ById("RAApiChampion").options.add(o);
var c = uW.cm.ChampionModalController.getCastleViewData();
var d = uW.cm.ChampionManager.getCityChampion(t.sourceCity.id);
if ((c != null) && (d != null)) {
var champname = c.champions[d].name;
var champstatus = c.champions[d].status;
if (champstatus == "Defending") {
var o = document.createElement("option");
o.text = champname;
o.value = c.champions[d].id;
ById("RAApiChampion").options.add(o);
}
}
var itemlist = [55, 57, 931, 932];
for (var i = 0; i < itemlist.length; i++) {
ById('BOitemSpan_' + itemlist[i]).innerHTML = unsafeWindow.ksoItems[itemlist[i]].count;
}
for (var ui in uW.cm.UNIT_TYPES) {
r = uW.cm.UNIT_TYPES[ui];
ById("RAApdestunit" + r).addEventListener('click', function () {
var nomcha = this.id.replace("RAApdest", "RAAdest");
var nomcha2 = this.id.replace("RAApdestunit", "RAAnbunit");
ById(nomcha2).value = 0;
var e = 1;
var f = unsafeWindow.unixtime();
if (Seed.playerEffects.aurasExpire) {
if (Seed.playerEffects.aurasExpire > f) {
e = 1.15
}
}
if (Seed.playerEffects.auras2Expire) {
if (Seed.playerEffects.auras2Expire > f) {
e = 1.3
}
}
var l_elem = ById("BOitem_931");
if (l_elem && l_elem.checked && parseInt(Seed.items["i931"]) > 0)
e += 0.25;
var l_elem = ById("BOitem_932");
if (l_elem && l_elem.checked && parseInt(Seed.items["i932"]) > 0)
e += 0.5;
var trmarchsizebuff = Math.floor(equippedthronestats(66));
if (trmarchsizebuff > unsafeWindow.cm.thronestats.boosts.MarchSize.Max) trmarchsizebuff = unsafeWindow.cm.thronestats.boosts.MarchSize.Max;
if (trmarchsizebuff > 0)
// e+=(trmarchsizebuff/100);
e *= (1 + trmarchsizebuff / 100);
if (unsafeWindow.seed.cityData.city[t.sourceCity.id].isPrestigeCity) {
var b = unsafeWindow.seed.cityData.city[t.sourceCity.id].prestigeInfo.prestigeLevel;
var r = unsafeWindow.cm.WorldSettings.getSetting("ASCENSION_RALLYPOINT_BOOST"),
m = JSON.parse(r),
u = m.values[b - 1][1],
k = parseFloat(u);
e *= k
if (unsafeWindow.seed.cityData.city[t.sourceCity.id].prestigeInfo.blessings.indexOf(207) != -1) e *= 1.1;
}
var niveauPointRall = parseInt(getCityBuilding(t.sourceCity.id, 12).maxLevel); // 12=Point de ralliement
var maxtroupe = Math.round(niveauPointRall * 10000 * e - 0.001);
if (niveauPointRall == 11) maxtroupe = Math.round(150000 * e - 0.001);
if (niveauPointRall == 12) maxtroupe = Math.round(200000 * e - 0.001);
var nbunitto = 0;
for (var ui in uW.cm.UNIT_TYPES) {
r = uW.cm.UNIT_TYPES[ui];
nbunitto += parseInt(ById("RAAnbunit" + r).value);
}
var libre = parseInt(maxtroupe - nbunitto);
if (ById(nomcha).value >= libre) {
ById(nomcha2).value = libre;
} else {
ById(nomcha2).value = ById(nomcha).value;
}
}, false);
}
if (t.sourceCity != city) {
for (var ui in uW.cm.UNIT_TYPES) {
r = uW.cm.UNIT_TYPES[ui];
ById("RAAnbunit" + r).value = "0";
}
} else {
for (var ui in uW.cm.UNIT_TYPES) {
r = uW.cm.UNIT_TYPES[ui];
if (ById("RAAnbunit" + r).value == "") ById("RAAnbunit" + r).value = "0";
if (ById("RAAdestunit" + r).value == "") ById("RAAdestunit" + r).value = "0";
if (parseInt(ById("RAAnbunit" + r).value) > parseInt(ById("RAAdestunit" + r).value)) {
ById("RAAnbunit" + r).value = "0";
}
}
}
t.estimerRes();
var closestNum = t.getclosestcity();
//if(t.dcp1)
//t.dcp1.selectBut(closestNum);
},
}
function equippedthronestats(stat_id) {
var current_slot = Seed.throne.activeSlot;
var equip_items = Seed.throne.slotEquip[current_slot];
var total = 0;
for (var k = 0; k < equip_items.length; k++) {
var item_id = equip_items[k];
var y = unsafeWindow.kocThroneItems[item_id];
for (var O in y["effects"]) {
var i = +(O.split("slot")[1]);
var id = y["effects"]["slot" + i]["id"];
if (id == stat_id) {
tier = parseInt(y["effects"]["slot" + i]["tier"]);
level = y["level"];
p = unsafeWindow.cm.thronestats.tiers[id][tier];
while (!p && (tier > 0)) {
tier--;
p = unsafeWindow.cm.thronestats.tiers[id][tier];
}
if (!p) continue; // can't find stats for tier
if (i <= y["quality"]) var Percent = p.base + ((level * level + level) * p.growth * 0.5);
total += Percent;
}
}
}
return total;
}
var equippedthroneItems = function (throneSet) {
var thronePreset = Seed.throne.activeSlot;
var equippedItems = {};
for (itm = 0; itm < Seed.throne.slotEquip[thronePreset].length; itm++) {
// equippedItems[Seed.throne.slotEquip[thronePreset][itm]] = Seed.throne.inventory[Seed.throne.slotEquip[thronePreset][itm]];
equippedItems[Seed.throne.slotEquip[thronePreset][itm]] = unsafeWindow.kocThroneItems[Seed.throne.slotEquip[thronePreset][itm]];
}
return equippedItems;
}
function estETA(dist, unit, cityID) {
var ret = {
ETA: 0,
etaStr: 'N/D',
friendETA: 0,
friendEtaStr: 'N/D'
};
if (dist <= 0) return ret;
var troop_type = unit;
var horse = 0;
// if(troop_type>6) horse=1;
if (troop_type > 6 && troop_type < 13) horse = 1;
var troop_speed = parseInt(unsafeWindow.unitstats["unt" + troop_type][3]) * (1 + 0.1 * parseInt(Seed.tech.tch11));
if (horse) {
troop_speed = troop_speed * (1 + 0.05 * parseInt(Seed.tech.tch12))
}
var Speed = troop_speed;
var gi = unsafeWindow.cm.guardianModalModel.getMarchBonus();
var multiplier = 1 + (gi * 0.01);
Speed = Speed * multiplier;
var gSpeed = 0;
var estSec;
if (Speed > 0) {
gSpeed = Speed / 6000;
estSec = Math.ceil(parseFloat(dist) / gSpeed);
}
var e = 1;
if (ById("BOitem_55")) {
var l_elem = ById("BOitem_55");
if (l_elem && l_elem.checked > 0) {
e = 0.75;
}
}
if (ById("BOitem_57")) {
var l_elem = ById("BOitem_57");
if (l_elem && l_elem.checked) {
e = 0.5;
}
}
ret.ETA = (parseInt((estSec * e + '')) + 30);
if (Seed.playerEffects.returnExpire > unsafeWindow.unixtime()) {
ret.ETA = parseInt(ret.ETA * 0.5);
}
ret.etaStr = timestr(ret.ETA, 1);
var building = getCityBuilding(cityID, 18);
if (building) {
fSpeed = Speed * (1 + parseInt(building.maxLevel) / 2);
gSpeed = fSpeed / 6000;
estSec = (dist / gSpeed).toFixed(0);
ret.friendETA = parseInt((estSec * e + '')) + 30;
ret.friendEtaStr = timestr((ret.friendETA + ''), 1);
}
var isPrestige = Seed.cityData.city[cityID].isPrestigeCity;
if (isPrestige) {
fSpeed = Speed * (1 + 5.5);
gSpeed = fSpeed / 6000;
estSec = (dist / gSpeed).toFixed(0);
ret.friendETA = parseInt((estSec * e + '')) + 30;
ret.friendEtaStr = timestr((ret.friendETA + ''), 1);
}
return ret;
}
/********************************* Messages Tab *************************************/
Tabs.Rpt = {
tabOrder: 90,
tabLabel: 'Reports',
cont: null,
state: null,
minPages: parseInt(Options.arPageFrom),
maxPages: parseInt(Options.arPageTo),
data: [],
report: [],
totalPages: parseInt(Options.arPageTo),
what: '',
whatNot: '',
content: '',
init: function (div) {
var t = Tabs.Rpt;
t.cont = div;
unsafeWindow.getmsg = t.getMailBody;
unsafeWindow.getReport = t.getReportBody;
var tc = '<DIV class=ptstat>SEARCH INBOX, OUTBOX, PLAYER AND ALLIANCE REPORTS</DIV><DIV class=ptentry><TABLE><TR align=center valign=center>';
tc += '<TD width = "100px" ; border:none"><a href="https://code.google.com/p/koc-power-tools/wiki/HowToMessages" target="_blank">HELP</a></td></tr>';
tc += '<TD class=xtab align=right>Type: <SELECT id="idRptType">';
tc += '<OPTION value="alliance" ' + (Options.rptType == 'alliance' ? 'SELECTED' : '') + '>Alliance Reports</OPTION>';
tc += '<OPTION value="player" ' + (Options.rptType == 'player' ? 'SELECTED' : '') + '>Player Reports</OPTION>';
tc += '<OPTION value="inbox" ' + (Options.rptType == 'inbox' ? 'SELECTED' : '') + '>Inbox</OPTION>';
tc += '<OPTION value="outbox" ' + (Options.rptType == 'outbox' ? 'SELECTED' : '') + '>Outbox</OPTION></SELECT>';
tc += '<BR />Pages: <INPUT id="idRptPageFrom" size=1 value="' + Options.arPageFrom + '">–<INPUT id="idRptPageTo" size=1 value="' + Options.arPageTo + '"></TD>';
tc += '<TD class=xtab align=right>Attacker: <SELECT id="idRptAttacker">'; // Options.arPageFrom - Options.arPageTo
tc += '<OPTION value="Them" ' + (Options.arAttacker == 'Them' ? 'SELECTED' : '') + '>Them</OPTION>';
tc += '<OPTION value="Us" ' + (Options.arAttacker == 'Us' ? 'SELECTED' : '') + '>Us</OPTION>';
tc += '<OPTION value="Both" ' + (Options.arAttacker == 'Both' ? 'SELECTED' : '') + '>Both</OPTION></SELECT>';
tc += '<BR />Target: <SELECT id="idRptTarget">';
tc += '<OPTION value="Them" ' + (Options.arTarget == 'Them' ? 'SELECTED' : '') + '>Them</OPTION>';
tc += '<OPTION value="Us" ' + (Options.arTarget == 'Us' ? 'SELECTED' : '') + '>Us</OPTION>';
tc += '<OPTION value="Both" ' + (Options.arTarget == 'Both' ? 'SELECTED' : '') + '>Both</OPTION></SELECT></TD>';
tc += '<TD class=xtab align=right>Contains: <INPUT id=idRptWhat type=text size=11 maxlength=50 value=""><BR />';
tc += 'But not: <INPUT id=idRptWhatNot type=text size=11 maxlength=50 value=""></TD>';
tc += '<TD class=xtab align=left><INPUT id=idRptAttack type=checkbox ' + (Options.arAttack ? 'CHECKED' : '') + ' /> Attack<BR />';
tc += '<INPUT id=idRptScout type=checkbox ' + (Options.arScout ? 'CHECKED' : '') + ' /> Scout</TD>';
tc += '<TD class=xtab align=left><INPUT id=idRptReinforce type=checkbox ' + (Options.arReinforce ? 'CHECKED' : '') + ' /> Reinforce<BR />';
tc += '<INPUT id=idRptTransport type=checkbox ' + (Options.arTransport ? 'CHECKED' : '') + ' /> Transport</TD>';
tc += '<TD class=xtab align=left><INPUT id=idRptSearch type=submit value="Start Search" /></TD></TR></TABLE></DIV>';
tc += '<DIV class=ptstat><TABLE width=100% cellspacing=0><TR><TD class=xtab align=left width=125><DIV id=idRptSearched></DIV></TD></TD>';
tc += '<TD class=xtab><TD class=xtab align=center><SPAN style="white-space:normal" id=idRptStatus> </span></TD></TD>';
tc += '<TD class=xtab><TD class=xtab align=right width=125><DIV id=idRptFound></DIV></TD></TR></TABLE></DIV>';
tc += '<DIV id="idRptResultsDiv" style="height:556px; max-height:556px; overflow-x:auto; overflow-y:auto; white-space:nowrap;"></DIV>';
t.cont.innerHTML = tc;
document.getElementById('idRptType').addEventListener('change', t.handleRptType, false);
document.getElementById('idRptPageFrom').addEventListener('change', t.handleRptPages, false);
document.getElementById('idRptPageTo').addEventListener('change', t.handleRptPages, false);
document.getElementById('idRptAttacker').addEventListener('change', t.handleRptAttacker, false);
document.getElementById('idRptTarget').addEventListener('change', t.handleRptTarget, false);
document.getElementById('idRptWhat').addEventListener('keyup', t.handleRptWhat, false);
document.getElementById('idRptWhatNot').addEventListener('keyup', t.handleRptWhatNot, false);
document.getElementById('idRptSearch').addEventListener('click', t.handleRptSearch, false);
t.togOpt('idRptAttack', 'arAttack');
t.togOpt('idRptScout', 'arScout');
t.togOpt('idRptReinforce', 'arReinforce');
t.togOpt('idRptTransport', 'arTransport');
return this.cont;
},
togOpt: function (checkboxId, optionName) {
var t = Tabs.Rpt;
var checkbox = document.getElementById(checkboxId);
checkbox.addEventListener('change', eventHandler, false);
function eventHandler() {
Options[optionName] = this.checked;
saveOptions();
if (t.data.length > 0)
if (Options.rptType == 'alliance' || Options.rptType == 'player')
t.DisplayRpt();
else
t.DisplayMail();
}
},
handleRptType: function () {
var t = Tabs.Rpt;
Options.rptType = document.getElementById("idRptType").value;
saveOptions();
document.getElementById("idRptSearched").innerHTML = '';
document.getElementById("idRptStatus").innerHTML = ' ';
document.getElementById("idRptFound").innerHTML = '';
document.getElementById("idRptResultsDiv").innerHTML = '';
},
handleRptPages: function () {
var t = Tabs.Rpt;
t.minPages = parseInt(document.getElementById("idRptPageFrom").value);
t.maxPages = parseInt(document.getElementById("idRptPageTo").value);
if (t.maxPages < t.minPages) {
t.maxPages = t.minPages;
document.getElementById("idRptPageTo").value = t.maxPages;
}
Options.arPageFrom = t.minPages;
Options.arPageTo = t.maxPages;
saveOptions();
t.totalPages = t.maxPages;
},
handleRptAttacker: function () {
var t = Tabs.Rpt;
Options.arAttacker = document.getElementById("idRptAttacker").value;
saveOptions();
if ((Options.rptType == 'alliance' || Options.rptType == 'player') && t.data.length > 0)
t.DisplayRpt();
},
handleRptTarget: function () {
var t = Tabs.Rpt;
Options.arTarget = document.getElementById("idRptTarget").value;
saveOptions();
if ((Options.rptType == 'alliance' || Options.rptType == 'player') && t.data.length > 0)
t.DisplayRpt();
},
handleRptWhat: function () {
var t = Tabs.Rpt;
t.what = document.getElementById("idRptWhat").value;
if (t.data.length > 0)
if (Options.rptType == 'alliance' || Options.rptType == 'player')
t.DisplayRpt();
else
t.DisplayMail();
},
handleRptWhatNot: function () {
var t = Tabs.Rpt;
t.whatNot = document.getElementById("idRptWhatNot").value;
if (t.data.length > 0)
if (Options.rptType == 'alliance' || Options.rptType == 'player')
t.DisplayRpt();
else
t.DisplayMail();
},
handleRptSearch: function () {
var t = Tabs.Rpt;
if (t.searchRunning) {
t.searchRunning = false;
t.stopSearch('SEARCH CANCELLED!');
return;
}
t.handleRptPages();
document.getElementById('idRptSearch').value = 'Stop Search';
document.getElementById('idRptStatus').innerHTML = 'Searching page ' + t.minPages + ' of ' + t.maxPages;
t.searchRunning = true;
t.data = [];
t.report = [];
if (Options.rptType == 'alliance' || Options.rptType == 'player')
t.getRpt(t.minPages);
else
t.getMail(t.minPages);
},
stopSearch: function (msg) {
var t = Tabs.Rpt;
if (t.searchRunning || msg == 'SEARCH CANCELLED!')
document.getElementById('idRptStatus').innerHTML = '<FONT color=#ffaaaa>' + msg + '</FONT>';
document.getElementById('idRptSearch').value = 'Start Search';
t.searchRunning = false;
if (Options.rptType == 'alliance' || Options.rptType == 'player')
t.DisplayRpt();
else
t.DisplayMail();
},
getMail: function (pageNum) {
var t = Tabs.Rpt;
var params = unsafeWindow.Object.clone(unsafeWindow.g_ajaxparams);
params.pf = 0;
params.requestType = "GET_MESSAGE_HEADERS_FOR_USER_INBOX";
params.boxType = document.getElementById('idRptType').value;
params.pageNo = pageNum;
new MyAjaxRequest(unsafeWindow.g_ajaxpath + "ajax/getEmail.php" + unsafeWindow.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (rslt) {
t.getMailCallback(rslt, pageNum);
},
onFailure: function () {},
}, false);
},
getMailCallback: function (rslt, page) {
var t = Tabs.Rpt;
if (rslt) {
if (!rslt.ok) {
document.getElementById("idRptStatus").innerHTML = '<FONT color=#ffaaaa>' + rslt.errorMsg + '</FONT>';
return;
}
t.totalPages = parseInt(rslt.noOfPages);
if (t.totalPages < t.maxPages)
t.maxPages = t.totalPages;
if (rslt.message && page) {
var ml = rslt.message;
if (rslt.messageCount > 0) {
var rptkeys = unsafeWindow.Object.keys(ml);
for (var i = 0; i < rptkeys.length; i++) {
var rpt = ml[rptkeys[i]];
rpt.page = page;
t.data.push(rpt);
}
}
}
if (parseInt(page) + 1 <= t.maxPages && t.searchRunning) {
document.getElementById("idRptStatus").innerHTML = 'Searching page ' + (parseInt(page) + 1) + ' of ' + t.maxPages;
t.getMail(parseInt(page) + 1);
if (t.data.length > 0)
t.DisplayMail();
} else if (page)
t.stopSearch('Done!');
}
},
getRpt: function (pageNum) {
var t = Tabs.Rpt;
var params = unsafeWindow.Object.clone(unsafeWindow.g_ajaxparams);
params.pageNo = pageNum;
if (Options.rptType == 'alliance')
params.group = "a";
new MyAjaxRequest(unsafeWindow.g_ajaxpath + "ajax/listReports.php" + unsafeWindow.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (rslt) {
t.getRptCallback(rslt, pageNum);
},
onFailure: function (rslt) {
t.getRptCallback(rslt, pageNum);
},
}, false);
},
getRptCallback: function (rslt, page) {
var t = Tabs.Rpt;
if (rslt) {
if (!rslt.ok) {
document.getElementById("idRptStatus").innerHTML = '<FONT color=#ffaaaa>' + rslt.errorMsg + '</FONT>';
return;
}
t.totalPages = parseInt(rslt.totalPages);
if (t.totalPages < t.maxPages)
t.maxPages = t.totalPages;
if (rslt.arReports && page) {
var ar = rslt.arReports;
if (ar.length == 0)
t.stopSearch('Empty pages found from page ' + page + ' onwards - Kabam glitch');
var rptkeys = unsafeWindow.Object.keys(ar);
for (var i = 0; i < rptkeys.length; i++) {
var rpt = ar[rptkeys[i]];
var reportId = parseInt(rpt.reportId);
t.report[reportId] = [];
// Attacker
t.report[reportId].side1Name = rslt.arPlayerNames['p' + rpt.side1PlayerId];
t.report[reportId].side1AllianceId = parseInt(rpt.side1AllianceId);
if (rpt.side1AllianceId > 0)
t.report[reportId].side1AllianceName = rslt.arAllianceNames['a' + rpt.side1AllianceId];
else
t.report[reportId].side1AllianceName = 'unaligned';
if (rpt.side1CityId > 0)
t.report[reportId].side1CityName = rslt.arCityNames['c' + rpt.side1CityId];
else
t.report[reportId].side1CityName = 'none';
t.report[reportId].side1XCoord = rpt.side1XCoord;
t.report[reportId].side1YCoord = rpt.side1YCoord;
// Target
if (parseInt(rpt.side0PlayerId) == 0) { // Kabam
t.report[reportId].side0Name = 'Enemy';
t.report[reportId].side0AllianceName = '';
t.report[reportId].side0CityName = '';
} else { // Player
t.report[reportId].side0Name = rslt.arPlayerNames['p' + rpt.side0PlayerId];
if (rpt.side0AllianceId > 0)
t.report[reportId].side0AllianceName = rslt.arAllianceNames['a' + rpt.side0AllianceId];
else
t.report[reportId].side0AllianceName = 'unaligned';
if (rpt.side0CityId > 0)
t.report[reportId].side0CityName = rslt.arCityNames['c' + rpt.side0CityId];
else
t.report[reportId].side0CityName = 'none';
}
t.report[reportId].side0AllianceId = parseInt(rpt.side0AllianceId);
t.report[reportId].side0XCoord = rpt.side0XCoord;
t.report[reportId].side0YCoord = rpt.side0YCoord;
if (parseInt(rpt.side0TileType) == 10)
t.report[reportId].side0TileTypeText = 'Grass';
else if (parseInt(rpt.side0TileType) == 11)
t.report[reportId].side0TileTypeText = 'Lake';
else if (parseInt(rpt.side0TileType) == 20)
t.report[reportId].side0TileTypeText = 'Woods';
else if (parseInt(rpt.side0TileType) == 30)
t.report[reportId].side0TileTypeText = 'Hills';
else if (parseInt(rpt.side0TileType) == 40)
t.report[reportId].side0TileTypeText = 'Mount';
else if (parseInt(rpt.side0TileType) == 50)
t.report[reportId].side0TileTypeText = 'Plain';
else if (parseInt(rpt.side0CityId) == 0)
t.report[reportId].side0TileTypeText = 'Barb';
else
t.report[reportId].side0TileTypeText = 'City';
t.report[reportId].side0TileTypeLevel = t.report[reportId].side0TileTypeText + ' ' + rpt.side0TileLevel;
t.report[reportId].side0TileType = rpt.side0TileType;
t.report[reportId].side0TileLevel = rpt.side0TileLevel;
// Miscellaneous
t.report[reportId].page = page;
t.report[reportId].reportUnixTime = rpt.reportUnixTime;
if (rpt.side0AllianceId == parseInt(getMyAlliance()[0]))
t.report[reportId].sideId = 0;
else if (rpt.side1AllianceId == parseInt(getMyAlliance()[0])) {
t.report[reportId].sideId = 1;
} else { // if we're here then this is a player report from when they were in another alliance
if (rpt.side0PlayerId == uW.tvuid)
t.report[reportId].sideId = 0;
else if (rpt.side1PlayerId == uW.tvuid)
t.report[reportId].sideId = 1;
else // shouldn't get here but we'll catch it if the report body is requested
t.report[reportId].sideId = -1;
}
if (rpt.marchType == 0)
t.report[reportId].marchName = 'Desertion';
else if (rpt.marchType == 1)
t.report[reportId].marchName = 'Transport';
else if (rpt.marchType == 2)
t.report[reportId].marchName = 'Reinforce';
else if (rpt.marchType == 3) {
if (t.report[reportId].sideId == 0)
t.report[reportId].marchName = 'Anti-Scout';
else
t.report[reportId].marchName = 'Scout';
} else if (rpt.marchType == 4) {
if (t.report[reportId].sideId == 0)
t.report[reportId].marchName = 'Defend';
else
t.report[reportId].marchName = 'Attack';
} else
t.report[reportId].marchName = '?';
t.data.push({
reportId: reportId,
});
}
}
if (parseInt(page) + 1 <= t.maxPages && t.searchRunning) {
document.getElementById("idRptStatus").innerHTML = 'Searching page ' + (parseInt(page) + 1) + ' of ' + t.maxPages;
t.getRpt(parseInt(page) + 1);
if (t.data.length > 0)
t.DisplayRpt();
} else if (page)
t.stopSearch('Done!');
}
},
DisplayMail: function () {
var t = Tabs.Rpt;
var results = document.getElementById("idRptResultsDiv");
if (!t.data.length) {
results.innerHTML = '<center>None found</center>';
return;
}
reportsSearched = t.data.length;
reportsFound = 0;
t.content = '';
for (var i = 0; i < reportsSearched; i++) {
var rpt = t.data[i];
if ((t.what == '' || (rpt.subject.search(t.what, "i") != -1) || (rpt.displayName.search(t.what, "i") != -1)) && (t.whatNot == '' || ((rpt.subject.search(t.whatNot, "i") == -1) && (rpt.displayName.search(t.whatNot, "i") == -1)))) {
reportsFound++;
if (reportsFound == 1)
t.content += '<center><table><thead><th>P</th><th>Date</th><th>From</th><th>Subject</th></thead><tbody>';
t.content += '<tr><td align=right>' + rpt.page + '</td><td>' + rpt.dateSent + '</td><td>' + rpt.displayName + '</td>';
t.content += '<td><A><SPAN onclick="getmsg(' + rpt.messageId + ')">' + rpt.subject + '</SPAN></a></td></tr>';
}
}
if (reportsFound > 1)
t.content += '</tbody></table></center>';
if (reportsFound == 0 && reportsSearched > 0)
t.content = '<center>None found</center>';
results.innerHTML = t.content;
document.getElementById("idRptSearched").innerHTML = ' Searched: ' + reportsSearched;
document.getElementById("idRptFound").innerHTML = 'Found: ' + reportsFound;
},
getMailBody: function (ID, dataI) {
var t = Tabs.Rpt;
var params = unsafeWindow.Object.clone(unsafeWindow.g_ajaxparams);
params.messageId = ID;
params.requestType = "GET_MESSAGE_FOR_ID";
new MyAjaxRequest(unsafeWindow.g_ajaxpath + "ajax/getEmail.php" + unsafeWindow.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (rslt) {
if (rslt.ok)
t.displayMailBody(rslt.messageBody);
},
onFailure: function () {},
}, false);
},
displayMailBody: function (messageBody) {
var t = Tabs.Rpt;
var popMsg = null;
t.popMsg = new CPopup('pbMailBody', 0, 0, 670, 600, true, function () {
clearTimeout(1000);
});
t.popMsg.centerMe(mainPop.getMainDiv());
var m = '<DIV style="max-height:565px; height:565px; overflow-y:scroll">';
m += messageBody + '</div>';
t.popMsg.getMainDiv().innerHTML = m;
t.popMsg.getTopDiv().innerHTML = '<DIV align=center><B>Message</B></DIV>';
t.popMsg.show(true);
},
DisplayRpt: function () {
var t = Tabs.Rpt;
var results = document.getElementById("idRptResultsDiv");
if (!t.data.length) {
results.innerHTML = '<center>None found</center>';
return;
}
var myAllianceId = parseInt(getMyAlliance()[0]);
reportsSearched = t.data.length;
reportsFound = 0;
t.content = '';
for (var i = 0; i < reportsSearched; i++) {
var reportId = t.data[i].reportId;
var rpt = t.report[reportId];
if ((rpt.side0Name == 'undefined') && (rpt.marchName != 'Desertion'))
continue;
if ((((myAllianceId == parseInt(rpt.side1AllianceId) && Options.arAttacker != 'Them') || (myAllianceId != parseInt(rpt.side1AllianceId) && Options.arAttacker != 'Us') || Options.arAttacker == 'Both') && ((myAllianceId == parseInt(rpt.side0AllianceId) && Options.arTarget != 'Them') || (myAllianceId != parseInt(rpt.side0AllianceId) && Options.arTarget != 'Us') || Options.arTarget == 'Both') && ((Options.arAttack && (rpt.marchName == 'Attack' || rpt.marchName == 'Defend')) || (Options.arScout && (rpt.marchName == 'Scout' || rpt.marchName == 'Anti-Scout')) || (Options.arReinforce && rpt.marchName == 'Reinforce') || (Options.arTransport && rpt.marchName == 'Transport'))) || (rpt.marchName == 'Desertion')) {
if (((t.what == '' || (rpt.side1Name.search(t.what, "i") != -1) || (rpt.side1AllianceName.search(t.what, "i") != -1) || (rpt.side0Name.search(t.what, "i") != -1) || (rpt.side0AllianceName.search(t.what, "i") != -1) || (rpt.side0TileTypeText.search(t.what, "i") != -1)) && (t.whatNot == '' || ((rpt.side1Name.search(t.whatNot, "i") == -1) && (rpt.side1AllianceName.search(t.whatNot, "i") == -1) && (rpt.side0Name.search(t.whatNot, "i") == -1) && (rpt.side0AllianceName.search(t.whatNot, "i") == -1) && (rpt.side0TileTypeText.search(t.whatNot, "i") == -1)))) || (rpt.marchName == 'Desertion')) {
reportsFound++;
if (reportsFound == 1) {
if (Options.enableReportNumber)
t.content += '<center><table><thead><th>P</th><th>Date</th><th>Report</th><th>Attacker</th><th>From</th>';
else
t.content += '<center><table><thead><th>P</th><th>Date</th><th>Attacker</th><th>From</th>';
if (Options.arAttacker != 'Us')
t.content += '<th>Alliance</th>';
t.content += '<th>Action</th><th>Target</th><th>Type</th><th>At</th>';
if (Options.arTarget != 'Us')
t.content += '<th>Alliance</th>';
t.content += '<th>Dist</th><th>Nearest</th></thead><tbody>';
}
var closestDist = 999999;
var closestLoc = null;
var closestNum = 1;
for (var c = 0; c < Cities.numCities; c++) {
var city = Cities.cities[c];
city.x + ',' + city.y
var dist = distance(city.x, city.y, rpt.side0XCoord, rpt.side0YCoord);
if (dist < closestDist) {
closestDist = dist;
closestLoc = city.x + ',' + city.y;
closestNum = c + 1;
}
}
if (rpt.marchName == 'Anti-Scout' || rpt.marchName == 'Defend')
style = ' style="background-color:#EF9999;"';
else if (rpt.marchName == 'Reinforce')
style = ' style="background-color:#99EF99;"';
else
style = "";
t.content += '<tr><td align=right ' + style + '>' + rpt.page + '</td><td ' + style + '>' + formatUnixTime(rpt.reportUnixTime, '24hour') + '</td>';
if (Options.enableReportNumber)
t.content += '<td ' + style + '>' + reportId + '</td>';
if (rpt.marchName == 'Desertion') {
t.content += '<td ' + style + '></td><td ' + style + '></td>';
if (Options.arAttacker != 'Us')
t.content += '<td ' + style + '></td>';
t.content += '<td ' + style + '>' + rpt.marchName + '</td><td ' + style + '></td><td ' + style + '></td><td ' + style + '></td>';
if (Options.arAttacker != 'Us')
t.content += '<td ' + style + '></td>';
t.content += '<td ' + style + '></td><td ' + style + '></td>';
} else {
t.content += '<td ' + style + '>' + rpt.side1Name + '</td><td align=center ' + style + '><A onclick="ptGotoMap(' + rpt.side1XCoord + ',' + rpt.side1YCoord + ')">' + rpt.side1XCoord + ',' + rpt.side1YCoord + '</a></td>';
if (Options.arAttacker != 'Us')
t.content += '<td ' + style + '>' + rpt.side1AllianceName + '</td>';
t.content += '<td ' + style + '><A><SPAN onclick="ptChatReportClicked(' + reportId + ',0)">' + rpt.marchName + '</span></a></td>';
t.content += '<td ' + style + '>' + rpt.side0Name + '</td><td>' + rpt.side0TileTypeLevel + '</td>';
t.content += '<td align=center ' + style + '><A onclick="ptGotoMap(' + rpt.side0XCoord + ',' + rpt.side0YCoord + ')">' + rpt.side0XCoord + ',' + rpt.side0YCoord + '</a></td>';
if (Options.arTarget != 'Us')
t.content += '<td ' + style + '>' + rpt.side0AllianceName + '</td>';
t.content += '<td align=right ' + style + '>' + Math.floor(closestDist) + '</td><td align=center ' + style + '><A onclick=\"ptGotoMap(' + closestNum + ')\">' + closestLoc + '</a></td></tr>';
}
}
}
}
if (reportsFound > 1)
t.content += '</tbody></table></center>';
if (reportsFound == 0 && reportsSearched > 0)
t.content = '<center>None found</center>';
results.innerHTML = t.content;
document.getElementById("idRptSearched").innerHTML = ' Searched: ' + reportsSearched;
document.getElementById("idRptFound").innerHTML = 'Found: ' + reportsFound;
},
show: function () {},
hide: function () {},
};
/*********************************** Alliance TAB ***********************************/
Tabs.Alliance = {
tabOrder: 120,
tabLabel: uW.g_js_strings.commonstr.alliance,
myDiv: null,
alliancemembers: [],
number: 0,
totalmembers: 0,
error: false,
sortType: 1,
sortBy: 'Name',
init: function (div) {
var t = Tabs.Alliance;
t.myDiv = div;
t.myDiv.style.overflowY = 'scroll';
t.myDiv.style.maxHeight = '730px';
t.totalmembers = 0;
t.alliancemembers = [];
uW.getdetails = t.getMemberDetails;
var m = '<DIV class=ptstat>ALLIANCE FUNCTIONS</div><TABLE align=center cellpadding=1 cellspacing=0></table>';
m += '<TD width = "100px" ; border:none"><a href="https://code.google.com/p/koc-power-tools/wiki/HowToAlliance" target="_blank">HELP</a></td></tr>';
m += '<TABLE class=ptTab><TD width=200px>List Alliance Members</td><TD>Sort by: ' + htmlSelector({
Name: 'Name',
Might: 'Might',
glory: 'Glory',
Cities: 'Cities',
Position: 'Position',
dip: 'Days in Position',
uid: 'User Id',
fbuid: 'Facebook id'
}, null, 'id=searchAlli') + '</td>';
m += '<TD><INPUT id=alList type=submit value="List"></td>';
m += '<TD id=progress></td></tr>';
m += '<TR><TD width=200px>Show alliance diplomaties</td><TD><INPUT id=aldiplo type=submit value="List diplomaties"></td></tr></table>';
m += '<DIV class=ptstat>OVERVIEW</div><TABLE align=center cellpadding=1 cellspacing=0></table>';
m += '<TABLE id=alOverviewTab class=alTab><TR align="center"></tr></table>';
t.myDiv.innerHTML = m;
document.getElementById('alList').addEventListener('click', function () {
if (!t.searching) {
t.totalmembers = 0;
t.alliancemembers = [];
document.getElementById('alOverviewTab').innerHTML = "";
document.getElementById('progress').innerHTML = "";
document.getElementById('progress').innerHTML = uW.g_js_strings.commonstr.loadingddd;
document.getElementById('alList').disabled = true;
t.error = false;
t.fetchAllianceMemberPage();
}
}, false);
document.getElementById('searchAlli').addEventListener('click', function () {
if (t.alliancemembers != "") {
document.getElementById('alOverviewTab').innerHTML = "";
t.paintMembers();
}
}, false);
document.getElementById('aldiplo').addEventListener('click', function () {
t.paintDiplomacy();
}, false);
//window.addEventListener('unload', t.onUnload, false);
},
paintMembers: function () {
var t = Tabs.Alliance;
if (document.getElementById('searchAlli').value == t.sortBy) {
t.sortType *= -1;
} else {
t.sortType = 1;
}
t.sortBy = document.getElementById('searchAlli').value;
var sortmembers = t.alliancemembers.sort(function (a, b) {
var sortA = a[t.sortBy],
sortB = b[t.sortBy];
if (t.sortType > 0) {
if (typeof (sortA) == 'number' && typeof (sortB) == 'number') {
return sortA - sortB;
} else {
return sortA.localeCompare(sortB);
}
} else {
if (typeof (sortA) == 'number' && typeof (sortB) == 'number') {
return sortB - sortA;
} else {
return sortB.localeCompare(sortA);
}
}
});
for (var y = (sortmembers.length - 1); y >= 0; y--) {
t._addTab(sortmembers[y].Name, sortmembers[y].Might, sortmembers[y].LastLogin, sortmembers[y].Position, sortmembers[y].dip, sortmembers[y].uid, sortmembers[y].fbuid, sortmembers[y].Cities, sortmembers[y].avatarurl, sortmembers[y].glory, sortmembers[y].dateJoined);
t.myDiv.style.overflowY = 'scroll';
}
t._addTabHeader();
},
_addTab: function (Name, Might, LastLogin, Position, dip, uid, fbuid, Cities, avatar, gloire, arrive) {
var t = Tabs.Alliance;
var row = document.getElementById('alOverviewTab').insertRow(0);
row.vAlign = 'top';
row.insertCell(0).innerHTML = '<img width=25 src="' + avatar + '">';
row.insertCell(1).innerHTML = '<A target="_tab" href="https://www.facebook.com/profile.php?id=' + fbuid + '">profile</a>';
row.insertCell(2).innerHTML = Name;
var cell2 = row.insertCell(3);
cell2.width = "60";
cell2.align = "right";
cell2.vAlign = "top";
cell2.innerHTML = addCommas(Might);
var cell2 = row.insertCell(4);
cell2.width = "60";
cell2.align = "right";
cell2.vAlign = "top";
cell2.innerHTML = addCommas(gloire);
row.insertCell(5).innerHTML = Cities;
row.insertCell(6).innerHTML = officerId2String(Position);
row.insertCell(7).innerHTML = dip;
row.insertCell(8).innerHTML = LastLogin;
row.insertCell(9).innerHTML = arrive;
},
_addTabHeader: function () {
var t = Tabs.Alliance;
var row = document.getElementById('alOverviewTab').insertRow(0);
row.vAlign = 'top';
row.insertCell(0).innerHTML = "<u><b>Avatar</b></u>";
row.insertCell(1).innerHTML = "<u><b>Facebook</b></u>";
row.insertCell(2).innerHTML = "<u><b>Name</b></u>";
row.insertCell(3).innerHTML = "<u><b>Might</b></u>";
row.insertCell(4).innerHTML = "<u><b>Glory</b></u>";
row.insertCell(5).innerHTML = "<u><b>Cities</b></u>";
row.insertCell(6).innerHTML = "<u><b>Position</b></u>";
row.insertCell(7).innerHTML = "<u><b>DIP</b></u>";
row.insertCell(8).innerHTML = "<u><b>Last Login</b></u>";
row.insertCell(9).innerHTML = "<u><b>Joined</b></u>";
},
paintDiplomacy: function () {
document.getElementById('alOverviewTab').innerHTML = "";
document.getElementById('progress').innerHTML = "";
var m = '<TR><TD colspan=4 style=\'background: #33CC66;\' align=center><B>Friendly: </b></td></tr>';
if (Seed.allianceDiplomacies['friendly'] == null) m += '<TR><TD>No Friendlies found...</td>';
else m += '<TABLE class=xtab><TR><TD>Alliance Name</td><TD>Members</td></tr>';
for (k in Seed.allianceDiplomacies['friendly']) {
m += '<TR><TD>' + Seed.allianceDiplomacies['friendly'][k]['allianceName'] + '</td>';
m += '<TD align=center>' + Seed.allianceDiplomacies['friendly'][k]['membersCount'] + '</td>';
}
m += '<TR></tr></table>';
m += '<TR><TD colspan=4 style=\'background: #CC0033;\' align=center><B>Hostile: </b></td></tr>';
if (Seed.allianceDiplomacies['hostile'] == null) m += '<TR><TD>No Hostiles found...</td>';
else m += '<TABLE class=xtab><TR><TD>Alliance Name</td><TD>Members</td></tr>';
for (k in Seed.allianceDiplomacies["hostile"]) {
m += '<TR><TD>' + Seed.allianceDiplomacies["hostile"][k]['allianceName'] + '</td>';
m += '<TD align=center>' + Seed.allianceDiplomacies["hostile"][k]['membersCount'] + '</td>';
}
m += '<TR></tr></table>';
m += '<TR><TD colspan=4 style=\'background: #FF6633;\' align=center><B>Friendly towards us: </b></td></tr>';
if (Seed.allianceDiplomacies['friendlyToYou'] == null) m += '<TR><TD>No Friendlies towards us found...</td>';
else m += '<TABLE class=xtab><TR><TD>Alliance Name</td><TD>Members</td></tr>';
for (k in Seed.allianceDiplomacies["friendlyToYou"]) {
m += '<TR><TD>' + Seed.allianceDiplomacies["friendlyToYou"][k]['allianceName'] + '</td>';
m += '<TD align=center>' + Seed.allianceDiplomacies["friendlyToYou"][k]['membersCount'] + '</td>';
}
m += '<TR></tr></table>';
document.getElementById('alOverviewTab').innerHTML = m;
},
fetchAllianceMemberPage: function () {
var t = Tabs.Alliance;
document.getElementById('alList').disabled = true;
var params = uW.Object.clone(uW.g_ajaxparams);
params.pf = 0;
new AjaxRequest(uW.g_ajaxpath + "ajax/allianceGetInfo.php" + uW.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (transport) {
var rslt = eval("(" + transport.responseText + ")");
t.totalmembers = (rslt["allianceInfo"]["members"]);
for (var i = 1; i <= 10; i++) {
params.pageNo = i;
params.pf = 0;
new AjaxRequest(uW.g_ajaxpath + "ajax/allianceGetMembersInfo.php" + uW.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (transport) {
var info = eval("(" + transport.responseText + ")");
if (info.ok) {
for (var k in info["memberInfo"]) {
if (info["memberInfo"][k]["might"] != undefined && !t.error) {
t.alliancemembers.push({
Name: info["memberInfo"][k]["name"],
Might: parseInt(info["memberInfo"][k]["might"]),
Cities: parseInt(info["memberInfo"][k]["cities"]),
Position: parseInt(info["memberInfo"][k]["positionType"]),
dip: parseInt(info["memberInfo"][k]["daysInPosition"]),
LastLogin: info["memberInfo"][k]["lastLogin"],
uid: parseInt(info["memberInfo"][k]["userId"]),
fbuid: parseInt(info["memberInfo"][k]["fbuid"]),
avatarurl: info["memberInfo"][k]["avatarurl"],
glory: parseInt(info["memberInfo"][k]["glory"]),
dateJoined: info["memberInfo"][k]["dateJoined"],
});
}
document.getElementById('alOverviewTab').innerHTML = "";
t.paintMembers();
}
if (!t.error) document.getElementById('progress').innerHTML = '(' + (t.alliancemembers.length) + '/' + t.totalmembers + ')';
if (t.alliancemembers.length >= t.totalmembers) document.getElementById('alList').disabled = false;
} else if (info.error) {
document.getElementById('alList').disabled = false;
document.getElementById('progress').innerHTML = "ERROR!";
t.error = true;
}
},
onFailure: function (rslt) {;
notify({
errorMsg: 'AJAX error'
});
},
});
}
},
onFailure: function (rslt) {;
notify({
errorMsg: 'AJAX error'
});
},
});
},
hide: function () {
mainPop.div.style.width = 750 + 'px';
},
show: function () {
var t = Tabs.Alliance;
mainPop.div.style.width = 750 + 'px';
},
};
/*********************************** IRC TAB ***********************************/
Tabs.IRC = {
tabOrder: 1000,
tabLabel: "IRC",
myDiv: null,
seenLog: {},
init: function (div) {
var t = Tabs.IRC;
t.myDiv = div;
t.myDiv.style.maxHeight = '730px';
var m = '<DIV class=ptstat>IRC Bot Command Server</div><TABLE align=center cellpadding=1 cellspacing=0></table>';
m += '<INPUT id=ptIRCcmdEnable type=checkbox ' + (IRCOptions.IRCCmdEnable ? 'CHECKED ' : '') + '> Global Enable (this must be checked for all other options to work)<br>';
m += '<DIV class=ptstat>IRC Bot Options</div><TABLE align=center cellpadding=1 cellspacing=0></table>';
m += '<INPUT id=ptIRCcmdSeen type=checkbox ' + (IRCOptions.IRCCmdSeen.enable ? 'CHECKED ' : '') + '> Respond to "!seen <username>" command<br>';
m += '<INPUT id=ptIRCcmdRules type=checkbox ' + (IRCOptions.IRCCmdRules.enable ? 'CHECKED ' : '') + '> Respond to "!rules" command. ';
m += ' Rules message: <INPUT id=ptIRCcmdRulesMsg type=text size=50 value="' + IRCOptions.IRCCmdRules.message + '">';
t.myDiv.innerHTML = m;
document.getElementById('ptIRCcmdEnable').addEventListener('change', function (e) {
IRCOptions.IRCCmdEnable = e.target.checked;
saveIRCOptions();
}, false);
document.getElementById('ptIRCcmdSeen').addEventListener('change', function (e) {
IRCOptions.IRCCmdSeen.enable = e.target.checked;
saveIRCOptions();
}, false);
document.getElementById('ptIRCcmdRules').addEventListener('change', function (e) {
IRCOptions.IRCCmdRules.enable = e.target.checked;
saveIRCOptions();
}, false);
document.getElementById('ptIRCcmdRulesMsg').addEventListener('change', function (e) {
IRCOptions.IRCCmdRules.message = e.target.value;
saveIRCOptions();
}, false);
var a = JSON2.parse(localStorage.getItem('IRCSeen_log_' + GetServerId()));
if (matTypeof(a) == 'object') {
t.seenLog = a;
}
window.addEventListener('unload', t.onUnload, false);
},
onUnload: function () {
var t = Tabs.IRC;
localStorage.setItem('IRCSeen_log_' + GetServerId(), JSON2.stringify(t.seenLog));
},
grabChat: function (uid, name, msg) {
var t = Tabs.IRC;
var time = "";
var lastPost = "";
if (!IRCOptions.IRCCmdEnable)
return;
if (name == null)
return;
if (msg == null)
return;
var a = msg.indexOf("<span class='time'>");
var b = msg.indexOf('</span>', a);
if (b > a)
time = msg.slice(a + 19, b);
var c = msg.indexOf("<div class='tx'>");
var d = msg.indexOf("</div>", c);
if (d > c)
lastPost = msg.slice(c + 16, d);
t.logChat(uid, name, time, lastPost);
if (IRCOptions.IRCCmdSeen.enable) {
if (msg.indexOf("!seen") >= 0) {
t.processSeen(msg);
}
}
if (IRCOptions.IRCCmdRules.enable) {
if (msg.indexOf("!rules") >= 0) {
t.processRules();
}
}
},
logChat: function (uid, name, time, lastPost) {
var t = Tabs.IRC;
if (lastPost.indexOf("I need help building my") >= 0)
return;
if (lastPost.indexOf("My embassy has") >= 0)
return;
if (lastPost.indexOf("My wilderness at") >= 0)
return;
if (lastPost.indexOf("has been scouted by") >= 0)
return;
if (lastPost.indexOf("has been attacked by") >= 0)
return;
if (lastPost.indexOf("is low on food") >= 0)
return;
if (lastPost.indexOf("Encamped Allies") >= 0)
return;
if (lastPost.indexOf("Estimated Arrival") >= 0)
return;
var updateSeen = {
"name": name,
"timestamp": time,
"lastpost": lastPost
};
t.seenLog[uid] = updateSeen;
localStorage.setItem('IRCSeen_log_' + GetServerId(), JSON2.stringify(t.seenLog));
},
processSeen: function (msg) {
var t = Tabs.IRC;
var username_string = msg.slice(msg.indexOf("!seen") + 6);
var username = username_string.split('<');
if (username[0].length > 2)
Tabs.AllianceList.fetchPlayerList(username[0], t.eventGotPlayerList);
},
processRules: function () {
var t = Tabs.IRC;
var automsg = sendChat('/a ' + IRCOptions.IRCCmdRules.message);
},
eventGotPlayerList: function (rslt) {
var t = Tabs.IRC;
if (!rslt.ok) {
var autoerrormsgPNF = sendChat("/a Player not found. Enter a valid Player.");
return;
}
var uid = rslt.matchedUsers[Object.keys(rslt.matchedUsers)[0]].userId;
if (Object.keys(t.seenLog).length > 0)
if (uid in t.seenLog) {
var automsg = sendChat('/a ' + t.seenLog[uid].name + ' last seen saying: ' + t.seenLog[uid].lastpost + ' @' + t.seenLog[uid].timestamp);
} else
var autoerrormsg = sendChat("/a I haven't seen that user");
},
hide: function () {
mainPop.div.style.width = 750 + 'px';
},
show: function () {
var t = Tabs.IRC;
mainPop.div.style.width = 750 + 'px';
},
};
/**************************** Unit Stats Calculator Tab ******************************/
Tabs.UnitCalc = {
tabOrder: 1100, // order to place tab in top bar
tabLabel: 'UnitCalc', // label to show in main window tabs
myDiv: null,
timer: null,
init: function (div) { // called once, upon script startup
var t = Tabs.UnitCalc;
t.myDiv = div;
div.innerHTML = '<div><table><tr><td><input id=unitStatsCalcButton style="font-size:' + Options.overviewFontSize + 'px" type="submit" value="Unit Stats"></td>\
<td><input id=unitStatsMaxButton style="font-size:' + Options.overviewFontSize + 'px" type="submit" value="Max Stats" disabled></td>\
</tr></table></div>';
div.innerHTML += '<div id=unitStatsDiv style="maxheight:710px; height:710px; overflow-y:scroll;"></div>';
t.paintUnitStatsCalc();
},
hide: function () { // called whenever the main window is hidden, or another tab is selected
var t = Tabs.UnitCalc;
},
show: function () { // called whenever this tab is shown
var t = Tabs.UnitCalc;
},
paintUnitStatsCalc: function () {
var t = Tabs.UnitCalc;
var msg = '<table>';
msg += '<tr style="vertical-align:top"><td>\
<div class="ptdivHeader" style="background: #99CCFF;" align=left><a id=cfgResearchHdr class=ptdivLink >Research <img id=cfgResearchArrow height="10" src="' + GameIcons.DownArrow + '"></a></div>';
msg += '<div id=cfgResearch align=left class="">';
msg += '<table border=1>\
<tr><td>Healing Potions </td><td><input id=ptucResHP type=text value=12 size=4></tr>\
<tr><td>Poisoned Edge </td><td><input id=ptucResPE type=text value=12 size=4></tr>\
<tr><td>Metal Alloys </td><td><input id=ptucResMA type=text value=12 size=4></tr>\
<tr><td>Alloy Horseshoes</td><td><input id=ptucResAH type=text value=12 size=4></tr>\
<tr><td>Fletching </td><td><input id=ptucResFL type=text value=12 size=4></tr></table></div>';
msg += '<div class="ptdivHeader" style="background: #99CCFF;" align=left><a id=cfgGuardianHdr class=ptdivLink >Guardian <img id=cfgGuardianArrow height="10" src="' + GameIcons.DownArrow + '"></a></div>';
msg += '<div id=cfgGuardian align=left class="">';
msg += '<table border=1><tr><td>Guardians</td><td>Levels</td><td>Active</td></tr>\
<tr><td>Wood </td><td><input id=ptucWood type=text value=9 size=4></td><td><input id=ptucWoodAct type=radio name=ptucGuard checked></td></tr>\
<tr><td>Ore<sup>*<sup></td><td><input id=ptucOre type=text value=9 size=4></td><td><input id=ptucOreAct type=radio name=ptucGuard></td></tr>\
<tr><td>Food </td><td><input id=ptucFood type=text value=9 size=4></td><td><input id=ptucFoodAct type=radio name=ptucGuard></td></tr>\
<tr><td>Stone </td><td><input id=ptucStone type=text value=9 size=4></td><td><input id=ptucStoneAct type=radio name=ptucGuard></td></tr></table>';
msg += 'Set Bonus<input id=ptucGuardSet type=checkbox unchecked></div>';
msg += '<div class="ptdivHeader" style="background: #99CCFF;" align=left><a id=cfgItemsHdr class=ptdivLink >Items <img id=cfgItemsArrow height="10" src="' + GameIcons.DownArrow + '"></a></div>';
msg += '<div id=cfgItems align=left class="">';
msg += '<table border=1>\
<tr><td>+20atk</td><td><input id=ptucItemAtk20 type=checkbox unchecked></td>\
<td>+50atk</td><td><input id=ptucItemAtk50 type=checkbox unchecked></td></tr>\
<tr><td>+20def</td><td><input id=ptucItemDef20 type=checkbox unchecked></td>\
<td>+50def</td><td><input id=ptucItemDef50 type=checkbox unchecked></td></tr></table></div>';
msg += '<div class="ptdivHeader" style="background: #99CCFF;" align=left><a id=cfgFeyHdr class=ptdivLink >Fey <img id=cfgFeyArrow height="10" src="' + GameIcons.DownArrow + '"></a></div>';
msg += '<div id=cfgFey align=left class="">';
msg += '<table border=1><tr><td>Fey Altar Active: <input id=ptucFeyAltarActive type=checkbox unchecked></td></tr>\
<td>Bonus Amount <input id=ptucFeyAltarBonus type=text value=40 size=4></td></tr></table>\
<input id=ptucOreBless type=checkbox unchecked> Empowered Iron Blessing<br>\
<input id=ptucBloodBless type=checkbox unchecked>Blood Lust<sup>*<sup></div>';
msg += '<div class="ptdivHeader" style="background: #99CCFF;" align=left><a id=cfgBritonHdr class=ptdivLink >Briton <img id=cfgBritonArrow height="10" src="' + GameIcons.DownArrow + '"></a></div>';
msg += '<div id=cfgBriton align=left class="">';
msg += '<table border=1>\
<tr><td>Strengthen Ranks </td><td><input id=ptucResSR type=text value=10 size=4></tr>\
<tr><td>Improved Fletching</td><td><input id=ptucResIF type=text value=10 size=4></tr></table></div>';
msg += '</td>';
msg += '<td style="vertical-align:top">'
msg += '<div class="ptdivHeader" style="background: #99CCFF;" align=left><a id=cfgKnightHdr class=ptdivLink >Knight <img id=cfgKnightArrow height="10" src="' + GameIcons.DownArrow + '"></a></div>';
msg += '<div id=cfgKnight align=left class="">';
msg += 'Combat Points<input id="ptucKnightLevel" type=text value=300 size=4></div>';
msg += '<div class="ptdivHeader" style="background: #99CCFF;" align=left><a id=cfgOrderHdr class=ptdivLink >Order of the Round <img id=cfgOrderArrow height="10" src="' + GameIcons.DownArrow + '"></a></div>';
msg += '<div id=cfgOrder align=left class="">';
msg += '<input id=ptucOrder type=checkbox unchecked>Subscriber</div>';
msg += '<div class="ptdivHeader" style="background: #99CCFF;" align=left>Defender Stats</div>\
Troops on Defense<input id=ptucDefending type=checkbox unchecked><br><sup>*</sup>Active only when attacking';
msg += '</td>';
msg += '<td style="vertical-align:top">'
msg += '<div class="ptdivHeader" style="background: #99CCFF;" align=left><a id=cfgThroneHdr class=ptdivLink >Throne <img id=cfgThroneArrow height="10" src="' + GameIcons.DownArrow + '"></a></div>';
msg += '<div id=cfgThrone align=left class="">';
msg += '<table border=1>\
<tr><td><b>TR Stats</b></td><td><b>Life</b></td><td><b>Atk</b></td><td><b>Def</b></td><td><b>Spd</b></td><td><b>Rng</b></td></tr>\
<tr><td>TR All Buff</td> <td><input id=ptucLifeMod type=text value=0 size=4></td><td><input id=ptucAtkMod type=text value=0 size=4></td><td><input id=ptucDefMod type=text value=0 size=4></td><td><input id=ptucSpdMod type=text value=0 size=4></td><td><input id=ptucRngMod type=text value=0 size=4></td></tr>\
<tr><td>TR Infantry Buff</td> <td><input id=ptucLifeModInf type=text value=0 size=4></td><td><input id=ptucAtkModInf type=text value=0 size=4></td><td><input id=ptucDefModInf type=text value=0 size=4></td><td><input id=ptucSpdModInf type=text value=0 size=4></td><td><input id=ptucRngModInf type=text value=0 size=4></td></tr>\
<tr><td>TR Ranged Buff</td> <td><input id=ptucLifeModRng type=text value=0 size=4></td><td><input id=ptucAtkModRng type=text value=0 size=4></td><td><input id=ptucDefModRng type=text value=0 size=4></td><td><input id=ptucSpdModRng type=text value=0 size=4></td><td><input id=ptucRngModRng type=text value=0 size=4></td></tr>\
<tr><td>TR Siege Buff</td> <td><input id=ptucLifeModSig type=text value=0 size=4></td><td><input id=ptucAtkModSig type=text value=0 size=4></td><td><input id=ptucDefModSig type=text value=0 size=4></td><td><input id=ptucSpdModSig type=text value=0 size=4></td><td><input id=ptucRngModSig type=text value=0 size=4></td></tr>\
<tr><td>TR Horsed Buff</td> <td><input id=ptucLifeModHor type=text value=0 size=4></td><td><input id=ptucAtkModHor type=text value=0 size=4></td><td><input id=ptucDefModHor type=text value=0 size=4></td><td><input id=ptucSpdModHor type=text value=0 size=4></td><td><input id=ptucRngModHor type=text value=0 size=4></td></tr></table></div>'
msg += '<div class="ptdivHeader" style="background: #99CCFF;" align=left><a id=cfgChampHdr class=ptdivLink >Champion <img id=cfgChampArrow height="10" src="' + GameIcons.DownArrow + '"></a></div>';
msg += '<div id=cfgChamp align=left class="">';
msg += '<table border=1>\
<tr><td><b>Champ Stats</b></td><td><b>Life</b></td><td><b>Atk</b></td><td><b>Def</b></td><td><b>Spd</b></td><td><b>Rng</b></td></tr>\
<tr><td></td> <td><input id=ptucLifeChampMod type=text value=0 size=4></td><td><input id=ptucAtkChampMod type=text value=0 size=4></td><td><input id=ptucDefChampMod type=text value=0 size=4></td><td><input id=ptucSpdChampMod type=text value=0 size=4></td><td><input id=ptucRngChampMod type=text value=0 size=4></td></tr>\
</table></div>'
msg += '<div class="ptdivHeader" style="background: #99CCFF;" align=left>Unit Stat</div>';
msg += '<div>';
msg += '<table border=1><tr><td><b>Unit</b></td><td><b>Life</b></td><td><b>Atk</b></td><td><b>Def</b></td><td><b>Speed</b></td><td><b>Range</b></td></tr>'
var ui;
for (var iu in uW.cm.UNIT_TYPES) {
ui = uW.cm.UNIT_TYPES[iu];
cost = uW.unitcost['unt' + ui]; // NAME, Food, Wood, Stone, Ore, ?, IdlePop, Time
stats = uW.unitstats['unt' + ui]; // Attack, Defense, Speed, Range, Life
msg += '<tr><td>' + cost[0].substr(0, 16) + '</td><td id=ptucTrp' + (ui) + 'Life>' + stats[0] + '</td>\
<td id=ptucTrp' + (ui) + 'Atk>' + stats[1] + '</td>\
<td id=ptucTrp' + (ui) + 'Def>' + stats[2] + '</td>\
<td id=ptucTrp' + (ui) + 'Spd>' + stats[3] + '</td>\
<td id=ptucTrp' + (ui) + 'Rng>' + stats[4] + '</td></tr>';
}
msg += '</table></div>';
msg += '</td></tr></table>';
document.getElementById('unitStatsDiv').innerHTML = msg;
document.getElementById('cfgResearchHdr').addEventListener('click', function () {
ToggleDivDisplay(500, 500, "cfgResearch");
}, false);
document.getElementById('cfgGuardianHdr').addEventListener('click', function () {
ToggleDivDisplay(500, 500, "cfgGuardian");
}, false);
document.getElementById('cfgItemsHdr').addEventListener('click', function () {
ToggleDivDisplay(500, 500, "cfgItems");
}, false);
document.getElementById('cfgFeyHdr').addEventListener('click', function () {
ToggleDivDisplay(500, 500, "cfgFey");
}, false);
document.getElementById('cfgBritonHdr').addEventListener('click', function () {
ToggleDivDisplay(500, 500, "cfgBriton");
}, false);
document.getElementById('cfgThroneHdr').addEventListener('click', function () {
ToggleDivDisplay(500, 500, "cfgThrone");
}, false);
document.getElementById('cfgChampHdr').addEventListener('click', function () {
ToggleDivDisplay(500, 500, "cfgChamp");
}, false);
document.getElementById('cfgKnightHdr').addEventListener('click', function () {
ToggleDivDisplay(500, 500, "cfgKnight");
}, false);
document.getElementById('cfgOrderHdr').addEventListener('click', function () {
ToggleDivDisplay(500, 500, "cfgOrder");
}, false);
// Event listener Order of the Round Table
document.getElementById('ptucOrder').addEventListener('change', function (e) {
t.modifyUnitResearch();
}, false);
// Event listener Knight Level
document.getElementById('ptucKnightLevel').addEventListener('change', function (e) {
if (isNaN(e.target.value)) e.target.value = 1;
if (e.target.value < 1) alert('Enter positive numbers!');
t.modifyUnitResearch();
}, false);
// Event listener Fey Altar
document.getElementById('ptucFeyAltarActive').addEventListener('change', function (e) {
t.modifyUnitResearch();
}, false);
document.getElementById('ptucFeyAltarBonus').addEventListener('change', function (e) {
if (isNaN(e.target.value)) e.target.value = 1;
if (e.target.value < 1 || e.target.value > 40) alert('Enter a numbers between 1-40!');
t.modifyUnitResearch();
}, false);
// Event listener Guardian
document.getElementById('ptucWood').addEventListener('change', function (e) {
if (isNaN(e.target.value)) e.target.value = 0;
if (e.target.vale > 12) alert('Enter a number between 0-12!');
t.modifyUnitResearch();
}, false);
document.getElementById('ptucOre').addEventListener('change', function (e) {
if (isNaN(e.target.value)) e.target.value = 0;
if (e.target.vale > 12) alert('Enter a number between 0-12!');
t.modifyUnitResearch();
}, false);
document.getElementById('ptucFood').addEventListener('change', function (e) {
if (isNaN(e.target.value)) e.target.value = 0;
if (e.target.vale > 12) alert('Enter a number between 0-12!');
t.modifyUnitResearch();
}, false);
document.getElementById('ptucStone').addEventListener('change', function (e) {
if (isNaN(e.target.value)) e.target.value = 0;
if (e.target.vale > 12) alert('Enter a number between 0-12!');
t.modifyUnitResearch();
}, false);
document.getElementById('ptucWoodAct').addEventListener('change', function (e) {
t.modifyUnitResearch();
}, false);
document.getElementById('ptucOreAct').addEventListener('change', function (e) {
t.modifyUnitResearch();
}, false);
document.getElementById('ptucFoodAct').addEventListener('change', function (e) {
t.modifyUnitResearch();
}, false);
document.getElementById('ptucStoneAct').addEventListener('change', function (e) {
t.modifyUnitResearch();
}, false);
document.getElementById('ptucGuardSet').addEventListener('change', function (e) {
t.modifyUnitResearch();
}, false);
document.getElementById('ptucDefending').addEventListener('change', function (e) {
t.modifyUnitResearch();
}, false);
document.getElementById('ptucOreBless').addEventListener('change', function (e) {
t.modifyUnitResearch();
}, false);
document.getElementById('ptucBloodBless').addEventListener('change', function (e) {
t.modifyUnitResearch();
}, false);
//Event listener Item Boosts
document.getElementById('ptucItemAtk20').addEventListener('change', function (e) {
t.modifyUnitResearch();
}, false);
document.getElementById('ptucItemAtk50').addEventListener('change', function (e) {
t.modifyUnitResearch();
}, false);
document.getElementById('ptucItemDef20').addEventListener('change', function (e) {
t.modifyUnitResearch();
}, false);
document.getElementById('ptucItemDef50').addEventListener('change', function (e) {
t.modifyUnitResearch();
}, false);
// Event listener Research Level
document.getElementById('ptucResHP').addEventListener('change', function (e) {
if (isNaN(e.target.value)) e.target.value = 0;
if (e.target.value < 0 || e.target.vale > 12) alert('Enter a number between 0-12!');
t.modifyUnitResearch();
}, false);
document.getElementById('ptucResPE').addEventListener('change', function (e) {
if (isNaN(e.target.value)) e.target.value = 0;
if (e.target.value < 0 || e.target.vale > 12) alert('Enter a number between 0-12!');
t.modifyUnitResearch();
}, false);
document.getElementById('ptucResMA').addEventListener('change', function (e) {
if (isNaN(e.target.value)) e.target.value = 0;
if (e.target.value < 0 || e.target.vale > 12) alert('Enter a number between 0-12!');
t.modifyUnitResearch();
}, false);
document.getElementById('ptucResAH').addEventListener('change', function (e) {
if (isNaN(e.target.value)) e.target.value = 0;
if (e.target.value < 0 || e.target.vale > 12) alert('Enter a number between 0-12!');
t.modifyUnitResearch();
}, false);
document.getElementById('ptucResFL').addEventListener('change', function (e) {
if (isNaN(e.target.value)) e.target.value = 0;
if (e.target.value < 0 || e.target.vale > 12) alert('Enter a number between 0-12!');
t.modifyUnitResearch();
}, false);
document.getElementById('ptucResSR').addEventListener('change', function (e) {
if (isNaN(e.target.value)) e.target.value = 0;
if (e.target.value < 0 || e.target.vale > 10) alert('Enter a number between 0-10!');
t.modifyUnitResearch();
}, false);
document.getElementById('ptucResIF').addEventListener('change', function (e) {
if (isNaN(e.target.value)) e.target.value = 0;
if (e.target.value < 0 || e.target.vale > 10) alert('Enter a number between 0-10!');
t.modifyUnitResearch();
}, false);
// Event listener Throne
document.getElementById('ptucLifeMod').addEventListener('change', function (e) {
if (isNaN(e.target.value)) e.target.value = 0;
t.modifyUnitResearch();
}, false);
document.getElementById('ptucLifeModInf').addEventListener('change', function (e) {
if (isNaN(e.target.value)) e.target.value = 0;
t.modifyUnitResearch();
}, false);
document.getElementById('ptucLifeModRng').addEventListener('change', function (e) {
if (isNaN(e.target.value)) e.target.value = 0;
t.modifyUnitResearch();
}, false);
document.getElementById('ptucLifeModSig').addEventListener('change', function (e) {
if (isNaN(e.target.value)) e.target.value = 0;
t.modifyUnitResearch();
}, false);
document.getElementById('ptucLifeModHor').addEventListener('change', function (e) {
if (isNaN(e.target.value)) e.target.value = 0;
t.modifyUnitResearch();
}, false);
document.getElementById('ptucAtkMod').addEventListener('change', function (e) {
if (isNaN(e.target.value)) e.target.value = 0;
t.modifyUnitResearch();
}, false);
document.getElementById('ptucAtkModInf').addEventListener('change', function (e) {
if (isNaN(e.target.value)) e.target.value = 0;
t.modifyUnitResearch();
}, false);
document.getElementById('ptucAtkModRng').addEventListener('change', function (e) {
if (isNaN(e.target.value)) e.target.value = 0;
t.modifyUnitResearch();
}, false);
document.getElementById('ptucAtkModSig').addEventListener('change', function (e) {
if (isNaN(e.target.value)) e.target.value = 0;
t.modifyUnitResearch();
}, false);
document.getElementById('ptucAtkModHor').addEventListener('change', function (e) {
if (isNaN(e.target.value)) e.target.value = 0;
t.modifyUnitResearch();
}, false);
document.getElementById('ptucDefMod').addEventListener('change', function (e) {
if (isNaN(e.target.value)) e.target.value = 0;
t.modifyUnitResearch();
}, false);
document.getElementById('ptucDefModInf').addEventListener('change', function (e) {
if (isNaN(e.target.value)) e.target.value = 0;
t.modifyUnitResearch();
}, false);
document.getElementById('ptucDefModRng').addEventListener('change', function (e) {
if (isNaN(e.target.value)) e.target.value = 0;
t.modifyUnitResearch();
}, false);
document.getElementById('ptucDefModSig').addEventListener('change', function (e) {
if (isNaN(e.target.value)) e.target.value = 0;
t.modifyUnitResearch();
}, false);
document.getElementById('ptucDefModHor').addEventListener('change', function (e) {
if (isNaN(e.target.value)) e.target.value = 0;
t.modifyUnitResearch();
}, false);
document.getElementById('ptucSpdMod').addEventListener('change', function (e) {
if (isNaN(e.target.value)) e.target.value = 0;
t.modifyUnitResearch();
}, false);
document.getElementById('ptucSpdModInf').addEventListener('change', function (e) {
if (isNaN(e.target.value)) e.target.value = 0;
t.modifyUnitResearch();
}, false);
document.getElementById('ptucSpdModRng').addEventListener('change', function (e) {
if (isNaN(e.target.value)) e.target.value = 0;
t.modifyUnitResearch();
}, false);
document.getElementById('ptucSpdModSig').addEventListener('change', function (e) {
if (isNaN(e.target.value)) e.target.value = 0;
t.modifyUnitResearch();
}, false);
document.getElementById('ptucSpdModHor').addEventListener('change', function (e) {
if (isNaN(e.target.value)) e.target.value = 0;
t.modifyUnitResearch();
}, false);
document.getElementById('ptucRngMod').addEventListener('change', function (e) {
if (isNaN(e.target.value)) e.target.value = 0;
t.modifyUnitResearch();
}, false);
document.getElementById('ptucRngModInf').addEventListener('change', function (e) {
if (isNaN(e.target.value)) e.target.value = 0;
t.modifyUnitResearch();
}, false);
document.getElementById('ptucRngModRng').addEventListener('change', function (e) {
if (isNaN(e.target.value)) e.target.value = 0;
t.modifyUnitResearch();
}, false);
document.getElementById('ptucRngModSig').addEventListener('change', function (e) {
if (isNaN(e.target.value)) e.target.value = 0;
t.modifyUnitResearch();
}, false);
document.getElementById('ptucRngModHor').addEventListener('change', function (e) {
if (isNaN(e.target.value)) e.target.value = 0;
t.modifyUnitResearch();
}, false);
// Event listener Champ
document.getElementById('ptucLifeChampMod').addEventListener('change', function (e) {
if (isNaN(e.target.value)) e.target.value = 0;
t.modifyUnitResearch();
}, false);
document.getElementById('ptucAtkChampMod').addEventListener('change', function (e) {
if (isNaN(e.target.value)) e.target.value = 0;
t.modifyUnitResearch();
}, false);
document.getElementById('ptucDefChampMod').addEventListener('change', function (e) {
if (isNaN(e.target.value)) e.target.value = 0;
t.modifyUnitResearch();
}, false);
document.getElementById('ptucSpdChampMod').addEventListener('change', function (e) {
if (isNaN(e.target.value)) e.target.value = 0;
t.modifyUnitResearch();
}, false);
document.getElementById('ptucRngChampMod').addEventListener('change', function (e) {
if (isNaN(e.target.value)) e.target.value = 0;
t.modifyUnitResearch();
}, false);
t.modifyUnitResearch();
},
modifyUnitResearch: function () {
var t = Tabs.UnitCalc;
var resLife = (5 * parseInt(document.getElementById('ptucResHP').value) / 100);
var resAtk = (5 * parseInt(document.getElementById('ptucResPE').value) / 100);
var resDef = (5 * parseInt(document.getElementById('ptucResMA').value) / 100);
var resSpd = (5 * parseInt(document.getElementById('ptucResAH').value) / 100);
var resRng = (5 * parseInt(document.getElementById('ptucResFL').value) / 100);
resRng += (2 * parseInt(document.getElementById('ptucResIF').value) / 100);
var knight = parseFloat(document.getElementById('ptucKnightLevel').value) / 200;
var guardLife = t.woodGuardTable(parseInt(document.getElementById('ptucWood').value));
var guardAtk = t.oreGuardTable(parseInt(document.getElementById('ptucOre').value));
var guardLifeAct = document.getElementById('ptucWoodAct').checked ? 1 : 0;
var guardAtkAct = document.getElementById('ptucOreAct').checked ? 1 : 0;
var guardSetAct = document.getElementById('ptucGuardSet').checked ? 1 : 0;
var guardOreBless = document.getElementById('ptucOreBless').checked ? 1 : 0;
var bloodLustBlessLife = document.getElementById('ptucBloodBless').checked ? 0.75 : 1;
var bloodLustBlessAtkSpd = document.getElementById('ptucBloodBless').checked ? 1.5 : 1;
var defending = document.getElementById('ptucDefending').checked ? 1 : 0;
var itemAtk = 0;
var itemDef = 0;
var feyAltarAct = document.getElementById('ptucFeyAltarActive').checked ? 1 : 0;
var feyAltar = parseFloat(document.getElementById('ptucFeyAltarBonus').value) / 100;
var orderDef = 0;
var champLife = parseFloat(document.getElementById('ptucLifeChampMod').value);
var champAtk = parseFloat(document.getElementById('ptucAtkChampMod').value);
var champDef = parseFloat(document.getElementById('ptucDefChampMod').value);
var champSpd = parseFloat(document.getElementById('ptucSpdChampMod').value);
var champRng = parseFloat(document.getElementById('ptucRngChampMod').value);
if (document.getElementById('ptucOrder').checked)
orderDef = 0.15;
if (document.getElementById('ptucItemAtk20').checked)
itemAtk = 0.2 + itemAtk;
if (document.getElementById('ptucItemAtk50').checked)
itemAtk = 0.5 + itemAtk;
if (document.getElementById('ptucItemDef20').checked)
itemDef = 0.2 + itemDef;
if (document.getElementById('ptucItemDef50').checked)
itemDef = 0.5 + itemDef;
if (defending)
bloodLustBlessAtkSpd = 1;
// calculate guardian
if (guardSetAct) { //if you have set bonus
if (guardLifeAct && defending) { //if your want defending troop stats
guardLife = (guardLife / 2 + guardLife) / 100;
guardAtk = 0;
} else if (guardAtkAct) {
if (defending) {
guardAtk = 0;
guardLife = guardLife / 200;
} else {
guardAtk = (1.5 * guardAtk / 100) + guardOreBless * 0.15 + guardOreBless * (1.5 * guardAtk / 100);
guardLife = 0;
}
} else {
if (defending) {
guardAtk = 0;
guardLife = guardLife / 200;
} else {
guardAtk = (guardAtk / 200) + guardOreBless * 0.15 + guardOreBless * 0.15 * (guardAtk / 200);
guardLife = 0;
}
}
} else { // don't have set bonus
if (guardLifeAct && defending) {
guardLife = guardLife / 100;
guardAtk = 0;
} else if (guardAtkAct && !defending) {
guardAtk = (guardAtk / 100) + guardOreBless * 0.15 + guardOreBless * 0.15 * (guardAtk / 100);
guardLife = 0;
} else {
guardAtk = 0;
guardLife = 0;
}
}
// for (ui=1; ui<nTroopType+1; ui++){
var ui;
for (var iu in uW.cm.UNIT_TYPES){
ui = uW.cm.UNIT_TYPES[iu];
var lifchampfeyadj = champLife + (1 + feyAltar*feyAltarAct) * uW.unitstats['unt'+ui][0]; lifchampfeyadj = Math.max(lifchampfeyadj,(1 + feyAltar*feyAltarAct) * uW.unitstats['unt'+ui][0]*0.01);
var atkchampfeyadj = champAtk + (1 + feyAltar*feyAltarAct) * uW.unitstats['unt'+ui][1]; atkchampfeyadj = Math.max(atkchampfeyadj,(1 + feyAltar*feyAltarAct) * uW.unitstats['unt'+ui][1]*0.01);
var defchampfeyadj = champDef + (1 + feyAltar*feyAltarAct) * uW.unitstats['unt'+ui][2]; defchampfeyadj = Math.max(defchampfeyadj,(1 + feyAltar*feyAltarAct) * uW.unitstats['unt'+ui][2]*0.01);
var spdchampfeyadj = champSpd + (1 + feyAltar*feyAltarAct) * uW.unitstats['unt'+ui][3]; spdchampfeyadj = Math.max(spdchampfeyadj,(1 + feyAltar*feyAltarAct) * uW.unitstats['unt'+ui][3]*0.01);
var rngchampfeyadj = champRng + (1 + feyAltar*feyAltarAct) * uW.unitstats['unt'+ui][4]; rngchampfeyadj = Math.max(rngchampfeyadj,(1 + feyAltar*feyAltarAct) * uW.unitstats['unt'+ui][4]*0.01);
switch(unsafeWindow.cm.unitFrontendType[ui]) {
case "infantry" :
if(ui < 10) {
document.getElementById('ptucTrp'+ui+'Life').innerHTML = t.round1decimals( (1 + guardLife) * lifchampfeyadj * bloodLustBlessLife * (1 + (resLife + t.maxBuff('Life',parseFloat(document.getElementById('ptucLifeMod').value),parseFloat(document.getElementById('ptucLifeModInf').value))/100)));
document.getElementById('ptucTrp'+ui+'Atk').innerHTML = t.round1decimals( (1 + guardAtk) * atkchampfeyadj * bloodLustBlessAtkSpd * (1 + (resAtk + knight + itemAtk + t.maxBuff('Attack', parseFloat(document.getElementById('ptucAtkMod' ).value),parseFloat(document.getElementById('ptucAtkModInf' ).value))/100)));
document.getElementById('ptucTrp'+ui+'Def').innerHTML = t.round1decimals( defchampfeyadj * (1 + (resDef + knight + itemDef + orderDef + t.maxBuff('Defense', parseFloat(document.getElementById('ptucDefMod' ).value),parseFloat(document.getElementById('ptucDefModInf' ).value))/100)));
document.getElementById('ptucTrp'+ui+'Spd').innerHTML = t.round1decimals( spdchampfeyadj * (1 + ( t.maxBuff('Speed', parseFloat(document.getElementById('ptucSpdMod' ).value),parseFloat(document.getElementById('ptucSpdModInf' ).value))/100)));
document.getElementById('ptucTrp'+ui+'Rng').innerHTML = t.round1decimals( rngchampfeyadj * (1 + ( t.maxBuff('Range', parseFloat(document.getElementById('ptucRngMod' ).value),parseFloat(document.getElementById('ptucRngModInf' ).value))/100)));
} else {
//Trp13 - blood
//verified on 11/30 that bloods don't use infantry buff for atk/def. other stats unknown
//Trp14 - exec
//verified on 11/30 that exec don't use infantry buff for atk/def. other stats unknown
document.getElementById('ptucTrp'+ui+'Life').innerHTML = t.round1decimals( (1 + guardLife) * lifchampfeyadj * bloodLustBlessLife * (1 + (resLife + t.maxBuff('Life',parseFloat(document.getElementById('ptucLifeMod').value),0)/100)));
document.getElementById('ptucTrp'+ui+'Atk').innerHTML = t.round1decimals( (1 + guardAtk) * atkchampfeyadj * bloodLustBlessAtkSpd * (1 + (resAtk + knight + itemAtk + t.maxBuff('Attack', parseFloat(document.getElementById('ptucAtkMod' ).value),0)/100)));
document.getElementById('ptucTrp'+ui+'Def').innerHTML = t.round1decimals( defchampfeyadj * (1 + (resDef + knight + itemDef + orderDef + t.maxBuff('Defense', parseFloat(document.getElementById('ptucDefMod' ).value),0)/100)));
document.getElementById('ptucTrp'+ui+'Spd').innerHTML = t.round1decimals( spdchampfeyadj * (1 + ( t.maxBuff('Speed', parseFloat(document.getElementById('ptucSpdMod' ).value),0)/100)));
document.getElementById('ptucTrp'+ui+'Rng').innerHTML = t.round1decimals( rngchampfeyadj * (1 + ( t.maxBuff('Range', parseFloat(document.getElementById('ptucRngMod' ).value),0)/100)));
}
break;
case "ranged" :
document.getElementById('ptucTrp'+ui+'Life').innerHTML = t.round1decimals( (1 + guardLife) * lifchampfeyadj * bloodLustBlessLife * (1 + (resLife + t.maxBuff('Life',parseFloat(document.getElementById('ptucLifeMod').value),parseFloat(document.getElementById('ptucLifeModRng').value))/100)));
document.getElementById('ptucTrp'+ui+'Atk').innerHTML = t.round1decimals( (1 + guardAtk) * atkchampfeyadj * bloodLustBlessAtkSpd * (1 + (resAtk + knight + itemAtk + t.maxBuff('Attack', parseFloat(document.getElementById('ptucAtkMod' ).value),parseFloat(document.getElementById('ptucAtkModRng' ).value))/100)));
document.getElementById('ptucTrp'+ui+'Def').innerHTML = t.round1decimals( defchampfeyadj * (1 + (resDef + knight + itemDef + orderDef + t.maxBuff('Defense', parseFloat(document.getElementById('ptucDefMod' ).value),parseFloat(document.getElementById('ptucDefModRng' ).value))/100)));
document.getElementById('ptucTrp'+ui+'Spd').innerHTML = t.round1decimals( spdchampfeyadj * (1 + ( t.maxBuff('Speed', parseFloat(document.getElementById('ptucSpdMod' ).value),parseFloat(document.getElementById('ptucSpdModRng' ).value))/100)));
document.getElementById('ptucTrp'+ui+'Rng').innerHTML = t.round1decimals( rngchampfeyadj * (1 + (resRng + t.maxBuff('Range', parseFloat(document.getElementById('ptucRngMod' ).value),parseFloat(document.getElementById('ptucRngModRng' ).value))/100)));
break;
case "horsed" :
document.getElementById('ptucTrp'+ui+'Life').innerHTML = t.round1decimals( (1 + guardLife) * lifchampfeyadj * (1 + (resLife + t.maxBuff('Life',parseFloat(document.getElementById('ptucLifeMod').value),parseFloat(document.getElementById('ptucLifeModHor').value))/100)));
document.getElementById('ptucTrp'+ui+'Atk').innerHTML = t.round1decimals( (1 + guardAtk) * atkchampfeyadj * (1 + (resAtk + knight + itemAtk + t.maxBuff('Attack', parseFloat(document.getElementById('ptucAtkMod' ).value),parseFloat(document.getElementById('ptucAtkModHor' ).value))/100)));
document.getElementById('ptucTrp'+ui+'Def').innerHTML = t.round1decimals( defchampfeyadj * (1 + (resDef + knight + itemDef + orderDef + t.maxBuff('Defense', parseFloat(document.getElementById('ptucDefMod' ).value),parseFloat(document.getElementById('ptucDefModHor' ).value))/100)));
document.getElementById('ptucTrp'+ui+'Spd').innerHTML = t.round1decimals( spdchampfeyadj * (1 + (resSpd + t.maxBuff('Speed', parseFloat(document.getElementById('ptucSpdMod' ).value),parseFloat(document.getElementById('ptucSpdModHor' ).value))/100)));
document.getElementById('ptucTrp'+ui+'Rng').innerHTML = t.round1decimals( rngchampfeyadj * (1 + ( t.maxBuff('Range', parseFloat(document.getElementById('ptucRngMod' ).value),parseFloat(document.getElementById('ptucRngModHor' ).value))/100)));
if (ui == 17)
document.getElementById('ptucTrp'+ui+'Spd').innerHTML = t.round1decimals( spdchampfeyadj * (1 + ( t.maxBuff('Speed', parseFloat(document.getElementById('ptucSpdMod' ).value),parseFloat(document.getElementById('ptucSpdModHor' ).value))/100)));
break;
case "specialist" :
//Trp15 - siege wall
document.getElementById('ptucTrp'+ui+'Life').innerHTML = t.round1decimals( (1 + guardLife) * lifchampfeyadj * (1 + (resLife + t.maxBuff('Life',parseFloat(document.getElementById('ptucLifeMod').value),0)/100)));
document.getElementById('ptucTrp'+ui+'Atk').innerHTML = t.round1decimals( (1 + guardAtk) * atkchampfeyadj * (1 + (resAtk + knight + itemAtk + t.maxBuff('Attack', parseFloat(document.getElementById('ptucAtkMod' ).value),0)/100)));
document.getElementById('ptucTrp'+ui+'Def').innerHTML = t.round1decimals( defchampfeyadj * (1 + (resDef + knight + itemDef + orderDef + t.maxBuff('Defense', parseFloat(document.getElementById('ptucDefMod' ).value),0)/100)));
document.getElementById('ptucTrp'+ui+'Spd').innerHTML = t.round1decimals( spdchampfeyadj * (1 + (resSpd + t.maxBuff('Speed', parseFloat(document.getElementById('ptucSpdMod' ).value),0)/100)));
document.getElementById('ptucTrp'+ui+'Rng').innerHTML = t.round1decimals( rngchampfeyadj * (1 + ( t.maxBuff('Range', parseFloat(document.getElementById('ptucRngMod' ).value),0)/100)));
break;
case "siege" :
if (ui == 10) {
//Trp10 - ball
document.getElementById('ptucTrp10Life').innerHTML = t.round1decimals( (1 + guardLife) * lifchampfeyadj * (1 + (resLife + t.maxBuff('Life',parseFloat(document.getElementById('ptucLifeMod').value),parseFloat(document.getElementById('ptucLifeModSig').value))/100)));
document.getElementById('ptucTrp10Atk').innerHTML = t.round1decimals( (1 + guardAtk) * atkchampfeyadj * (1 + (resAtk + knight + itemAtk + t.maxBuff('Attack', parseFloat(document.getElementById('ptucAtkMod' ).value),parseFloat(document.getElementById('ptucAtkModSig' ).value))/100)));
document.getElementById('ptucTrp10Def').innerHTML = t.round1decimals( defchampfeyadj * (1 + (resDef + knight + itemDef + orderDef + t.maxBuff('Defense', parseFloat(document.getElementById('ptucDefMod' ).value),parseFloat(document.getElementById('ptucDefModSig' ).value))/100)));
document.getElementById('ptucTrp10Spd').innerHTML = t.round1decimals( spdchampfeyadj * (1 + (resSpd + t.maxBuff('Speed', parseFloat(document.getElementById('ptucSpdMod' ).value),parseFloat(document.getElementById('ptucSpdModSig' ).value))/100)));
document.getElementById('ptucTrp10Rng').innerHTML = t.round1decimals( rngchampfeyadj * (1 + (resRng + t.maxBuff('Range', parseFloat(document.getElementById('ptucRngMod' ).value),parseFloat(document.getElementById('ptucRngModSig' ).value))/100)));
} else {
document.getElementById('ptucTrp'+ui+'Life').innerHTML = t.round1decimals( (1 + guardLife) * lifchampfeyadj * (1 + (resLife + t.maxBuff('Life',parseFloat(document.getElementById('ptucLifeMod').value),parseFloat(document.getElementById('ptucLifeModSig').value))/100)));
document.getElementById('ptucTrp'+ui+'Atk').innerHTML = t.round1decimals( (1 + guardAtk) * atkchampfeyadj * (1 + (resAtk + knight + itemAtk + t.maxBuff('Attack', parseFloat(document.getElementById('ptucAtkMod' ).value),parseFloat(document.getElementById('ptucAtkModSig' ).value))/100)));
document.getElementById('ptucTrp'+ui+'Def').innerHTML = t.round1decimals( defchampfeyadj * (1 + (resDef + knight + itemDef + orderDef + t.maxBuff('Defense', parseFloat(document.getElementById('ptucDefMod' ).value),parseFloat(document.getElementById('ptucDefModSig' ).value))/100)));
document.getElementById('ptucTrp'+ui+'Spd').innerHTML = t.round1decimals( spdchampfeyadj * (1 + (resSpd + t.maxBuff('Speed', parseFloat(document.getElementById('ptucSpdMod' ).value),parseFloat(document.getElementById('ptucSpdModSig' ).value))/100)));
document.getElementById('ptucTrp'+ui+'Rng').innerHTML = t.round1decimals( rngchampfeyadj * (1 + (resRng + t.maxBuff('Range', parseFloat(document.getElementById('ptucRngMod' ).value),parseFloat(document.getElementById('ptucRngModSig' ).value))/100)));
if (ui == 9 || ui == 11)
document.getElementById('ptucTrp'+ui+'Rng').innerHTML = t.round1decimals( rngchampfeyadj * (1 + ( t.maxBuff('Range', parseFloat(document.getElementById('ptucRngMod' ).value),parseFloat(document.getElementById('ptucRngModSig' ).value))/100)));
if (ui == 21)
document.getElementById('ptucTrp'+ui+'Spd').innerHTML = t.round1decimals( spdchampfeyadj * (1 + ( t.maxBuff('Speed', parseFloat(document.getElementById('ptucSpdMod' ).value),parseFloat(document.getElementById('ptucSpdModSig' ).value))/100)));
}
break;
}
}
},
maxBuff: function (stat, a, b) {
if (a + b > unsafeWindow.cm.thronestats.boosts[stat].Max)
return unsafeWindow.cm.thronestats.boosts[stat].Max;
else if (a + b < unsafeWindow.cm.thronestats.boosts[stat].Min)
return unsafeWindow.cm.thronestats.boosts[stat].Min;
else
return a + b;
},
round1decimals: function (number) {
return Math.round(number * 10) / 10;
},
woodGuardTable: function (number) {
if (number == '1')
return 1;
else if (number == '2')
return 2;
else if (number == '3')
return 3;
else if (number == '4')
return 4;
else if (number == '5')
return 6;
else if (number == '6')
return 8;
else if (number == '7')
return 10;
else if (number == '8')
return 13;
else if (number == '9')
return 16;
else if (number == '10')
return 20;
else if (number == '11')
return 25;
else if (number == '12')
return 35;
else
return 0;
},
oreGuardTable: function (number) {
if (number == '1')
return 2;
else if (number == '2')
return 4;
else if (number == '3')
return 6;
else if (number == '4')
return 8;
else if (number == '5')
return 12;
else if (number == '6')
return 16;
else if (number == '7')
return 20;
else if (number == '8')
return 26;
else if (number == '9')
return 32;
else if (number == '10')
return 40;
else if (number == '11')
return 50;
else if (number == '12')
return 65;
else
return 0;
},
}
/*********************************** Accuracy Matrix Tab ***********************************/
Tabs.Accuracy = {
tabOrder: 1200,
tabLabel: 'Accuracy',
cont: null,
init: function (div) {
var t = Tabs.Accuracy;
t.cont = div;
var main = '<DIV class=ptstat>ACCURACY MATRIX<TABLE align=center cellpadding=1 cellspacing=0></table></div>';
main += '<DIV style="height:450px; width:720px; overflow-x:scroll;"><TABLE class=ptTab align=left><TR>';
main += '<TD></td><TD>Target</td></tr>';
main += '<TR><TD></td>';
var z = uW.cm.WorldSettings.getSettingAsObject("UNIT_ACCURACY_MODIFIER");
var keyz = unsafeWindow.Object.keys(z);
var troopa, troopb;
var unitsarr = [];
for (j in unsafeWindow.unitcost)
unitsarr.push(0);
for (iu = 1; iu < unitsarr.length + 2; iu++)
if (iu < 13) main += '<TD>' + uW.unitcost['unt' + iu][0] + '</td>';
else if (iu == 13) main += '<TD>WM Crossbow</td>';
else if (iu > 19) main += '<TD>' + uW.unitcost['unt' + (iu + 1)][0] + '</td>';
else main += '<TD>' + uW.unitcost['unt' + (iu - 1)][0] + '</td>';
main += '</tr>';
for (iu = 1; iu < unitsarr.length + 2; iu++) {
if (iu < 13) main += '<TR><TD>' + uW.unitcost['unt' + iu][0] + '</td>';
else if (iu == 13) main += '<TR><TD>WM Crossbow</td>';
else if (iu > 19) main += '<TR><TD>' + uW.unitcost['unt' + (iu + 1)][0] + '</td>';
else main += '<TR><TD>' + uW.unitcost['unt' + (iu - 1)][0] + '</td>';
troopa = keyz[iu - 1];
for (ju = 1; ju < unitsarr.length + 2; ju++) {
troopb = keyz[ju - 1];
main += '<TD>' + z[troopa][troopb] + '</td>';
}
main += '</tr>';
}
main += '</table></div>';
t.cont.innerHTML = main;
},
hide: function () {},
show: function () {},
}
/*************** Defend Tab **********/
Tabs.Defend = {
cont: null,
displayTimer: null,
tabLabel: 'Defend',
state: null,
curTabBut: null,
curTabName: null,
BOAttackTimer: null,
sourceCity: {},
destinationCity: {},
champion: {},
rows: [],
iused: new Array(),
init: function (div) {
var t = Tabs.Defend;
t.cont = div;
t.state = null;
clearTimeout(t.displayTimer);
uW.ptDefendFav = Options.DefendFav;
},
getContent: function () {
var t = Tabs.Defend;
return t.cont;
},
hide: function () {
var t = Tabs.Defend;
t.state = null;
clearTimeout(t.displayTimer);
},
show: function () {
var t = Tabs.Defend;
setTimeout(t.Refreshtroops, 10000);
var rownum = 0;
var ModelCity = {};
if (t.state == null) {
m = "<DIV class=ptstat><b>QUICK MARCH TOOL</b></div>";
m += "<div id='statpourDAA'></div>";
m += "<TABLE width=600 class=ptTab border=0 align=center>\
<tr><td colspan=4 align=center><input type=button id=DAAaction value='Set Defense'> </td></tr>\
<tr align=center valign=top><td width=130><b><u>City Select</b></u><br><span id=DAAsrcRptspeedcity></span></td>\
</tr><tr align=center valign=top>\
<td colspan=4 align=left>\
<table border=0 bordercolor=black cellspacing=0 cellpadding=0 width=100% style='text-align:center'>\
<tr><td rowspan=" + nTroopType + 1 + "><div id=DAAstatsource></div></td><td colspan=2></td></tr>";
m += "</table></td></tr>";
m += "</td></tr></table>\
<DIV class=ptstat>Saved Unit Configuration :</div><TABLE><tr><td colspan=2><select id=DBO_AT_Fav></select><input type=button value='Reset' id=DBO_AT_Fav_Sup><input type=button value='Reset All' id=DBO_AT_Fav_RESET></td><td colspan=2>New : <input type=type id=DBO_AT_Fav_Nom size=10 maxlength=12> <input type=button value='Save Troops' id=DBO_AT_Fav_ajou>\
<tr><td colspan=4><div id=ptDAAStatus style='overflow-y:auto; max-height:50px; height: 50px;'></div></td></tr></table>";
t.cont.innerHTML = m;
t.statpourRAA = ById('statpourDAA');
//Gestion des favoris
t.Favoris = ById('DBO_AT_Fav');
function metajourfavori() {
t.Favoris.innerHTML = "<option value=''>...</option>";
var lisf = Options.DefendFav;
for (var m in lisf) {
var lis = lisf[m];
t.Favoris.innerHTML += "<option value='" + m + "'>" + lis[0] + "</option>";
}
}
ById("DBO_AT_Fav_RESET").addEventListener('click', function () {
Options.DefendFav = {};
saveOptions();
metajourfavori();
}, false);
ById("DBO_AT_Fav_Sup").addEventListener('click', function () {
numfav = ById("DBO_AT_Fav").value;
if (numfav != "") {
Options.DefendFav[numfav] = {};
delete Options.DefendFav[numfav];
saveOptions();
metajourfavori();
}
}, false);
ById("DBO_AT_Fav_ajou").addEventListener('click', function () {
if (ById("DBO_AT_Fav_Nom").value == "") {
alert("Please fill in a name!");
return;
}
var a = ById("DBO_AT_Fav_Nom").value;
Options.DefendFav[a] = {};
var lisf = Options.DefendFav[a];
lisf[0] = ById("DBO_AT_Fav_Nom").value;
for (var ui in uW.cm.UNIT_TYPES) lisf[uW.cm.UNIT_TYPES[ui]] = ById("DAAnbunit" + uW.cm.UNIT_TYPES[ui]).value;
ById("DBO_AT_Fav_Nom").value = "";
saveOptions();
metajourfavori();
}, false);
ById("DBO_AT_Fav").addEventListener('change', function () {
numfav = ById("DBO_AT_Fav").value;
if (numfav == "") {
for (var ui in uW.cm.UNIT_TYPES) ById("DAAnbunit" + uW.cm.UNIT_TYPES[ui]).value = 0;
} else {
var lisf = Options.DefendFav[numfav];
for (var m in lisf) {
if (m > 0)
if (ById("DAAnbunit" + m)) ById("DAAnbunit" + m).value = lisf[m];
}
}
}, false);
// Fin gestion des favoris
t.statutRAA = ById('ptDAAStatus');
t.destinationCityx = 0;
t.destinationCityy = 0;
t.destinationCityx.value = 0;
t.destinationCityy.value = 0;
t.actionRAA = ById('DAAaction');
t.actionRAA.addEventListener('click', function () {
t.clickATTAQUEDo(4, 0);
}, false);
var dcp0 = new CdispCityPicker('ptDAA0', ById('DAAsrcRptspeedcity'), false, t.clickRAACitySourceSelect, Cities.byID[unsafeWindow.currentcityid].idx);
metajourfavori();
t.clickRAACitySourceSelect(t.sourceCity);
// var closestNum = t.getclosestcity();
// t.dcp1 = new CdispCityPicker ('ptmarch_citydest', ById('DBOVilleProche'), false, t.estimerRes, null).bindToXYboxes(ById("DAAtypetrpx"),ById("DAAtypetrpy"));
}
},
getclosestcity: function () {
var t = Tabs.Defend;
var x1 = parseInt(t.sourceCity.x);
var x2 = parseInt(t.destinationCityx.value);
var y1 = parseInt(t.sourceCity.y);
var y2 = parseInt(t.destinationCityy.value);
var dist = distance(x1, y1, x2, y2);
var closestDist = 999999;
var closestLoc = null;
var closestNum = 1;
for (var c = 0; c < Cities.numCities; c++) {
var city = Cities.cities[c];
var dist = distance(city.x, city.y, x2, y2);
if (dist < closestDist) {
closestDist = dist;
closestLoc = city.x + ',' + city.y;
closestNum = c;
}
}
return closestNum;
},
enregistreAttack: function () {
var t = Tabs.Defend;
if (t.BOHorloge.value.match("^[0-9]{2}:[0-9]{2}:[0-9]{2}$")) {
var horloge = t.BOHorloge.value;
Options.DefendHorloge = horloge;
var ndate = new Date();
ndate.setHours(horloge.substr(0, 2));
ndate.setMinutes(horloge.substr(3, 2));
ndate.setSeconds(0);
var atunits = new Array();
for (var ui in uW.cm.UNIT_TYPES) atunits.push(parseInt(ById("DAAnbunit" + uW.cm.UNIT_TYPES[ui]).value));
Options.DefendUnits = atunits;
Options.DefendFromCity = t.sourceCity.id;
Options.DefendKnight = ById("DAApiKnight").value;
Options.DefendCibleX = t.destinationCityx.value;
Options.DefendCibleY = t.destinationCityy.value;
var x1 = parseInt(t.sourceCity.x);
var x2 = parseInt(t.destinationCityx.value);
var y1 = parseInt(t.sourceCity.y);
var y2 = parseInt(t.destinationCityy.value);
var dist = distance(x1, y1, x2, y2);
var tempplusgrand = 0;
for (var ui in uW.cm.UNIT_TYPES) {
r = uW.cm.UNIT_TYPES[ui];
if (parseInt(ById("DAAnbunit" + r).value) > 0) {
var m = estETA(dist, r, t.sourceCity.id);
if (tempplusgrand < m.ETA) tempplusgrand = m.ETA;
}
}
var departtime = ndate.getTime() - (tempplusgrand * 1000);
var depart = new Date()
depart.setTime(departtime);
var now = unixTime() * 1000;
if (now > depart.getTime()) {
t.BOAttackProg.innerHTML = "Depart impossible !";
return false;
}
Options.DefendGoHorloge = depart.getTime();
saveOptions();
t.BOAttackProg.innerHTML = "Attaque sur " + Options.DefendCibleX + "," + Options.DefendCibleY + " enregistrée";
t.BOEditAttack.disabled = false;
} else {
t.BOAttackProg.innerHTML = "Mauvais format de l'horloge.";
}
},
clickATTAQUEDo: function (typemarche, bouffe) {
var t = Tabs.Defend;
var totalunit = 0;
if (typemarche == 3 && ById("DAAnbunit3").value == 0) ById("DAAnbunit3").value = 1;
for (var ui in uW.cm.UNIT_TYPES) {
r = uW.cm.UNIT_TYPES[ui];
if (typemarche == 3 && r != 3) {
ById("DAAnbunit" + r).value = 0;
}
if (parseInt(ById("DAAnbunit" + r).value) > parseInt(ById("DAAdestunit" + r).value)) {
ById("DAAnbunit" + r).style.backgroundColor = "red";
return false;
}
totalunit = totalunit + parseInt(ById("DAAnbunit" + r).value);
ById("DAAnbunit" + r).style.backgroundColor = "";
}
var errMsg = "";
if (errMsg != "") {
t.statutRAA.innerHTML = "<FONT COLOR=#550000>" + errMsg + "</font>";
return;
}
var params = unsafeWindow.Object.clone(unsafeWindow.g_ajaxparams);
params.cid = t.sourceCity.id;
for (var ui in uW.cm.UNIT_TYPES) {
i = uW.cm.UNIT_TYPES[ui];
params["u" + i] = 0;
}
if (typemarche != 3) {
for (var ui in uW.cm.UNIT_TYPES) {
i = uW.cm.UNIT_TYPES[ui];
if (ById("DAAnbunit" + i).value > 0) params["u" + i] = ById("DAAnbunit" + i).value;
}
} else {
params.u3 = ById("DAAnbunit3").value;
ById("DAAnbunit3").value = 0;
}
t.actionRAA.disabled = true;
t.statutRAA.innerHTML = "<i><b>Setting defense ....</b></i>";
new MyAjaxRequest(unsafeWindow.g_ajaxpath + "ajax/cityDefenseSet.php" + unsafeWindow.g_ajaxsuffix, {
method: "post",
parameters: params,
loading: true,
onSuccess: function (transport) {
var t = Tabs.Defend;
var rslt = transport;
if (rslt.ok) {
var unitsarr = [];
for (j in unsafeWindow.unitcost)
unitsarr.push(0);
for (i = 0; i <= unitsarr.length; i++)
if (params["u" + i])
unitsarr[i] = params["u" + i];
if (rslt.updateSeed) {
unsafeWindow.update_seed(rslt.updateSeed)
};
if (rslt.def != null) {
var unitlist = unsafeWindow.seed.defunits["city" + t.sourceCity.id];
uW.jQuery.each(rslt.def, function (key, val) {
var key1 = key.replace("u", "unt");
unitlist[key1] = val
})
}
if (rslt.res != null) {
var unitlist = unsafeWindow.seed.units["city" + t.sourceCity.id];
uW.jQuery.each(rslt.res, function (key, val) {
var key1 = key.replace("u", "unt");
unitlist[key1] = val
})
}
var typeattaque = "Defense set successful";
t.statutRAA.innerHTML = "<center><font size='3px'><b>" + typeattaque + "</b></font></center>";
t.clickRAACitySourceSelect(t.sourceCity);
} else {
t.statutRAA.innerHTML = "<font color=red size='3px'><b>Error setting defense!<b></font>";
if (rslt.msg) {
t.statutRAA.innerHTML += "<br><font color=black size='2px'>" + rslt.msg + "</font>";
} else {
t.statutRAA.innerHTML += "<br>Waiting for 2 seconds!</font>";
//setTimeout(function() { t.clickATTAQUEDo(); }, 2000);
}
}
t.actionRAA.disabled = false;
},
onFailure: function () {
var t = Tabs.Defend;
t.statutRAA.innerHTML = "<font color=red size='3px'><b>Error communicating with server!<b></font>";
t.actionRAA.disabled = false;
}
});
},
SelectFavoris: function () {
var t = Tabs.Defend;
if (t.listeFavoris.value != '') {
var valeur = t.listeFavoris.value;
var x = valeur.substr(0, valeur.lastIndexOf(','));
var y = valeur.substr(valeur.lastIndexOf(',') + 1, valeur.length);
t.destinationCityx.value = x;
t.destinationCityy.value = y;
}
},
chercherFavoris: function () {
var t = Tabs.Defend;
var myA = getMyAlliance();
if (myA[0] != 0) {
var params = unsafeWindow.Object.clone(unsafeWindow.g_ajaxparams);
params.perPage = 100;
params.allianceId = myA[0];
new MyAjaxRequest(unsafeWindow.g_ajaxpath + "ajax/getUserLeaderboard.php" + unsafeWindow.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (rslt) {
// on vide la liste
//t.listeFavoris.innerHTML=null;
if (rslt.ok) {
var z = 0;
var m = "";
for (var i = 0; i < rslt.results.length; i++) {
p = rslt.results[i];
if (p.userId != 0) {
for (var c = 0; c < p.cities.length; c++) {
if (Seed.player.name != p.displayName) {
m += "<option value='" + p.cities[c].xCoord + "," + p.cities[c].yCoord + "'>" + p.displayName + " - City " + (c + 1) + " - " + p.cities[c].xCoord + "," + p.cities[c].yCoord + "</option>";
}
} //fin for cities
} //fin if user
} //fin for resultat
t.listeFavoris.innerHTML = "<option value=''>Selection...</option>" + m;
} // fin
},
onFailure: function (rslt) {
t.listeFavoris.innerHTML = "<option>Error getting info</option>";
},
});
} else {
// Si pas d'alliance !
t.listeFavoris.innerHTML = "<option>Pas d'alliance !</option>";
}
},
SaveCoordsOptions: function (x, y) {
Options.Xrenfort = x;
Options.Yrenfort = y;
saveOptions();
},
Refreshtroops: function () {
if (!ById("DAAstatsource")) return;
var t = Tabs.Defend;
var cityID = 'city' + t.sourceCity.id;
for (var ui in uW.cm.UNIT_TYPES) {
r = uW.cm.UNIT_TYPES[ui];
ById('DAAdestunit' + r).value = parseInt(Seed.units[cityID]['unt' + r]) + parseInt(Seed.defunits[cityID]['unt' + r]);
}
setTimeout(t.Refreshtroops, 1000);
},
clickRAACitySourceSelect: function (city) {
var t = Tabs.Defend;
if (t.sourceCity != city) {
t.sourceCity = city;
}
var m = "";
m = "<table cellspacing=0 cellpadding=0 width=80%><tr><td colspan=2>Total Units Available</td><td colspan=2>Current Defending Units</td><td colspan=2><a href='javascript:void(0)' id=BO_DRSRV_Units title='Clear' >Units to Reserve</td><td></td><td><a href='javascript:void(0)' id=BO_DAZ_Units title='Clear' >Units Selected</a></td></tr>";
var cityID = 'city' + t.sourceCity.id;
for (var ui in uW.cm.UNIT_TYPES) {
r = uW.cm.UNIT_TYPES[ui];
m += '<tr><td align=right><img title="' + unsafeWindow.unitcost['unt' + r][0] + '" height=20 src=http://kabam1-a.akamaihd.net/kingdomsofcamelot/fb/e2/src/img/units/unit_' + r + '_30.jpg></td>\
<td align=left><input style="border:1px solid black;height:16px;font-size:11px;" id="DAAdestunit' + r + '" type=text size=10 readonly value="' + (parseInt(Seed.units[cityID]['unt' + r]) + parseInt(Seed.defunits[cityID]['unt' + r])) + '"> </td>\
<td></td><td ><input style="border:1px solid black;height:16px;font-size:11px;" id="DAAdefunit' + r + '" type=text size=10 readonly value="' + parseInt(Seed.defunits[cityID]['unt' + r]) + '"> \
<td></td><td ><input style="border:1px solid black;height:16px;font-size:11px;" id="DAArsrvunit' + r + '" type=text size=10 value="' + Options.DefendRsrv[r] + '"> \
<input type=button value="--->" id="DAApdestunit' + r + '" style="border:1px solid black;height:16px;font-size:11px;"></td>';
m += '<td align=right><img height=20 title="' + unsafeWindow.unitcost['unt' + r][0] + '" src=http://kabam1-a.akamaihd.net/kingdomsofcamelot/fb/e2/src/img/units/unit_' + r + '_30.jpg></td>\
<td ><input style="border:1px solid black;height:16px;font-size:11px;" id="DAAnbunit' + r + '" type=text size=10 value="' + parseInt(Seed.defunits[cityID]['unt' + r]) + '" ></td></tr>';
}
m += "</table>";
ById("DAAstatsource").innerHTML = m;
for (var ui in uW.cm.UNIT_TYPES) {
r = uW.cm.UNIT_TYPES[ui];
ById("DAApdestunit" + r).addEventListener('click', function () {
var nomcha = this.id.replace("DAApdest", "DAAdest");
var nomcha2 = this.id.replace("DAApdestunit", "DAAnbunit");
var nomcha3 = this.id.replace("DAApdestun", "DAArsrvun");
ById(nomcha2).value = 0;
ById(nomcha2).value = ById(nomcha).value - ById(nomcha3).value;
if (ById(nomcha2).value < 0) ById(nomcha2).value = 0;
}, false);
ById("DAArsrvunit" + r).addEventListener('change', function () {
if (isNaN(this.value)) this.value = 0;
var unt = this.id.replace("DAArsrvunit", "");
Options.DefendRsrv[unt] = this.value;
}, false);
}
ById("BO_DAZ_Units").addEventListener('click', function () {
for (var ui in uW.cm.UNIT_TYPES) ById("DAAnbunit" + uW.cm.UNIT_TYPES[ui]).value = 0;
}, false);
ById("BO_DRSRV_Units").addEventListener('click', function () {
for (var ui in uW.cm.UNIT_TYPES) ById("DAArsrvunit" + uW.cm.UNIT_TYPES[ui]).value = 0;
}, false);
},
}
/*************************************** MARCHES TAB ************************************************/
Tabs.Marches = {
tabOrder: 5,
tabLabel: uW.g_js_strings.commonstr.marching,
cont: null,
displayTimer: null,
displayPopupTimer: null,
curTabBut: null,
curTabName: null,
widescreen: true,
init: function (div) {
var t = Tabs.Marches;
uW.pr56Recall = t.butRecall;
uW.r8x6Home = t.butSendHome;
uW.cancelMarch = t.butcancelmarch;
t.MarchDivP = null;
t.cont = div;
var main = '<TABLE class=ptTab align=center><TR><TD><INPUT class=pbSubtab ID=ptmrchSubN type=submit value="' + uW.g_js_strings.attack_viewimpending_view.incomingtroops + '"></td>';
main += '<TD><INPUT class=pbSubtab ID=ptmrchSubP type=submit value="Incoming Popup"></td>';
main += '<TD><INPUT class=pbSubtab ID=ptmrchSubM type=submit value=' + uW.g_js_strings.commonstr.marching + '></td>';
main += '<TD><INPUT class=pbSubtab ID=ptmrchSubR type=submit value=' + uW.g_js_strings.commonstr.reinforced + '></td></tr></table><HR class=ptThin>';
main += '<TD width = "100px" ; border:none"><a href="https://code.google.com/p/koc-power-tools/wiki/HowToMarches" target="_blank">HELP</a></td></tr>';
main += '<DIV id=ptMarchOutput style="margin-top:10px; background-color:white; height:680px; overflow:scroll;"></div>';
t.cont.innerHTML = main;
t.marchDiv = document.getElementById('ptMarchOutput');
t.marchDivP = document.getElementById('ptMarchOutput');
document.getElementById('ptmrchSubN').addEventListener('click', e_butSubtab, false);
document.getElementById('ptmrchSubP').addEventListener('click', e_butSubtab, false);
document.getElementById('ptmrchSubR').addEventListener('click', e_butSubtab, false);
document.getElementById('ptmrchSubM').addEventListener('click', e_butSubtab, false);
changeSubtab(document.getElementById('ptmrchSub' + Options.curMarchTab));
function e_butSubtab(evt) {
changeSubtab(evt.target);
}
function changeSubtab(but) {
if (but == t.curTabBut)
return;
if (t.curTabBut) {
t.curTabBut.className = 'pbSubtab';
t.curTabBut.disabled = false;
}
t.curTabBut = but;
but.className = 'pbSubtab pbSubtabSel';
but.disabled = true;
t.curTabName = but.id.substr(9);
Options.curMarchTab = t.curTabName;
saveOptions();
t.show();
}
},
hide: function () {
var t = Tabs.Marches;
clearTimeout(t.displayTimer);
},
show: function () {
var t = Tabs.Marches;
clearTimeout(t.displayTimer);
if (t.curTabName == 'R')
t.showReinforcements();
else if (t.curTabName == 'M')
t.showMarches();
else if (t.curTabName == 'P') {
t.showIncoming('popup');
Options.curMarchTab = 'N';
saveOptions();
} else
t.showIncoming('');
},
/*** Incoming SUBTAB ***/
showIncoming: function (target) {
var t = Tabs.Marches;
if (target == 'popup') {
t.marchDivP = new CPopup('ptShowIncoming', 0, 0, 650, 340, true, function () {
clearTimeout(1000);
});
t.marchDivP.getMainDiv().innerHTML = m;
} else
t.marchDiv.innerHTML = null;
var z = '<TABLE id=pdincoming cellSpacing=10 width=100% height=0% class=pbTab>';
for (k in Seed.queue_atkinc) {
if (Seed.queue_atkinc.length != 0) {
var now = unixTime();
var icon, status, FROM, cityname, FROMmight, marchdir, marchtime;
var marchType = parseInt(Seed.queue_atkinc[k]["marchType"]);
if (marchType == 10) marchType = 4; //MARCH_TYPE_DARK_FOREST: 10
var marchStatus = parseInt(Seed.queue_atkinc[k]["marchStatus"]);
for (var i = 0; i < Seed.cities.length; i++) {
if (Seed.cities[i][0] == Seed.queue_atkinc[k]["toCityId"]) cityname = Seed.cities[i][1];
}
if (Seed.queue_atkinc[k]["destinationUnixTime"] < now || marchStatus == 8)
marchdir = "returning";
else
marchdir = "going";
var destinationUnixTime = Seed.queue_atkinc[k]["arrivalTime"] - now;
if (destinationUnixTime > 0)
marchtime = timestr(destinationUnixTime, true)
else
marchtime = 'Arrived';
if (marchType != 3 && marchType != 4) {
var player = Seed.players['u' + Seed.queue_atkinc[k]["fromPlayerId"]]
FROM = player.n;
FROMmight = player.m;
} else {
for (players in Seed.players) {
if (marchType == 3 || marchType == 4) {
if (('u' + Seed.queue_atkinc[k]["pid"]) == players) {
FROM = Seed.players[players]["n"];
FROMmight = Seed.players[players]["m"];
}
}
}
}
if (marchType == 2 && marchStatus == 2) marchType = 102;
switch (marchType) {
case 1:
icon = "https://kabam1-a.akamaihd.net/silooneofcamelot/fb/e2/src/img/transporting.jpg";
status = uW.g_js_strings.commonstr.transport;
break;
case 2:
icon = "https://kabam1-a.akamaihd.net/silooneofcamelot/fb/e2/src/img/reinforce.jpg";
status = uW.g_js_strings.commonstr.reinforce;
break;
case 3:
icon = "https://kabam1-a.akamaihd.net/silooneofcamelot/fb/e2/src/img/scouting.jpg";
status = uW.g_js_strings.commonstr.scout;
break;
case 4:
icon = "https://kabam1-a.akamaihd.net/silooneofcamelot/fb/e2/src/img/attacking.jpg";
status = uW.g_js_strings.commonstr.attack;
break;
case 9:
icon = "https://kabam1-a.akamaihd.net/silooneofcamelot/fb/e2/src/img/attacking.jpg";
status = uW.g_js_strings.commonstr.attack;
break;
case 5:
icon = "https://kabam1-a.akamaihd.net/silooneofcamelot/fb/e2/src/img/transporting.jpg";
status = uW.g_js_strings.commonstr.reassign;
break;
case 100:
icon = "https://kabam1-a.akamaihd.net/silooneofcamelot/fb/e2/src/img/returning.jpg";
status = uW.g_js_strings.commonstr.returning;
break;
case 102:
icon = "https://kabam1-a.akamaihd.net/silooneofcamelot/fb/e2/src/img/reinforce.jpg";
status = uW.g_js_strings.commonstr.encamped;
break;
}
if (status == uW.g_js_strings.commonstr.encamped)
z += '<TD width="10px"><A onclick="r8x6Home(' + Seed.queue_atkinc[k].marchId + ')"><img src=' + icon + '></a></td>';
else
z += '<TD width="10px"><img src=' + icon + '></td>';
z += '<TD width="40px">' + status + '</td>';
z += '<TD>' + cityname + '</td>';
z += '<TD>' + marchtime + '</td>';
z += '<TD>' + uW.g_js_strings.commonstr.from + ': ' + FROM + '</td>';
z += '<TD>' + uW.g_js_strings.commonstr.might + ': ' + addCommas(FROMmight) + '</td>';
if (Seed.queue_atkinc[k]["knt"] != undefined) z += '<TD>' + uW.g_js_strings.commonstr.knight + ': ' + Seed.queue_atkinc[k]["knt"]["cbt"] + '</td>';
if (Seed.queue_atkinc[k]["gold"] > 0) z += '<TD>' + GameIcons.goldImgTiny + addCommas(Seed.queue_atkinc[k]["gold"]) + '</td>';
if (Seed.queue_atkinc[k]["resource1"] > 0) z += '<TD>' + GameIcons.foodImgTiny + addCommas(Seed.queue_atkinc[k]["resource1"]) + '</td>';
if (Seed.queue_atkinc[k]["resource2"] > 0) z += '<TD>' + GameIcons.woodImgTiny + addCommas(Seed.queue_atkinc[k]["resource2"]) + '</td>';
if (Seed.queue_atkinc[k]["resource3"] > 0) z += '<TD>' + GameIcons.stoneImgTiny + addCommas(Seed.queue_atkinc[k]["resource3"]) + '</td>';
if (Seed.queue_atkinc[k]["resource4"] > 0) z += '<TD>' + GameIcons.oreImgTiny + addCommas(Seed.queue_atkinc[k]["resource4"]) + '</td>';
for (var ui in uW.cm.UNIT_TYPES) {
i = uW.cm.UNIT_TYPES[ui];
if (Seed.queue_atkinc[k]["unit" + i + "Count"] > 0 && marchdir == "going") z += '<TD>' + uW.unitcost['unt' + i][0] + ': ' + addCommas(Seed.queue_atkinc[k]["unit" + i + "Count"]) + '</td>';
if (Seed.queue_atkinc[k]["unit" + i + "Return"] > 0 && marchdir == "returning") z += '<TD>' + uW.unitcost['unt' + i][0] + ': ' + addCommas(Seed.queue_atkinc[k]["unit" + i + "Return"]) + '</td>';
}
if (marchType == 3)
if (Object.keys(Seed.queue_atkinc[k]["unts"]).length > 0)
if (Seed.queue_atkinc[k]["unts"]["u3"] > 0) z += '<TD>' + uW.unitcost.unt3[0] + ': ' + addCommas(Seed.queue_atkinc[k]["unts"]["u3"]) + '</td>';
if (marchType == 4) {
if (Object.keys(Seed.queue_atkinc[k]["unts"]).length > 0)
for (var i in uW.cm.UNIT_TYPES) {
ui = uW.cm.UNIT_TYPES[i];
if (Seed.queue_atkinc[k]["unts"]["u" + ui] > 0) z += '<TD>' + uW.unitcost['unt' + ui][0] + ': ' + addCommas(Seed.queue_atkinc[k]["unts"]["u" + ui]) + '</td>';
}
}
z += '</tr>';
}
}
z += '</table>';
if (target == 'popup') {
t.marchDivP.getMainDiv().innerHTML = z;
t.marchDivP.getTopDiv().innerHTML = '<DIV align=center><B>INCOMING!</B></DIV>';
t.marchDivP.show(true);
t.displayPopupTimer = setTimeout(function () {
t.showIncoming('popup');
}, 1000);
t.marchDivP.onClose = function () {
clearTimeout(t.displayPopupTimer);
}
} else {
t.marchDiv.innerHTML = z;
t.displayTimer = setTimeout(function () {
t.showIncoming('');
}, 500);
}
},
/*** MARCHES SUBTAB ***/
showMarches: function () {
var t = Tabs.Marches;
t.marchDiv.innerHTML = null;
var updatemarch = Seed.queue_atkp;
var m = '';
for (var c = 0; c < Seed.cities.length; c++) {
cityname = Seed.cities[c][1];
cityID = 'city' + Seed.cities[c][0];
var raidNumber = 0;
var marchNumber = 0;
var tmpMsg = '';
var raidMarchMsg = '';
var marchMsg = '<div class="ptdivHeader" align=left>Attack/Scout/Reinforce/Transport</div>';
m += '<div class="ptdivHeader" align="left" style="background: #99CCFF;">' + cityname + '</div>';
//raidMarchMsg += '<div class="ptdivHeader" align=left><a id=ptRaidHdr'+cityID+' class=ptdivLink >Raids <img id=ptRaid'+cityID+'Arrow height="10" src="'+GameIcons.RightArrow+'"></a></div>';
raidMarchMsg += '<div id=ptRaid' + cityID + ' align=left class="ptdivHide">';
for (k in Seed.queue_atkp[cityID]) {
if (Seed.queue_atkp[cityID].length != 0) {
var marchID = new String(k);
marchID = marchID.substr(1);
//marchType 1 = transport
//marchType 2 = reinforce
//marchType 3 = scouting
//marchType 4 = attacking
//marchType 9 = barb raid
var marchType = parseInt(Seed.queue_atkp[cityID][k]["marchType"]);
if (marchType == 10) marchType = 4; //MARCH_TYPE_DARK_FOREST: 10
//marchStatus 1 = marching
//marchStatus 2 = encamped
//marchStatus 5 = waiting for report
//marchStatus 8 = returning
//matchStatus 10 = raid stopped
var marchStatus = parseInt(Seed.queue_atkp[cityID][k]["marchStatus"]);
var now = unixTime();
cityTo = null;
var icon, status, type, cityTo, knight, marchtime;
for (var i = 0; i < Seed.cities.length; i++) {
if (Seed.cities[i][2] == Seed.queue_atkp[cityID][k]["toXCoord"] && Seed.cities[i][3] == Seed.queue_atkp[cityID][k]["toYCoord"]) cityTo = Seed.cities[i][1];
}
var destinationUnixTime = Seed.queue_atkp[cityID][k]["destinationUnixTime"] - now;
var returnUnixTime = Seed.queue_atkp[cityID][k]["returnUnixTime"] - now;
var encampedUnixTime = now - Seed.queue_atkp[cityID][k]["destinationUnixTime"];
var restingUnixTime = now - Seed.queue_atkp[cityID][k]["returnUnixTime"];
if (Seed.queue_atkp[cityID][k]["destinationUnixTime"] > now)
marchtime = timestr(destinationUnixTime, true);
else
marchtime = timestr(returnUnixTime, true);
if (Seed.queue_atkp[cityID][k]["destinationUnixTime"] < now && marchType == 2)
marchtime = timestr(encampedUnixTime, true);
if (Seed.queue_atkp[cityID][k]["returnUnixTime"] < now && marchType == 9)
marchtime = timestr(restingUnixTime, true);
if (Seed.queue_atkp[cityID][k]["destinationUnixTime"] < now || marchStatus == 8)
type = "returning";
else
type = "going";
if (Seed.queue_atkp[cityID][k]["destinationUnixTime"] < now) {
if (marchStatus == 8)
marchtime = timestr(returnUnixTime, true);
if (type == "returning" && marchType == 2 && marchStatus != 2)
marchtime = timestr(returnUnixTime, true);
if (type == "returning" && marchType == 4 && marchStatus == 2)
marchtime = timestr(returnUnixTime, true);
if (marchStatus == 2 && marchType != 2)
marchtime = timestr(returnUnixTime, true);
}
if (marchType == 4 && marchStatus == 2)
marchtime = timestr(destinationUnixTime, true);;
var iconType = marchType;
if (type == "returning" && marchType != 2)
iconType = 8;
if (type == "returning" && marchType == 2 && marchStatus == 2)
iconType = 102;
if (type == "returning" && marchType == 2 && marchStatus != 2)
iconType = 8;
if (marchStatus == 10)
iconType = 103;
if (marchStatus == 4)
iconType = 104;
if (marchType == 4 && marchStatus == 2) {
iconType = 102;
marchtime = timestr(encampedUnixTime, true)
}
switch (iconType) {
case 1:
icon = GameIcons.transport;
status = uW.g_js_strings.commonstr.transport;
break;
case 2:
icon = GameIcons.reinforce;
status = uW.g_js_strings.commonstr.reinforce;
break;
case 3:
icon = GameIcons.scouting;
status = uW.g_js_strings.commonstr.scout;
break;
case 4:
icon = GameIcons.attacking;
status = uW.g_js_strings.commonstr.attack;
break;
case 5:
icon = GameIcons.transport;
status = uW.g_js_strings.commonstr.reassign;
break;
case 8:
icon = GameIcons.returning;
status = uW.g_js_strings.commonstr.returning;
break;
case 9:
icon = GameIcons.attacking;
status = uW.g_js_strings.commonstr.raid;
break;
case 102:
icon = GameIcons.reinforce;
status = uW.g_js_strings.commonstr.encamped;
break;
case 103:
icon = GameIcons.raidStopped;
status = uW.g_js_strings.attack_generatequeue.raidstopped;
break;
case 104:
icon = GameIcons.raidResting;
status = uW.g_js_strings.attack_generatequeue.raidresting;
break;
}
if (Seed.queue_atkp[cityID][k]["knightId"] != 0) {
for (i in Seed.knights[cityID]) {
if (i == ("knt" + Seed.queue_atkp[cityID][k]["knightId"])) knight = Seed.knights[cityID][i]["combat"];
}
} else knight = null;
tmpMsg = '';
if (marchType == 9) {
raidNumber++;
raidMarchMsg += '<table style="border-collapse:collapse;padding:3px;"><tr><td width=15>' + raidNumber + '<td>' + icon + '</td><td>' + status + '</td><td>' + marchtime + '</td>';
} else {
marchNumber++;
marchMsg += '<table style="border-collapse:collapse;padding:3px;"><tr><td width=15>' + marchNumber + '<td>';
if (status == "Encamped" && !t.isMyself(Seed.queue_atkp[cityID][k].fromPlayerId))
marchMsg += '<td><A onclick="r8x6Home(' + marchID + ')">' + icon + '</a></td>';
else if (status == 'Encamped' && t.isMyself(Seed.queue_atkp[cityID][k].fromPlayerId))
marchMsg += '<td><A onclick="pr56Recall(' + marchID + ')">' + icon + '</a></td>';
else if (status == 'Returning' || status == "Raid Stopped")
marchMsg += '<td>' + icon + '</td>';
else
marchMsg += '<TD><A onclick="cancelMarch(' + marchID + ')">' + icon + '</a></td>';
marchMsg += '<td>' + status + '</td><td>' + marchtime + '</td>';
}
if (cityTo == null)
tmpMsg += '<td>' + coordLink(Seed.queue_atkp[cityID][k]["toXCoord"], Seed.queue_atkp[cityID][k]["toYCoord"]) + '</td>';
else
tmpMsg += '<td>' + cityTo + '</td>';
if (knight != null)
tmpMsg += '<td>' + uW.g_js_strings.commonstr.knight + ': ' + knight + '</td>';
for (var ui in uW.cm.UNIT_TYPES) {
i = uW.cm.UNIT_TYPES[ui];
if (Seed.queue_atkp[cityID][k]["unit" + i + "Count"] > 0 && type == "going")
tmpMsg += '<td>' + uW.unitcost['unt' + i][0] + ': ' + addCommas(Seed.queue_atkp[cityID][k]["unit" + i + "Count"]) + '</td>';
if (Seed.queue_atkp[cityID][k]["unit" + i + "Return"] > 0 && type == "returning")
tmpMsg += '<td>' + uW.unitcost['unt' + i][0] + ': ' + addCommas(Seed.queue_atkp[cityID][k]["unit" + i + "Return"]) + '</td>';
}
if (Seed.queue_atkp[cityID][k]["toTileType"] == 11) tmpMsg += '<TD>Lake Lvl: ' + Seed.queue_atkp[cityID][k]["toTileLevel"] + '</td>';
else if (Seed.queue_atkp[cityID][k]["toTileType"] == 20) tmpMsg += '<TD>Grassland Lvl: ' + Seed.queue_atkp[cityID][k]["toTileLevel"] + '</td>';
else if (Seed.queue_atkp[cityID][k]["toTileType"] == 30) tmpMsg += '<TD>Hills Lvl: ' + Seed.queue_atkp[cityID][k]["toTileLevel"] + '</td>';
else if (Seed.queue_atkp[cityID][k]["toTileType"] == 40) tmpMsg += '<TD>Mountain Lvl: ' + Seed.queue_atkp[cityID][k]["toTileLevel"] + '</td>';
else if (Seed.queue_atkp[cityID][k]["toTileType"] == 50) tmpMsg += '<TD>Plain Lvl: ' + Seed.queue_atkp[cityID][k]["toTileLevel"] + '</td>';
else if (Seed.queue_atkp[cityID][k]["toCityId"] == 0) tmpMsg += '<TD>' + uW.g_js_strings.commonstr.barbariancamp + ' ' + uW.g_js_strings.commonstr.lvl + ': ' + Seed.queue_atkp[cityID][k]["toTileLevel"] + '</td>';
tmpMsg += '<td>'
if (Seed.queue_atkp[cityID][k]["gold"] > 0) tmpMsg += GameIcons.goldImgTiny + addCommas(Seed.queue_atkp[cityID][k]["gold"]);
if (Seed.queue_atkp[cityID][k]["resource1"] > 0) tmpMsg += GameIcons.foodImgTiny + addCommas(Seed.queue_atkp[cityID][k]["resource1"]);
if (Seed.queue_atkp[cityID][k]["resource2"] > 0) tmpMsg += GameIcons.woodImgTiny + addCommas(Seed.queue_atkp[cityID][k]["resource2"]);
if (Seed.queue_atkp[cityID][k]["resource3"] > 0) tmpMsg += GameIcons.stoneImgTiny + addCommas(Seed.queue_atkp[cityID][k]["resource3"]);
if (Seed.queue_atkp[cityID][k]["resource4"] > 0) tmpMsg += GameIcons.oreImgTiny + addCommas(Seed.queue_atkp[cityID][k]["resource4"]);
tmpMsg += '</td></tr></table>';
if (marchType == 9) {
raidMarchMsg += tmpMsg;
} else {
marchMsg += tmpMsg;
}
}
}
m += '<div class="ptdivHeader" align=left><a id=ptRaidHdr' + cityID + ' class=ptdivLink >Raids (';
m += raidNumber + ') <img id=ptRaid' + cityID + 'Arrow height="10" src="' + GameIcons.RightArrow + '"></a></div>'
m += raidMarchMsg + '</div>';
m += marchMsg;
}
t.marchDiv.innerHTML = m;
for (var c = 0; c < Seed.cities.length; c++) {
cityID = 'city' + Seed.cities[c][0];
(function (cityID, c) {
document.getElementById('ptRaidHdr' + cityID).addEventListener('click', function () {
ToggleDivDisplay(500, 500, "ptRaid" + cityID);
Options.marchRaidState[c] = !(Options.marchRaidState[c]);
saveOptions();
}, false);
if (Options.marchRaidState[c]) {
ToggleDivDisplay(500, 500, "ptRaid" + cityID);
}
})(cityID, c);
}
t.displayTimer = setTimeout(t.showMarches, 500);
},
isMyself: function (userID) {
if (!Seed.players["u" + userID])
return false;
if (Seed.players["u" + userID].n == Seed.player.name)
return true;
else
return false;
return false;
},
butcancelmarch: function (marchID) {
var t = Tabs.Marches;
var params = uW.Object.clone(uW.g_ajaxparams);
params.mid = marchID;
for (var c = 0; c < Cities.numCities; c++) {
var que = Seed.queue_atkp['city' + Cities.cities[c].id];
if (matTypeof(que) == 'array')
continue;
for (k in que) {
if (k == 'm' + marchID) {
params.cid = Cities.cities[c].id;
break;
}
}
}
new AjaxRequest(uW.g_ajaxpath + "ajax/cancelMarch.php" + uW.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (rslt) {
var march = uW.seed.queue_atkp["city" + params.cid]["m" + params.mid];
march.marchStatus = 8;
var marchtime = parseInt(march.returnUnixTime) - parseInt(march.destinationUnixTime);
var ut = unixTime();
if (uW.seed.playerEffects.returnExpire > unixTime())
marchtime *= 0.5
march.returnUnixTime = ut + marchtime;
march.destinationUnixTime = ut;
march.marchUnixTime = ut - marchtime;
if (rslt.updateSeed) {
update_seed(rslt.updateSeed)
}
if (notify != null)
notify(rslt.errorMsg);
},
onFailure: function () {
if (notify != null)
notify(rslt.errorMsg);
},
});
},
/*** REINFORCEMENTS SUBTAB ***/
showReinforcements: function () {
var rownum = 0;
var names = ['Supply', 'Mil', 'Scout', 'Pike', 'Sword', 'Archer', 'Cav', 'Heavy', 'Wagon', 'Balli', 'Ram', 'Cat', 'BloodT', 'Exec', 'SWall', 'FlArcher'];
var t = Tabs.Marches;
clearTimeout(t.displayTimer);
// TODO FIX: Troops show as encamped even if they are here yet (check destinationUnixTime)
// - Added 5/9/2013
/***
var s = 'OUTGOING:<BR>';
for (var c=0; c<Cities.numCities; c++){
var que = Seed.queue_atkp['city'+ Cities.cities[c].id];
if (matTypeof(que)=='array')
continue;
s += 'City: '+ Cities.cities[c].name + ': <BR>';
for (k in que){
march = que[k];
var mid = k.substr(1);
s += mid +' DEST: '+ march.toXCoord +','+ march.toYCoord + ' <INPUT type=submit value="Recall" onclick="pr56Recall('+ mid +')"><BR>'
}
}
t.cont.innerHTML = s;
t.displayTimer = setTimeout (t.show, 10000);
return;
***/
function clickShowRemaining() {
checkBox = document.getElementById('idCheck2');
if (checkBox.checked)
Options.encRemaining = false;
else
Options.encRemaining = true;
t.show();
}
enc = {};
numSlots = 0;
if (matTypeof(Seed.queue_atkinc) != 'array') {
for (k in Seed.queue_atkinc) {
march = Seed.queue_atkinc[k];
var now = unixTime();
if (march["destinationUnixTime"] < now)
if (march.marchType == 2) {
++numSlots;
city = march.toCityId;
from = march.fromPlayerId;
if (!enc[city])
enc[city] = {};
if (!enc[city][from])
enc[city][from] = [];
s = {};
s.knight = parseInt(march.knightCombat);
s.marchId = k.substr(1);
s.troops = [];
for (var ui in uW.cm.UNIT_TYPES) {
i = uW.cm.UNIT_TYPES[ui];
if (Options.encRemaining)
s.troops[i] = parseInt(march['unit' + i + 'Return']);
else
s.troops[i] = parseInt(march['unit' + i + 'Count']);
}
enc[city][from].push(s);
}
}
}
//logit ("enc: "+ inspect (enc, 6, 1));
s = '<div class=ptstat>Showing troops encamped at each of your embassies.</div><BR>';
if (numSlots == 0) {
s += '<BR><CENTER><B>No troops encamped.</b></center>';
} else {
s += '<STYLE> .tot{background:#f0e0f8;} .city{background:#ffffaa;}</style>';
s += '<TABLE cellspacing=0 width=100%><TR align=right><TD align=left width=16%><B>Player (knight)</b></td>';
for (k = 0; k < names.length; k++)
s += '<TD width=7%><B>' + names[k] + '</b></td>';
s += '</tr>';
tot = [];
for (var ui in uW.cm.UNIT_TYPES) {
i = uW.cm.UNIT_TYPES[ui];
tot[i] = 0;
}
for (c in Cities.cities) {
dest = Cities.cities[c].id;
if (enc[dest]) {
s += '<TR><TD class=xtab><BR></td></tr>';
s += '<TR><TD class="city" colspan=13 align=center><B>' + Cities.cities[c].name + '</b></td></tr>';
for (p in enc[dest]) {
try {
player = Seed.players['u' + p].n;
} catch (err) {
player = '???';
}
for (m = 0; m < enc[dest][p].length; m++) {
var march = enc[dest][p][m];
knight = '';
if (march.knight > 0)
knight = ' (' + march.knight + ')';
// TODO: Only allow 'send home' if troops are here now (marchStatus = ?)
s += '<TR align=right><TD align=left>' + player + knight + ' <A><SPAN onclick="r8x6Home(' + march.marchId + ')">X</span></a></td>'
for (var ui in uW.cm.UNIT_TYPES) {
i = uW.cm.UNIT_TYPES[ui];
s += '<TD>' + march.troops[i] + '</td>';
tot[i] += march.troops[i];
}
s += '</tr>';
}
}
}
}
s += '<TR><TD colspan=17><BR><BR></td></tr><TR align=right><TD class="tot" align=left><B>TOTALS:</b></td>';
for (var ui in uW.cm.UNIT_TYPES) {
i = uW.cm.UNIT_TYPES[ui];
s += '<TD class="tot">' + tot[i] + '</td>';
}
s += '</tr></table>';
}
s += '<BR><BR><INPUT type=CHECKBOX id=idCheck2 ' + (Options.encRemaining ? '' : ' CHECKED ') + '> Show Original Troops';
s += '<BR><BR><DIV style="font-size: 10px">NOTE: You will need to refresh KofC to show new encampments or remaining troops after a battle.</div>';
t.marchDiv.innerHTML = s;
checkBox = document.getElementById('idCheck2');
checkBox.addEventListener('click', clickShowRemaining, false);
t.displayTimer = setTimeout(t.show, 10000);
},
butRecall: function (marchId) {
var t = Tabs.Marches;
logit("CANCELLING: " + marchId);
t.ajaxRecall(marchId);
},
butSendHome: function (marchId) {
var t = Tabs.Marches;
//alert("Sent Home march#"+marchId);
logit("SEND HOME: " + marchId);
t.ajaxSendHome(marchId, function (r) {
t.show();
logit("AJAX RESULT: " + r)
});
},
/***
// not working, returns 'invalid parameters' :(
ajaxCancelMarch : function (marchId, notify){
var params = uW.Object.clone(uW.g_ajaxparams);
logit ('ajaxCancelMarch: '+ marchId);
for (var c=0; c<Cities.numCities; c++){
var que = Seed.queue_atkp['city'+ Cities.cities[c].id];
if (matTypeof(que)=='array')
continue;
for (k in que){
if (k == 'm'+marchId){
params.cid = Cities.cities[c].id;
params.cityId = Cities.cities[c].id;
break;
}
}
}
params.marchId = marchId;
params.mid = 'm'+ marchId;
params.requestType = "CANCEL_MARCH";
new MyAjaxRequest(uW.g_ajaxpath + "ajax/cancelMarch.php" + uW.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (rslt) {
if (notify != null)
notify(rslt.errorMsg);
},
onFailure: function () {
if (notify != null)
notify(rslt.errorMsg);
},
});
},
***/
ajaxSendHome: function (marchId, notify) {
logit('ajaxSendHome: ' + marchId);
var march = Seed.queue_atkinc['m' + marchId];
if (march == null) {
notify('March not found!');
return;
}
var params = uW.Object.clone(uW.g_ajaxparams);
params.mid = marchId;
params.cid = march.toCityId;
params.fromUid = march.fromPlayerId;
params.fromCid = march.fromCityId;
new MyAjaxRequest(uW.g_ajaxpath + "ajax/kickoutReinforcements.php" + uW.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (rslt) {
if (rslt.ok) {
var upkeep = 0;
for (var ui in uW.cm.UNIT_TYPES) {
i = uW.cm.UNIT_TYPES[ui];
upkeep += parseInt(march["unit" + i + "Return"]) * parseInt(uW.unitupkeeps[i])
}
uW.seed.resources["city" + march.toCityId].rec1[3] -= upkeep;
if (parseInt(march.fromPlayerId) == parseInt(uW.tvuid)) {
//logit ('FROM ME!');
var mymarch = uW.seed.queue_atkp["city" + march.fromCityId]["m" + marchId];
var marchtime = Math.abs(parseInt(mymarch.destinationUnixTime) - parseInt(mymarch.eventUnixTime));
mymarch.returnUnixTime = unixTime() + marchtime;
mymarch.marchStatus = 8;
}
delete uW.seed.queue_atkinc["m" + marchId];
if (notify != null)
notify(null);
} else {
if (notify != null)
notify(rslt.errorMsg);
}
},
onFailure: function () {
if (notify != null)
notify(rslt.errorMsg);
},
});
},
/*****
for (var ui in uW.cm.UNIT_TYPES) {
b = uW.cm.UNIT_TYPES[ui];
g += parseInt(e["unit" + b + "Return"]) * parseInt(unitupkeeps[b])
}
function kickout_allies(mid, cid, fromUid, fromCid, upkeep) {
var params = Object.clone(g_ajaxparams);
params.mid = mid;
params.cid = cid;
params.fromUid = fromUid;
params.fromCid = fromCid;
new Ajax.Request(g_ajaxpath + "ajax/kickoutReinforcements.php" + g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function(transport) {
var rslt = eval("(" + transport.responseText + ")");
if (rslt.ok) {
Modal.showAlert(g_js_strings.kickout_allies.troopshome);
seed.resources["city" + currentcityid].rec1[3] = parseInt(seed.resources["city" + currentcityid].rec1[3]) - upkeep;
Modal.hideModalAll();
if (parseInt(fromUid) == parseInt(tvuid)) {
var curmarch = seed.queue_atkp["city" + fromCid]["m" + mid];
var marchtime = Math.abs(parseInt(curmarch.destinationUnixTime) - parseInt(curmarch.eventUnixTime));
curmarch.returnUnixTime = unixtime() + marchtime;
curmarch.marchStatus = 8
}
delete seed.queue_atkinc["m" + mid]
} else {
Modal.showAlert(printLocalError((rslt.error_code || null), (rslt.msg || null), (rslt.feedback || null)))
}
},
onFailure: function() {}
})
};
***/
ajaxRecall: function (marchId, notify) {
var params = uW.Object.clone(uW.g_ajaxparams);
for (var c = 0; c < Cities.numCities; c++) {
var que = Seed.queue_atkp['city' + Cities.cities[c].id];
if (matTypeof(que) == 'array')
continue;
for (k in que) {
if (k == 'm' + marchId) {
params.cid = Cities.cities[c].id;
break;
}
}
}
params.mid = marchId;
new MyAjaxRequest(uW.g_ajaxpath + "ajax/undefend.php" + uW.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (rslt) {
var march = uW.seed.queue_atkp["city" + params.cid]["m" + params.mid];
march.marchStatus = 8;
var marchtime = parseInt(march.returnUnixTime) - parseInt(march.destinationUnixTime);
var ut = unixTime();
if (uW.seed.playerEffects.returnExpire > unixTime())
marchtime *= 0.5
march.returnUnixTime = ut + marchtime;
march.destinationUnixTime = ut;
march.marchUnixTime = ut - marchtime;
if (notify != null)
notify(rslt.errorMsg);
},
onFailure: function () {
if (notify != null)
notify(rslt.errorMsg);
},
});
},
};
/*******************************************/
var PageNavigator = {
modalMessagesFunc: null,
ctrlPaginationOld: null,
loadPage_paginationOld: null,
cpPager: null,
init: function () {
var t = PageNavigator;
t.modalMessagesFunc = new CalterUwFunc('modal_messages', [
[/pageNavigatorModel\s*=.*?;/i, 'var pager=new ptPagerHook(0,5);pageNavigatorModel=pager;'],
[/pageNavigatorView\s*=.*?;/i, 'pageNavigatorView=pager;'],
[/pageNavigatorController\s*=.*?;/i, 'pageNavigatorController=pager;']
]);
uW.ptPagerHook = t.Cpager;
t.ctrlPaginationOld = uW.ctrlPagination;
t.loadPage_paginationOld = uW.loadPage_pagination;
t.cpPager = new t.Cpager(0, 0);
t.cpPager.oldStyle = true;
t.enable(Options.fixPageNav);
},
// called on 'back' ...
loadPage_pagination: function (divId, currentPage, callbackFunction, totalPages) {
var t = PageNavigator;
var curPage = parseInt(currentPage);
//logit ('loadPage_pagination: '+ divId +','+ t.cpPager.divId +','+ currentPage +','+ callbackFunction +','+ totalPages +','+ t.cpPager.getCurrentPage());
if (divId == t.cpPager.divId) // if 'old' style ...
unsafeWindow[callbackFunction](t.cpPager.getCurrentPage());
else
unsafeWindow[callbackFunction](currentPage);
},
ctrlPagination: function (navDivId, numPages, notify, curPage) {
var t = PageNavigator;
//logit ('ctrlPagination (divid:'+ navDivId +')');
if (document.getElementById(navDivId).firstChild == null)
document.getElementById(navDivId).appendChild(t.cpPager.getHtmlElement());
t.cpPager.setPageCount(numPages);
t.cpPager.divId = navDivId;
if (!curPage)
curPage = 1;
t.cpPager.gotoPage(curPage);
t.cpPager.onClick = unsafeWindow[notify];
uW.pageNavigatorView = t.cpPager;
},
enable: function (tf) {
var t = PageNavigator;
t.modalMessagesFunc.setEnable(tf);
if (tf) {
uW.ctrlPagination = t.ctrlPagination;
uW.loadPage_pagination = t.loadPage_pagination;
} else {
uW.ctrlPagination = t.ctrlPaginationOld;
uW.loadPage_pagination = t.loadPage_paginationOld;
}
},
isAvailable: function () {
var t = PageNavigator;
return t.modalMessagesFunc.isAvailable();
},
Cpager: function (a, b) {
// public function protos ...
this.getHtmlElement = getHtmlElement;
this.setPageCount = setPageCount;
this.getPageCount = getPageCount;
this.getCurrentPage = getCurrentPage;
this.gotoPage = gotoPage;
this.e_but = e_but;
this.e_inp = e_inp;
//
var t = this;
this.onClick = null;
this.numPages = b;
this.curPage = a;
this.oldStyle = false;
function getHtmlElement() {
function aButton(msg, evtPage) {
return '<A class=ptPageNav onclick="pageNavigatorView.e_but(\'' + evtPage + '\')"><SPAN class=ptPageNav>' + msg + '</span></a>';
}
var div = document.createElement('div');
div.id = 'ptPageNavBar';
div.innerHTML = '<STYLE>table.ptPageNav tr td {border:none; text-align:center; padding:0px 1px;}\
span.ptPageNav {font-size:12px; background:inherit; line-height:135%}\
A.ptPageNav {background-color:#44e; color:#ff4; display:block; border:1px solid #666666; height:18px; width:18px;}\
A.ptPageNav:hover {background-color:#66f;}\
A.ptPageNav:active {background-color:#186}\
</style>\
<TABLE class=ptPageNav><TR valign=middle>\
<TD style="margin-right:15px">' + aButton('<SPAN style="padding-right:0.8em; letter-spacing:-0.99em;">▏▏◄</span>', 'F') + '</td>\
<TD>' + aButton('◄', '-') + '</td>\
<TD>' + aButton('►', '+') + '</td>\
<TD style="margin-right:15px">' + aButton('<SPAN style="padding-right:1.05em; letter-spacing:-0.99em;">►▕▕</span>', 'L') + '</td>\
<TD width=20></td><TD>Page <INPUT id=ptPagerPageNum onChange="pageNavigatorView.e_inp()" type=text size=1> OF <span id=ptPagerNumPages>?</span></td>\
</tr></table>';
var mml = document.getElementById('modal_msg_list');
if (mml != null)
mml.style.minHeight = '400px';
return div;
}
function getPageCount() { // koc needs for 'back'
return t.numPages;
}
function getCurrentPage() { // koc needs for 'back'
return t.curPage;
}
function setPageCount(c) {
t.numPages = c;
document.getElementById('ptPagerNumPages').innerHTML = c;
var mml = document.getElementById('modal_msg_list');
if (mml != null) {
if (document.getElementById('modal_msg_tabs_report').className.indexOf('selected') >= 0)
mml.style.minHeight = '460px';
else
mml.style.minHeight = '400px';
}
}
function gotoPage(p) {
t.curPage = parseIntZero(p);
document.getElementById('ptPagerPageNum').value = t.curPage;
}
function e_but(p) {
if (p == 'F' && t.curPage != 1)
loadPage(1);
else if (p == '-' && t.curPage > 1)
loadPage(t.curPage - 1);
else if (p == '+' && t.curPage < t.numPages)
loadPage(t.curPage + 1);
else if (p == 'L' && t.curPage != t.numPages)
loadPage(t.numPages);
function loadPage(p) {
if (t.oldStyle)
t.gotoPage(p);
t.onClick(p);
}
}
function e_inp(p) {
var pageNum = parseIntZero(document.getElementById('ptPagerPageNum').value);
t.onClick(pageNum);
}
},
}
function addScript(scriptText) {
var scr = document.createElement('script');
scr.innerHTML = scriptText;
document.body.appendChild(scr);
// setTimeout ( function (){document.body.removeChild(scr);}, 500);
}
addScript('uwuwuwFunc = function (text){ eval (text); }');
/************* Updater code *************/
// Function for displaying a confirmation message modal popup similar to the default javascript confirm() function
// but with the advantage being that it won't halt all other javascript being executed on the page.
// Original Author: Thomas Chapin (April 6, 2011)
function display_confirm(confirm_msg, ok_function, cancel_function) {
if (!confirm_msg) {
confirm_msg = "";
}
var container_div = document.getElementById('modal_js_confirm');
var div;
if (!container_div) {
container_div = document.createElement('div');
container_div.id = 'modal_js_confirm';
container_div.style.position = 'absolute';
container_div.style.top = '0px';
container_div.style.left = '0px';
container_div.style.width = '100%';
container_div.style.height = '1px';
container_div.style.overflow = 'visible';
container_div.style.zIndex = 100000;
div = document.createElement('div');
div.id = 'modal_js_confirm_contents';
div.style.zIndex = 100000;
div.style.backgroundColor = '#eee';
div.style.fontFamily = '"lucida grande",tahoma,verdana,arial,sans-serif';
div.style.fontSize = '11px';
div.style.textAlign = 'center';
div.style.color = '#333333';
div.style.border = '2px outset #666';
div.style.padding = '10px';
div.style.position = 'relative';
div.style.width = '300px';
div.style.height = '100px';
div.style.margin = '300px auto 0px auto';
div.style.display = 'block';
container_div.appendChild(div);
document.body.appendChild(container_div);
div.innerHTML = '<div style="text-align:center"><div>' + confirm_msg + '</div><br/><div>Press OK to continue.</div><br><button id="modal_js_confirm_ok_button">OK</button> <button id="modal_js_confirm_cancel_button">Cancel</button></div>';
var ok_button = document.getElementById('modal_js_confirm_ok_button');
ok_button.addEventListener('click', function () {
if (ok_function && typeof (ok_function) == "function") {
ok_function();
}
container_div.parentNode.removeChild(container_div);
}, false);
var cancel_button = document.getElementById('modal_js_confirm_cancel_button');
cancel_button.addEventListener('click', function () {
if (cancel_function && typeof (cancel_function) == "function") {
cancel_function();
}
container_div.parentNode.removeChild(container_div);
}, false);
}
}
// The following code is released under public domain.
var AutoUpdater_116541 = {
id: 116541,
days: 1,
name: "KOC Power Tools",
version: Version,
beta: GlobalOptions.ptupdatebeta,
betaUrl: 'https://koc-power-tools.googlecode.com/svn/trunk/koc_power_tools.user.js',
time: new Date().getTime(),
call: function (response, secure) {
GM_xmlhttpRequest({
method: 'GET',
url: this.beta ? this.betaUrl : 'http' + (secure ? 's' : '') + '://userscripts.org/scripts/source/' + this.id + '.meta.js',
onload: function (xpr) {
AutoUpdater_116541.compare(xpr, response);
},
onerror: function (xpr) {
if (secure) AutoUpdater_116541.call(response, false);
}
});
},
enable: function () {
GM_registerMenuCommand("Enable " + this.name + " updates", function () {
GM_setValue('updated_116541', new Date().getTime() + '');
AutoUpdater_116541.call(true, true)
});
},
compareVersion: function (r_version, l_version) {
var r_parts = r_version.split(''),
l_parts = l_version.split(''),
r_len = r_parts.length,
l_len = l_parts.length,
r = l = 0;
for (var i = 0, len = (r_len > l_len ? r_len : l_len); i < len && r == l; ++i) {
r = +(r_parts[i] || '0');
l = +(l_parts[i] || '0');
}
return (r !== l) ? r > l : false;
},
compare: function (xpr, response) {
this.xversion = /\/\/\s*@version\s+(.+)\s*\n/i.exec(xpr.responseText);
this.xname = /\/\/\s*@name\s+(.+)\s*\n/i.exec(xpr.responseText);
if ((this.xversion) && (this.xname[1] == this.name)) {
this.xversion = this.xversion[1];
this.xname = this.xname[1];
} else {
if ((xpr.responseText.match("the page you requested doesn't exist")) || (this.xname[1] != this.name)) {
//GM_setValue('updated_116541', 'off');
}
return false;
}
var updated = this.compareVersion(this.xversion, this.version);
if (updated) {
display_confirm('A new version of ' + this.xname + ' is available.\nDo you wish to install the latest version?',
// Ok
function () {
try {
location.href = this.beta ? this.betaUrl : 'https://userscripts.org/scripts/source/' + this.id + '.user.js';
} catch (e) {}
},
// Cancel
function () {
if (AutoUpdater_116541.xversion) {
if (confirm('Do you want to turn off auto updating for this script?')) {
//GM_setValue('updated_116541', 'off');
GlobalOptions.ptupdate = false;
GM_setValue('Options_??', JSON2.stringify(GlobalOptions));
AutoUpdater_116541.enable();
alert('Automatic updates can be re-enabled for this script from the User Script Commands submenu.');
}
}
}
);
} else if (response) {
alert('No updates available for ' + this.name);
}
},
check: function (tf) {
if (!tf) {
this.enable();
} else {
if (+this.time > (+GM_getValue('updated_116541', 0) + 1000 * 60 * 60 * 24 * this.days)) {
GM_setValue('updated_116541', this.time + '');
this.call(false, true);
}
GM_registerMenuCommand("Check " + this.name + " for updates", function () {
GM_setValue('updated_116541', new Date().getTime() + '');
AutoUpdater_116541.call(true, true)
});
}
}
};
if (typeof (GM_xmlhttpRequest) !== 'undefined' && typeof (GM_updatingEnabled) === 'undefined') { // has an updater?
try {
if (unsafeWindow.frameElement === null) {
AutoUpdater_116541.check(GlobalOptions.ptupdate);
}
} catch (e) {
AutoUpdater_116541.check(GlobalOptions.ptupdate);
}
}
/********* End updater code *************/
//****************************
//This is a new implementation of the CalterUwFunc class to modify a function of the 'unsafewWindow' object.
//For reverse compatibility this implementation operates like the original, but multiple CalterUwFunc objects can be created for the same function.
//Each CalterUwFunc can be enabled or diabled independently. (Of course, the repalcement strings must be compatibile with each other to work
//simulataneously).
//The implementation uses a worker class CalterFuncModifier. One and only one CalterFuncModifier is created for each uw function modified.
//CalterFuncModifier allows multiple modifier string pairs to be applied. For individual control of specific mods, access the 'modIndex'
//member to determine the index of the first mod and then directly call the operations of the 'funcModifier' member.
//This implementation creates/uses a registry of CalterFuncModifier's that is added to the unsafeWindow object so that changes
//to the same function in different scripts is possible.
//****************************
var CalterUwFunc = function (funcName, findReplace) {
this.isAvailable = isAvailable;
this.setEnable = setEnable;
this.funcName = funcName;
this.funcModifier = null;
this.modIndex = 0;
this.numberMods = 0;
// find an existing CalterUwFunc if it already exists
if (!unsafeWindow.calterRegistry) unsafeWindow.calterRegistry = {};
var calterF = null;
if (unsafeWindow.calterRegistry[funcName]) {
// use the existing function modifier
calterF = unsafeWindow.calterRegistry[funcName];
for (i = 0; i < findReplace.length; i++) {
calterF.addModifier(findReplace[i]);
}
} else {
// create and register the new calter
calterF = new CalterFuncModifier(funcName, findReplace);
unsafeWindow.calterRegistry[funcName] = calterF;
}
this.funcModifier = calterF;
if (findReplace != null) {
this.numberMods = findReplace.length;
this.modIndex = this.funcModifier.numModifiers() - this.numberMods;
}
function isAvailable() {
// check if any of the replace strings matched the original function
var avail = false;
for (i = this.modIndex; i < this.modIndex + this.numberMods; i++) {
if (this.funcModifier.testModifier(i)) avail = true;
}
return avail;
}
function setEnable(tf) {
this.funcModifier.enableModifier(this.modIndex, tf, this.numberMods);
}
}
var CalterFuncModifier = function (funcName, findReplace) {
// (second argument is now optional )
this.applyModifiers = applyModifiers;
this.addModifier = addModifier;
this.enableModifier = enableModifier;
this.testModifier = testModifier;
this.modEnabled = modEnabled;
this.numModifiers = numModifiers;
this.funcName = funcName;
this.funcOld = null;
this.funcOldString = null;
this.funcNew = null;
this.modifiers = [];
this.modsActive = [];
try {
var x = this.funcName.split('.');
var f = unsafeWindow;
for (var i = 0; i < x.length; i++)
f = f[x[i]];
ft = f.toString();
this.funcOld = f;
this.funcOldString = ft.replace('function ' + this.funcName, 'function');
if (findReplace) {
this.modifiers = findReplace;
this.modsActive = new Array(findReplace.length);
for (var i = 0; i < findReplace.length; i++) {
this.modsActive[i] = false;
}
}
} catch (err) {
logit("CalterFuncModifier " + this.funcName + " " + err);
}
// test if this modifier works on the original function.
// true = match found / replace possible
// false = does not match
function testModifier(modNumber) {
x = this.funcOldString.replace(this.modifiers[modNumber][0], this.modifiers[modNumber][1]);
if (x != this.funcOldString) {
return true;
}
return false;
}
// use the active modifiers to create/apply a new function
function applyModifiers() {
try {
var rt = this.funcOldString;
var active = false;
for (var i = 0; i < this.modifiers.length; i++) {
if (!this.modsActive[i]) continue;
x = rt.replace(this.modifiers[i][0], this.modifiers[i][1]);
if (x == rt) // if not found
{
// print out an error message when the match fails.
// These messages get lost on a refresh, so wait a few seconds to put it in the error log.
setTimeout(function (fname, repStr, ftstr) {
return function () {
logit("Unable to replace string in function " + fname);
logit("Replacment string:" + repStr);
logit("Function listing: " + ftstr);
return;
}
}(this.funcName, this.modifiers[i][0], ft), 3000);
} else {}
rt = x;
active = true;
}
this.funcNew = rt;
if (active) {
// apply the new function
uW.uwuwuwFunc(this.funcName + ' = ' + this.funcNew);
} else {
// set to the original function
var x1 = this.funcName.split('.');
var f1 = unsafeWindow;
for (var i = 0; i < x1.length - 1; i++)
f1 = f1[x1[i]];
f1[x1[x1.length - 1]] = this.funcOld;
}
} catch (err) {
logit("CalterFuncModifier " + this.funcName + " " + err);
}
}
// add additional modifiers. The index of the modifier is returned so the caller can enable/disable it specificially
function addModifier(fr) {
this.modifiers.push(fr);
this.modsActive.push(false);
// return the index of the newly added modifier
return this.modifiers.length - 1;
}
// turn on/off some of the modifiers.
// 'len' allows setting consectutive modifiers to the same value.
// If len is null, 1 is used
function enableModifier(modNumber, value, len) {
if (len == null) len = 1;
for (i = modNumber; i < modNumber + len; i++) {
if (i < this.modsActive.length) {
this.modsActive[i] = value;
}
}
this.applyModifiers();
}
function modEnabled(modNumber) {
if (modNumber < this.modsActive.length)
return this.modsActive[modNumber];
}
function numModifiers() {
return this.modifiers.length;
}
};
function ShowExtraInfo() {
alert('ineter');
content = document.getElementById('mod_citylist').innerHTML
content += "O";
document.getElementById('mod_citylist').innerHTML = content;
}
var MarchUnitsFix = {
init: function () {
var t = MarchUnitsFix;
t.fixrallymarchsize = new CalterUwFunc('modal_attack_update_unt_max', [
['\}\)\)\;', '})*(1 + Math.min(cm.ThroneController.effectBonus(66),150)/100)-0.001);']
]);
t.fixrallymarchsize.setEnable(Options.fixMarchUnits);
},
setEnable: function (tf) {
var t = MarchUnitsFix;
t.fixrallymarchsize.setEnable(tf);
},
isAvailable: function () {
var t = MarchUnitsFix;
return t.fixrallymarchsize.isAvailable();
},
}
var LoadCapFix = {
init: function () {
var t = LoadCapFix;
// t.capLoadEffect = new CalterUwFunc ('cm.MarchModal.updateTroopResource', [[/\$\("#modal/ig, 'jQuery("#modal'] , [/1\s*\+\s*loadBoost\)/i, '1 + Math.min(loadBoost,6.25+loadEffectBoost+techLoadBoost)); for(var sacIndex = 0; sacIndex < seed.queue_sacr["city" + currentcityid].length; sacIndex ++ ) if(seed.queue_sacr["city" + currentcityid][sacIndex]["unitType"] == untid) load *= seed.queue_sacr["city" + currentcityid][sacIndex]["multiplier"][0]; load=Math.floor(load-1);'] ]);
if (FFVersion.substring(0, 4) > 16)
t.capLoadEffect = new CalterUwFunc('cm.MarchModal.updateTroopResource', [
[/\$\("#modal/ig, 'jQuery("#modal'],
[/if\(jQuery/i, 'loadBoost = Math.min(loadBoost,6.25+techLoadBoost); for(var sacIndex = 0; sacIndex < seed.queue_sacr["city" + currentcityid].length; sacIndex ++ ) if(seed.queue_sacr["city" + currentcityid][sacIndex]["unitType"] == untid) unit_number *= seed.queue_sacr["city" + currentcityid][sacIndex]["multiplier"][0]; if(jQuery'],
[/var\s*resources/i, 'load=load-1;var resources']
]);
else
t.capLoadEffect = new CalterUwFunc('cm.MarchModal.updateTroopResource', [
[/\$\("#modal/ig, 'jQuery("#modal'],
['if (jQuery', 'loadBoost = Math.min(loadBoost,6.25+techLoadBoost); for(var sacIndex = 0; sacIndex < seed.queue_sacr["city" + currentcityid].length; sacIndex ++ ) if(seed.queue_sacr["city" + currentcityid][sacIndex]["unitType"] == untid) unit_number *= seed.queue_sacr["city" + currentcityid][sacIndex]["multiplier"][0]; if(jQuery'],
['var resources', 'load=load-1;var resources']
]);
t.capLoadEffect.setEnable(Options.fixLoadCap);
},
setEnable: function (tf) {
var t = LoadCapFix;
t.capLoadEffect.setEnable(tf);
},
isAvailable: function () {
var t = LoadCapFix;
return t.capLoadEffect.isAvailable();
},
}
function distance(d, f, c, e) {
var a = 750;
var g = a / 2;
var b = Math.abs(c - d);
if (b > g)
b = a - b;
var h = Math.abs(e - f);
if (h > g)
h = a - h;
return Math.round(100 * Math.sqrt(b * b + h * h)) / 100;
};
var MapDistanceFix = {
popSlotsFunc: null,
init: function () {
var t = MapDistanceFix;
t.popSlotsFunc = new CalterUwFunc('MapObject.prototype.populateSlots', [
['this.distance', 'fixMapDistance_hook']
]);
if (t.popSlotsFunc.isAvailable()) {
uW.fixMapDistance_hook = t.fixMapDistance_hook;
if (Options.fixMapDistance)
t.enable(true);
}
},
fixMapDistance_hook: function (cityX, cityY, tileX, tileY) {
var city = Cities.byID[uW.currentcityid];
return distance(city.x, city.y, tileX, tileY);
},
enable: function (tf) {
var t = MapDistanceFix;
t.popSlotsFunc.setEnable(tf);
},
isAvailable: function () {
var t = MapDistanceFix;
//return t.popSlotsFunc.isAvailable();
return false;
},
}
var tabManager = {
tabList: {}, // {name, obj, div}
currentTab: null,
init: function (mainDiv) {
var t = tabManager;
var sorter = [];
for (k in Tabs) {
if (!Tabs[k].tabDisabled) {
t.tabList[k] = {};
t.tabList[k].name = k;
t.tabList[k].obj = Tabs[k];
if (Tabs[k].tabLabel != null)
t.tabList[k].label = Tabs[k].tabLabel;
else
t.tabList[k].label = k;
if (Tabs[k].tabOrder != null)
sorter.push([Tabs[k].tabOrder, t.tabList[k]]);
else
sorter.push([1000, t.tabList[k]]);
t.tabList[k].div = document.createElement('div');
}
}
sorter.sort(function (a, b) {
return a[0] - b[0]
});
var m = '<TABLE cellspacing=3 class=ptMainTab><TR>';
for (var i = 0; i < sorter.length; i++) {
m += '<TD align=center class=notSel id=pttc' + sorter[i][1].name + ' ><A><SPAN>' + sorter[i][1].label + '</span></a></td>';
//m += '<TD align=center class=notSel id=pttc'+ sorter[i][1].name +' ><A><SPAN>'+ sorter[i][1].label +'</span></a></td>';
if (i == 9) m += '</tr><TR>';
}
m += '</tr></table>';
//m += '<TD class=spacer width=90% align=right>'+ Version +' </td></tr></table>';
mainPop.getTopDiv().innerHTML = m;
t.currentTab = null;
for (k in t.tabList) {
if (t.tabList[k].name == Options.currentTab)
t.currentTab = t.tabList[k];
document.getElementById('pttc' + k).addEventListener('click', this.e_clickedTab, false);
var div = t.tabList[k].div;
div.style.display = 'none';
div.style.height = '100%';
div.style.maxWidth = '1200px';
div.style.overflowX = 'auto';
mainDiv.appendChild(div);
try {
t.tabList[k].obj.init(div);
} catch (e) {
div.innerHTML = "INIT ERROR: " + e;
}
}
if (t.currentTab == null)
t.currentTab = sorter[0][1];
t.setTabStyle(document.getElementById('pttc' + t.currentTab.name), true);
t.currentTab.div.style.display = 'block';
},
hideTab: function () {
var t = tabManager;
t.currentTab.obj.hide();
},
showTab: function () {
var t = tabManager;
t.currentTab.obj.show();
},
setTabStyle: function (e, selected) {
if (selected) {
e.className = 'sel';
} else {
e.className = 'notSel';
}
},
e_clickedTab: function (e) {
var t = tabManager;
var newTab = t.tabList[e.target.parentNode.parentNode.id.substring(4)];
if (t.currentTab.name != newTab.name) {
t.setTabStyle(document.getElementById('pttc' + t.currentTab.name), false);
t.setTabStyle(document.getElementById('pttc' + newTab.name), true);
t.currentTab.obj.hide();
t.currentTab.div.style.display = 'none';
t.currentTab = newTab;
newTab.div.style.display = 'block';
Options.currentTab = newTab.name;
}
newTab.obj.show();
},
}
function setTabStyle(e, selected) {
if (selected) {
e.className = 'matTabSel';
} else {
e.className = 'matTabNotSel';
}
}
function clickedTab(e) {
who = e.target.id.substring(2);
newObj = my[who];
currentObj = my[currentName];
if (currentName != who) {
setTabStyle(document.getElementById('aa' + currentName), false);
setTabStyle(document.getElementById('aa' + who), true);
if (currentObj) {
currentObj.hide();
currentObj.getContent().style.display = 'none';
}
currentName = who;
cont = newObj.getContent();
newObj.getContent().style.display = 'block';
}
newObj.show();
}
function mouseMainTab(me) {
if (me.button == 2) {
var c = getClientCoords(document.getElementById('main_engagement_tabs'));
mainPop.setLocation({
x: c.x + 4,
y: c.y + c.height
});
}
}
function eventHideShow() {
if (mainPop.toggleHide(mainPop)) {
tabManager.showTab();
Options.ptWinIsOpen = true;
} else {
tabManager.hideTab();
Options.ptWinIsOpen = false;
}
setTimeout(function () {
saveOptions();
}, 0);
}
function hideMe() {
if (!Options.ptWinIsOpen)
return;
mainPop.show(false);
tabManager.showTab();
Options.ptWinIsOpen = false;
saveOptions();
}
function showMe() {
mainPop.show(true);
tabManager.showTab();
Options.ptWinIsOpen = true;
saveOptions();
}
function addMyFunction(func) { // add function to run in our own scope
unsafeWindow[func.name] = func;
}
function addUwFunction(func) { // add function to run in unsafeWindow's scope
scr = document.createElement('script');
scr.innerHTML = func.toString();
document.body.appendChild(scr);
}
function alterUwFunction(funcName, frArray) {
try {
funcText = unsafeWindow[funcName].toString();
rt = funcText.replace('function ' + funcName, 'function');
for (i = 0; i < frArray.length; i++) {
x = rt.replace(frArray[i][0], frArray[i][1]);
if (x == rt)
return false;
rt = x;
}
js = funcName + ' = ' + rt;
var scr = document.createElement('script');
scr.innerHTML = js;
document.body.appendChild(scr);
return true;
} catch (err) {
return false;
}
}
function setCities() {
Cities.numCities = Seed.cities.length;
Cities.cities = [];
Cities.byID = {};
for (i = 0; i < Cities.numCities; i++) {
city = {};
city.idx = i;
city.id = parseInt(Seed.cities[i][0]);
city.name = Seed.cities[i][1];
city.x = parseInt(Seed.cities[i][2]);
city.y = parseInt(Seed.cities[i][3]);
city.tileId = parseInt(Seed.cities[i][5]);
city.provId = parseInt(Seed.cities[i][4]);
getTroopDefTrainEstimates('city' + city.id, city);
Cities.cities[i] = city;
Cities.byID[Seed.cities[i][0]] = city;
}
}
function getTroopDefTrainEstimates(cityID, city) {
var b = Seed.buildings[cityID];
city.numCottages = 0;
city.numBarracks = 0;
city.maxBarracks = 0;
city.totLevelsBarracks = 0;
city.blacksmithLevel = 0;
city.stableLevel = 0;
city.workshopLevel = 0;
city.wallLevel = 0;
for (var j = 1; j < 33; j++) {
if (b['pos' + j]) {
var bname = parseInt(b['pos' + j][0]);
var blvl = parseInt(b['pos' + j][1]);
switch (bname) {
case 13:
city.numBarracks++;
city.totLevelsBarracks += parseInt(blvl);
if (blvl > city.maxBarracks) city.maxBarracks = blvl;
break;
case 5:
city.numCottages++;
break;
case 15:
city.blacksmithLevel = blvl;
break;
case 16:
city.workshopLevel = blvl;
break;
case 17:
city.stableLevel = blvl;
break;
case 19:
city.wallLevel = blvl;
break;
}
}
}
var isPrestige = getCityPrestige(city.id);
if (isPrestige) {
city.blacksmithLevel = 12;
city.workshopLevel = 12;
city.stableLevel = 12;
}
var now = unixTime();
city.marshallCombatScore = 0;
var s = Seed.knights[cityID];
if (s) {
s = s["knt" + Seed.leaders[cityID].combatKnightId];
if (s) {
city.marshallCombatScore = s.combat;
if (s.combatBoostExpireUnixtime > now)
city.marshallCombatScore *= 1.25;
}
}
city.foremanBasePoliticsScore = 0;
var s = Seed.knights[cityID];
if (s) {
s = s["knt" + Seed.leaders[cityID].politicsKnightId];
if (s) {
city.foremanBasePoliticsScore = s.politics;
if (s.politicsBoostExpireUnixtime > now)
city.foremanBasePoliticsScore *= 1.25;
}
}
city.loggingLevel = parseInt(Seed.tech["tch2"]);
city.geometryLevel = parseInt(Seed.tech["tch5"]);
city.eagleEyesLevel = parseInt(Seed.tech["tch6"]);
city.poisonedEdgeLevel = parseInt(Seed.tech["tch8"]);
city.metalAlloysLevel = parseInt(Seed.tech["tch9"]);
city.featherweightPowderLevel = parseInt(Seed.tech["tch10"]);
city.alloyHorseshoesLevel = parseInt(Seed.tech["tch12"]);
city.fletchingLevel = parseInt(Seed.tech["tch13"]);
city.giantsStrengthLevel = parseInt(Seed.tech["tch16"]);
var bm = city.numBarracks + 0.1 * (city.totLevelsBarracks - city.numBarracks);
var mf = city.marshallCombatScore / 200;
var gf = city.geometryLevel / 10;
var sf = city.stableLevel / 10;
var wf = city.workshopLevel / 10;
var isf = bm * (1 + mf + gf);
var csf = bm * (1 + mf + gf + sf);
var ssf = bm * (1 + mf + gf + sf + wf);
var pf = city.foremanBasePoliticsScore / 200;
var gsf = city.giantsStrengthLevel / 10;
var dsf = 1 + pf + gsf;
city.Troop1Time = ((city.maxBarracks > 0) ? (50 / isf) : 0);
city.Troop2Time = city.Troop1Time / 2;
city.Troop3Time = ((city.maxBarracks > 1 && city.eagleEyesLevel > 0) ? (100 / isf) : 0);
city.Troop4Time = ((city.maxBarracks > 1 && city.poisonedEdgeLevel > 0) ? (150 / isf) : 0);
city.Troop5Time = ((city.maxBarracks > 2 && city.blacksmithLevel > 0 && city.metalAlloysLevel > 0) ? (225 / isf) : 0);
city.Troop6Time = ((city.maxBarracks > 3 && city.fletchingLevel > 0) ? (350 / isf) : 0);
city.Troop7Time = ((city.maxBarracks > 4 && city.stableLevel > 0 && city.alloyHorseshoesLevel > 0) ? (500 / csf) : 0);
city.Troop8Time = ((city.maxBarracks > 6 && city.blacksmithLevel > 4 && city.stableLevel > 4 && city.alloyHorseshoesLevel > 4) ? (1500 / csf) : 0);
city.Troop9Time = ((city.maxBarracks > 5 && city.stableLevel > 0 && city.workshopLevel > 2 && city.featherweightPowderLevel > 0) ? (1000 / ssf) : 0);
city.Troop10Time = ((city.maxBarracks > 7 && city.stableLevel > 1 && city.workshopLevel > 4 && city.geometryLevel > 4 && city.fletchingLevel > 5) ? (3000 / ssf) : 0);
city.Troop11Time = ((city.maxBarracks > 8 && city.blacksmithLevel > 4 && city.stableLevel > 2 && city.workshopLevel > 6 && city.metalAlloysLevel > 7 && city.geometryLevel > 6) ? (4500 / ssf) : 0);
city.Troop12Time = ((city.maxBarracks > 9 && city.stableLevel > 1 && city.workshopLevel > 8 && city.geometryLevel > 9 && city.fletchingLevel > 9) ? (6000 / ssf) : 0);
city.Def53Time = ((city.wallLevel > 5 && city.blacksmithLevel > 5 && city.fletchingLevel > 4) ? (180 / dsf) : 0);
city.Def55Time = ((city.wallLevel > 7 && city.blacksmithLevel > 7 && city.fletchingLevel > 6 && city.geometryLevel > 6) ? (135 / dsf) : 0);
city.Def60Time = ((city.wallLevel > 3 && city.blacksmithLevel > 3 && city.poisonedEdgeLevel > 1) ? (90 / dsf) : 0);
city.Def61Time = ((city.wallLevel > 0 && city.metalAlloysLevel > 0) ? (30 / dsf) : 0);
city.Def62Time = ((city.wallLevel > 1 && city.blacksmithLevel > 1 && city.loggingLevel > 1) ? (60 / dsf) : 0);
}
function officerId2String(oid) {
if (oid == null)
return '';
else if (oid == 3)
return uW.allianceOfficerTypeMapping[3];
else if (oid == 2)
return uW.allianceOfficerTypeMapping[2];
else if (oid == 1)
return uW.allianceOfficerTypeMapping[1];
else if (oid == 4)
return uW.allianceOfficerTypeMapping[4];
return '';
}
// onClick (city{name, id, x, y}, x, y) city may be null!
function CdispCityPicker(id, span, dispName, notify, selbut) {
function CcityButHandler(t) {
var that = t;
this.clickedCityBut = clickedCityBut;
function clickedCityBut(e) {
if (that.selected != null)
that.selected.className = "ptcastleBut ptcastleButNon";
that.city = Cities.cities[e.target.id.substr(that.prefixLen)];
if (that.dispName)
document.getElementById(that.id + 'cname').innerHTML = that.city.name;
e.target.className = "ptcastleBut ptcastleButSel";
that.selected = e.target;
if (that.coordBoxX) {
that.coordBoxX.value = that.city.x;
that.coordBoxY.value = that.city.y;
that.coordBoxX.style.backgroundColor = '#ffffff';
that.coordBoxY.style.backgroundColor = '#ffffff';
}
if (that.notify != null)
that.notify(that.city, that.city.x, that.city.y);
}
}
function selectBut(idx) {
document.getElementById(this.id + '_' + idx).click();
}
function bindToXYboxes(eX, eY) {
function CboxHandler(t) {
var that = t;
this.eventChange = eventChange;
if (that.city) {
eX.value = that.city.x;
eY.value = that.city.y;
}
function eventChange() {
var xValue = that.coordBoxX.value.trim();
var xI = /^\s*([0-9]+)[\s,]+([0-9]+)/.exec(xValue);
if (xI) {
that.coordBoxX.value = xI[1]
that.coordBoxY.value = xI[2]
}
var x = parseInt(that.coordBoxX.value, 10);
var y = parseInt(that.coordBoxY.value, 10);
if (isNaN(x) || x < 0 || x > 750) {
that.coordBoxX.style.backgroundColor = '#ff8888';
return;
}
if (isNaN(y) || y < 0 || y > 750) {
that.coordBoxY.style.backgroundColor = '#ff8888';
return;
}
that.coordBoxX.style.backgroundColor = '#ffffff';
that.coordBoxY.style.backgroundColor = '#ffffff';
if (that.notify != null)
that.notify(null, x, y);
}
}
this.coordBoxX = eX;
this.coordBoxY = eY;
var bh = new CboxHandler(this);
eX.size = 2;
eX.maxLength = 10;
eY.size = 2;
eY.maxLength = 3;
eX.addEventListener('change', bh.eventChange, false);
eY.addEventListener('change', bh.eventChange, false);
}
this.selectBut = selectBut;
this.bindToXYboxes = bindToXYboxes;
this.coordBoxX = null;
this.coordBoxY = null;
this.id = id;
this.dispName = dispName;
this.prefixLen = id.length + 1;
this.notify = notify;
this.selected = null;
this.city = null;
var m = '';
for (var i = 0; i < Cities.cities.length; i++)
m += '<INPUT class="ptcastleBut ptcastleButNon" id="' + id + '_' + i + '" value="' + (i + 1) + '" type=submit \>';
if (dispName)
m += ' <SPAN style="display:inline-block; width:85px; font-weight:bold;" id=' + id + 'cname' + '></span>';
span.innerHTML = m;
var handler = new CcityButHandler(this);
for (var i = 0; i < Cities.cities.length; i++)
document.getElementById(id + '_' + i).addEventListener('click', handler.clickedCityBut, false);
if (selbut != null)
this.selectBut(selbut);
};
function CdialogCancelContinue(msg, canNotify, contNotify, centerElement) {
var pop = new CPopup('ptcancont', 0, 0, 400, 200, true, canNotify);
if (centerElement)
pop.centerMe(centerElement);
else
pop.centerMe(document.body);
pop.getTopDiv().innerHTML = '<CENTER>KOC Power Tools</center>';
pop.getMainDiv().innerHTML = '<TABLE class=ptTab align=center style="height: 100%"><TR align=center height=90%><TD>' + msg + '</td></tr>\
<TR align=center><TD><INPUT id=ptcccancel type=submit value="CANCEL" \> <INPUT id=ptcccontin type=submit value="CONTINUE" \></td></tr></table>';
document.getElementById('ptcccancel').addEventListener('click', function () {
pop.show(false);
if (canNotify) canNotify();
}, false);
document.getElementById('ptcccontin').addEventListener('click', function () {
pop.show(false);
if (contNotify) contNotify();
}, false);
pop.show(true);
}
// TODO: make class (multiple instances needed)
function dialogRetry(errMsg, errCode, url, retry, seconds, onRetry, onCancel) {
seconds = parseInt(seconds);
var pop = new CPopup('ptretry', 0, 0, 400, 225, true);
pop.centerMe(mainPop.getMainDiv());
pop.getTopDiv().innerHTML = '<CENTER>KOC Power Tools</center>';
pop.getMainDiv().innerHTML = '<CENTER><BR><FONT COLOR=#550000><B>An error has occurred:</b></font><BR><BR><DIV id=paretryErrMsg></div>\
<BR><BR><B>Automatically retrying in <SPAN id=paretrySeconds></b></span> seconds ...<BR><BR><DIV id=paretryCmd></div><BR><INPUT id=paretryCancel type=submit value="CANCEL Retry" \>';
document.getElementById('paretryCancel').addEventListener('click', doCancel, false);
pop.show(true);
if (errCode && unsafeWindow.g_js_strings.errorcode['err_' + errCode])
document.getElementById('paretryErrMsg').innerHTML = unsafeWindow.g_js_strings.errorcode['err_' + errCode];
else
document.getElementById('paretryErrMsg').innerHTML = errMsg;
document.getElementById('paretryCmd').innerHTML = url + ' (Retry '+(retry+1)+' of 5)';
document.getElementById('paretrySeconds').innerHTML = seconds;
var rTimer = setTimeout(doRetry, seconds * 1000);
countdown();
function countdown() {
document.getElementById('paretrySeconds').innerHTML = seconds--;
if (seconds > 0)
cdTimer = setTimeout(countdown, 1000);
}
function doCancel() {
clearTimeout(rTimer);
clearTimeout(cdTimer);
pop.destroy();
onCancel();
}
function doRetry() {
clearTimeout(rTimer);
clearTimeout(cdTimer);
pop.show(false);
onRetry();
}
}
function implodeUrlArgs(obj) {
var a = [];
for (var k in obj)
a.push(k + '=' + encodeURI(obj[k]));
return a.join('&');
}
// NOTE: args can be either a string which will be appended as is to url or an object of name->values
function addUrlArgs(url, args) {
if (!args)
return url;
if (url.indexOf('?') < 0)
url += '?';
else if (url.substr(url.length - 1) != '&')
url += '&';
if (matTypeof(args == 'object'))
return url + implodeUrlArgs(args);
return url + args;
}
// emulate protoype's Ajax.Request ...
function AjaxRequest(url, opts) {
var headers = {
'X-Requested-With': 'XMLHttpRequest',
'X-Prototype-Version': '1.6.1',
'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
};
var ajax = null;
if (DEBUG_TRACE_AJAX) logit("AJAX: " + url + "\n" + inspect(opts, 3, 1));
if (window.XMLHttpRequest)
ajax = new XMLHttpRequest();
else
ajax = new ActiveXObject("Microsoft.XMLHTTP");
if (opts.method == null || opts.method == '')
method = 'GET';
else
method = opts.method.toUpperCase();
if (method == 'POST') {
headers['Content-type'] = 'application/x-www-form-urlencoded; charset=UTF-8';
} else if (method == 'GET') {
addUrlArgs(url, opts.parameters);
}
ajax.onreadystatechange = function () {
// ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete']; states 0-4
if (ajax.readyState == 4) {
if (ajax.status >= 200 && ajax.status < 305)
if (opts.onSuccess) opts.onSuccess(ajax);
else
if (opts.onFailure) opts.onFailure(ajax);
} else {
if (opts.onChange) opts.onChange(ajax);
}
}
ajax.open(method, url, true); // always async!
for (var k in headers)
ajax.setRequestHeader(k, headers[k]);
if (matTypeof(opts.requestHeaders) == 'object')
for (var k in opts.requestHeaders)
ajax.setRequestHeader(k, opts.requestHeaders[k]);
if (method == 'POST') {
var a = [];
for (k in opts.parameters)
a.push(k + '=' + opts.parameters[k]);
ajax.send(a.join('&'));
} else {
ajax.send();
}
}
function MyAjaxRequest(url, o, noRetry) {
if (DEBUG_TRACE) logit(" 0 myAjaxRequest: " + url + "\n" + inspect(o, 2, 1));
var opts = uW.Object.clone(o);
var wasSuccess = o.onSuccess;
var wasFailure = o.onFailure;
var retry = 0;
var delay = 5;
var noRetry = noRetry === true ? true : false;
opts.onSuccess = mySuccess;
opts.onFailure = myFailure;
if (DEBUG_TRACE) logit(" 1a myAjaxRequest: " + url + "\n" + inspect(o, 2, 1));
new AjaxRequest(url, opts);
return;
function myRetry() {
++retry;
new AjaxRequest(url, opts);
//delay = delay * 1.25;
}
function myFailure() {
var o = {};
if (DEBUG_TRACE) logit("myAjaxRequest.myFailure(): " + inspect(rslt, 1, 1));
o.ok = false;
o.errorMsg = "AJAX Communication Failure";
wasFailure(o);
}
function mySuccess(msg) {
var rslt;
try {
rslt = JSON2.parse(msg.responseText);
} catch(e) {
//alert(unescape(msg.responseText));
if (retry<5) {
rslt = {"ok":false,"error_code":9,"errorMsg":"Failed due to invalid json"}
} else {
rslt = {"ok":true,"error_code":9,"data":[]};
}
}
var x;
if (window.EmulateAjaxError){
rslt.ok = false;
rslt.error_code=8;
}
if (rslt.ok){
if (rslt.updateSeed)
unsafeWindow.update_seed(rslt.updateSeed);
wasSuccess(rslt);
return;
}
rslt.errorMsg = uW.printLocalError((rslt.error_code || null), (rslt.msg || null), (rslt.feedback || null));
/*if ( (x = rslt.errorMsg.indexOf ('<br><br>')) > 0)
rslt.errorMsg = rslt.errorMsg.substr (0, x-1);*/
if (!noRetry && (rslt.error_code == 0 || rslt.error_code == 8 || rslt.error_code == 1 || rslt.error_code == 3)) {
dialogRetry(rslt.errorMsg, rslt.error_code, url, retry, delay, function () {
myRetry()
}, function () {
wasSuccess(rslt)
});
} else {
wasSuccess(rslt);
}
}
}
function AsyncAjaxRequest(url, opts) {
var headers = {
'X-Requested-With': 'XMLHttpRequest',
'X-Prototype-Version': '1.6.1',
'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
};
var ajax = null;
if (window.XMLHttpRequest)
ajax = new XMLHttpRequest();
else
ajax = new ActiveXObject("Microsoft.XMLHTTP");
if (opts.method == null || opts.method == '')
method = 'GET';
else
method = opts.method.toUpperCase();
if (method == 'POST') {
headers['Content-type'] = 'application/x-www-form-urlencoded; charset=UTF-8';
} else if (method == 'GET') {
addUrlArgs(url, opts.parameters);
}
ajax.onreadystatechange = function () {
// ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete']; states 0-4
if (ajax.readyState == 4) {
if (ajax.status == 500)
if (opts.onFailure) opts.onFailure(ajax);
if (ajax.status >= 200 && ajax.status < 305)
if (opts.onSuccess) opts.onSuccess(ajax);
else
if (opts.onFailure) opts.onFailure(ajax);
Options.ResponseSize += parseInt(ajax.getResponseHeader("Content-Length"));
} else {
if (opts.onChange) opts.onChange(ajax);
}
}
ajax.open(method, url, false);
for (var k in headers)
ajax.setRequestHeader(k, headers[k]);
if (matTypeof(opts.requestHeaders) == 'object')
for (var k in opts.requestHeaders)
ajax.setRequestHeader(k, opts.requestHeaders[k]);
if (method == 'POST') {
var a = [];
for (k in opts.parameters) {
if (matTypeof(opts.parameters[k]) == 'object')
for (var h in opts.parameters[k])
a.push(k + '[' + h + '] =' + opts.parameters[k][h]);
else
a.push(k + '=' + opts.parameters[k]);
}
ajax.send(a.join('&'));
} else {
ajax.send();
}
}
// returns: 'neutral', 'friendly', or 'hostile'
function getDiplomacy(aid) {
if (Seed.allianceDiplomacies == null)
return uW.g_js_strings.commonstr.neutral;
if (Seed.allianceDiplomacies.friendly && Seed.allianceDiplomacies.friendly['a' + aid] != null)
return uW.g_js_strings.commonstr.friendly;
if (Seed.allianceDiplomacies.hostile && Seed.allianceDiplomacies.hostile['a' + aid] != null)
return uW.g_js_strings.commonstr.hostile;
if (aid == Seed.allianceDiplomacies.allianceId)
return uW.g_js_strings.modaltitles.alliance;
return uW.g_js_strings.commonstr.neutral;
};
function getMyAlliance() {
if (Seed.allianceDiplomacies == null || Seed.allianceDiplomacies.allianceName == null)
return [0, 'None'];
else
return [Seed.allianceDiplomacies.allianceId, Seed.allianceDiplomacies.allianceName];
}
// TODO: Check times for expired marches !?!?!
// note: unselected city has outdated info
function getMarchInfo() {
var ret = {};
ret.marchUnits = [];
ret.returnUnits = [];
ret.resources = [];
for (var ui in uW.cm.UNIT_TYPES) {
i = uW.cm.UNIT_TYPES[ui];
ret.marchUnits[i] = 0;
ret.returnUnits[i] = 0;
}
for (i = 0; i < 5; i++) {
ret.resources[i] = 0;
}
var now = unixTime();
for (i = 0; i < Cities.numCities; i++) { // each city
cityID = 'city' + Cities.cities[i].id;
for (k in Seed.queue_atkp[cityID]) { // each march
march = Seed.queue_atkp[cityID][k];
if (typeof (march) == 'object') {
for (var ui in uW.cm.UNIT_TYPES) {
ii = uW.cm.UNIT_TYPES[ui];
ret.marchUnits[ii] += parseIntNan(march['unit' + ii + 'Count']);
ret.returnUnits[ii] += parseIntNan(march['unit' + ii + 'Return']);
}
for (ii = 1; ii < 5; ii++) {
ret.resources[ii] += parseIntNan(march['resource' + ii]);
}
ret.resources[0] += parseIntNan(march['gold']);
}
// TODO: fixup completed marches
// TODO: Assume transport is complete ?
}
}
return ret;
}
function getTrainInfo() {
var ret = {};
ret.trainUnts = [];
for (var ui in uW.cm.UNIT_TYPES) {
i = uW.cm.UNIT_TYPES[ui];
ret.trainUnts[i] = 0;
}
var q = Seed.queue_unt;
for (i = 0; i < Cities.numCities; i++) { // each city
cityID = 'city' + Cities.cities[i].id;
q = Seed.queue_unt[cityID];
if (q && q.length > 0) {
for (qi = 0; qi < q.length; qi++)
ret.trainUnts[q[qi][0]] += parseInt(q[qi][1]);
}
}
return ret;
}
var fortNamesShort = {
53: "Crossbows",
55: "Trebuchet",
60: "Trap",
61: "Caltrops",
62: "Spiked Barrier",
}
// returns {count, maxlevel}
function getCityBuilding(cityId, buildingId) {
var b = Seed.buildings['city' + cityId];
var ret = {
count: 0,
maxLevel: 0
};
for (var k in b) {
if (b[k] && b[k][0] == buildingId) {
++ret.count;
if (parseInt(b[k][1]) > ret.maxLevel)
ret.maxLevel = parseInt(b[k][1]);
}
}
return ret;
}
function getCityPrestige(cityId) {
return Seed.cityData.city[cityId].isPrestigeCity;
}
// example: https://www150.kingdomsofcamelot.com
function GetServerId() {
var m = /^[a-zA-Z]+([0-9]+)\./.exec(document.location.hostname);
if (m)
return m[1];
return '';
}
function logit(msg) {
var serverID = GetServerId();
var now = new Date();
GM_log(serverID + ' @ ' + now.toTimeString().substring(0, 8) + '.' + now.getMilliseconds() + ': ' + msg);
}
function ById(id) {
return document.getElementById(id);
}
/************ DEBUG WIN *************/
var debugWin = {
popDebug: null,
dbDefaultNot: 'tech,tutorial,items,quests,wilderness,wildDef,buildings,knights,allianceDiplomacies,appFriends,players',
dbSelect: {},
sortSeed: [],
sortNonSeed: [],
doit: function () {
var t = debugWin;
function syncBoxes() {
for (var i = 0; i < t.sortSeed.length; i++) {
var name = t.sortSeed[i];
var box = document.getElementById('dbpop_' + name);
box.checked = t.dbSelect[name];
}
}
function clickedAll() {
for (var k in t.dbSelect)
t.dbSelect[k] = true;
syncBoxes();
}
function clickedNone() {
for (var k in t.dbSelect)
t.dbSelect[k] = false;
syncBoxes();
}
function clickedDefaults() {
for (k in t.dbSelect)
t.dbSelect[k] = true;
var not = t.dbDefaultNot.split(',');
for (var i = 0; i < not.length; i++)
t.dbSelect[not[i]] = false;
syncBoxes();
}
function clickedShow() {
var resultsDiv = document.getElementById('idDebugResultsDiv')
var s = '<PRE>';
for (var i = 0; i < t.sortSeed.length; i++) {
var name = t.sortSeed[i];
var box = document.getElementById('dbpop_' + name);
if (box.checked)
s += name + " =\n" + inspect(Seed[name], 10, 1);
}
resultsDiv.innerHTML = s + '</PRE>';
}
function clickedShowNonSeed() {
var resultsDiv = document.getElementById('idDebugResultsDiv');
nsvalue = document.getElementById('dbnonseed').value;
if (nsvalue != '') {
val = unsafeWindow[nsvalue];
valtype = typeof (val);
resultsDiv.innerHTML = '<PRE>(' + valtype + ') ' + nsvalue + ((valtype == 'string') ? (" = " + val) : (" =\n" + inspect(val, 10, 1))) + '</PRE>';
}
}
function clickedShowScripts() {
var resultsDiv = document.getElementById('idDebugResultsDiv')
var scripts = document.getElementsByTagName('script');
var s = '';
for (var i = 0; i < scripts.length; i++)
if (scripts[i].src != null && scripts[i].src != '')
s += '<A TARGET=_tab HREF="' + scripts[i].src + '">' + scripts[i].src + '</A><BR />';
resultsDiv.innerHTML = s;
}
if (t.popDebug == null) {
t.popDebug = new CPopup('db', 0, 45, 749, 900, true);
t.popDebug.getTopDiv().innerHTML = '<DIV align=center><B>DEBUG</B></DIV>';
var sl = 0;
for (var k in Seed) {
t.dbSelect[k] = true;
t.sortSeed[sl] = k;
sl++;
}
t.sortSeed.sort();
sl = 0;
for (var k in unsafeWindow) {
kType = typeof (unsafeWindow[k]);
if ((k.indexOf('actionlink_data') != 0) && (k != 'content') && (k != 'document') && (k.indexOf('feed') != 0) && (k.indexOf('frame') != 0) && (k != 'globalStorage') &&
(k != 'g_mapObject') && (k != 'history') && (k != 'Modal') && (k != 'navigator') && (k != 'parent') && (k.indexOf('pb') != 0) && (k.indexOf('pt') != 0) && (k != 'seed') &&
(k != 'self') && (k.indexOf('template_data') != 0) && (k != 'that') && (k != 'window') && (k != '_htmlElement') && (kType != 'function') && (kType != 'undefined')) {
t.sortNonSeed[sl] = k;
sl++;
}
}
t.sortNonSeed.sort(function (x, y) {
var a = String(x).toUpperCase();
var b = String(y).toUpperCase();
if (a > b) return 1;
else if (a < b) return -1;
else return 0;
});
var nsSelect = '<SELECT id="dbnonseed"><OPTION value="" ></option>';
for (var i = 0; i < t.sortNonSeed.length; i++)
nsSelect += '<OPTION value="' + t.sortNonSeed[i] + '" >' + t.sortNonSeed[i] + '</option>';
nsSelect += '</SELECT>';
var not = t.dbDefaultNot.split(',');
for (var i = 0; i < not.length; i++)
t.dbSelect[not[i]] = false;
var m = '<DIV class=ptentry><B>Seed: </B><INPUT type=submit id=dbsuball value=ALL> <INPUT type=submit id=dbsubnone value=NONE> ' +
'<INPUT type=submit id=dbdefaults value=DEFAULTS> <INPUT type=submit id=dbsubdo value=SHOW> <INPUT type=submit id=dbsubscripts value=SCRIPTS><BR /><TABLE width=100%>';
var cols = 5;
var entries = t.sortSeed.length;
var rows = parseInt(0.99 + entries / cols);
for (var rowno = 1; rowno <= rows; rowno++) {
m += '<TR>';
for (colno = 1; colno <= cols; colno++) {
var slvalue = rows * (colno - 1) + rowno - 1;
m += ((slvalue < entries) ? ('<TD class=xtab><INPUT type=checkbox id="dbpop_' + t.sortSeed[slvalue] + '"> ' + t.sortSeed[slvalue] + '</TD>') : '<TD class=xtab></TD>');
}
m += '</TR>';
}
m += '</TABLE><B>Non-Seed: </B>' + nsSelect + '</DIV><DIV id="idDebugResultsDiv" style="width:738px; height:600px; max-height:600px; overflow-y:auto; white-space:pre-wrap;"></DIV>';
t.popDebug.getMainDiv().innerHTML = m;
document.getElementById('dbsuball').addEventListener('click', clickedAll, false);
document.getElementById('dbsubnone').addEventListener('click', clickedNone, false);
document.getElementById('dbdefaults').addEventListener('click', clickedDefaults, false);
document.getElementById('dbsubdo').addEventListener('click', clickedShow, false);
document.getElementById('dbsubscripts').addEventListener('click', clickedShowScripts, false);
document.getElementById('dbnonseed').addEventListener('change', clickedShowNonSeed, false);
syncBoxes();
}
t.popDebug.show(true);
},
}
function saveOptions() {
var serverID = GetServerId();
GM_setValue('Options_' + serverID, JSON2.stringify(Options));
}
function readOptions() {
var serverID = GetServerId();
s = GM_getValue('Options_' + serverID);
if (s != null) {
opts = JSON2.parse(s);
for (k in opts)
Options[k] = opts[k];
}
}
function readGlobalOptions() {
GlobalOptions = JSON2.parse(GM_getValue('Options_??', '{}'));
}
function saveColors() {
var serverID = GetServerId();
GM_setValue('Colors_' + serverID, JSON2.stringify(Colors));
}
function readColors() {
var serverID = GetServerId();
s = GM_getValue('Colors_' + serverID);
if (s != null) {
opts = JSON2.parse(s);
for (k in opts)
Colors[k] = opts[k];
} else {
s = GM_getValue('Colors');
if (s != null) {
opts = JSON2.parse(s);
for (k in opts)
Colors[k] = opts[k];
}
}
}
function readAutoTrainOptions() {
var serverID = GetServerId();
s = GM_getValue('AutoTrainOptions_' + serverID);
if (s != null) {
opts = JSON2.parse(s);
for (k in opts) {
if (AutoTrainOptions[k] != undefined) {
if (matTypeof(opts[k]) == 'object') {
for (kk in opts[k])
if (AutoTrainOptions[k][kk] != undefined)
AutoTrainOptions[k][kk] = opts[k][kk];
} else
AutoTrainOptions[k] = opts[k];
}
}
}
}
function saveAutoTrainOptions() {
var serverID = GetServerId();
GM_setValue('AutoTrainOptions_' + serverID, JSON2.stringify(AutoTrainOptions));
}
function readIRCOptions() {
var serverID = GetServerId();
s = localStorage.getItem('IRCOptions_' + serverID);
if (s != null) {
opts = JSON2.parse(s);
for (k in opts) {
if (IRCOptions[k] != undefined) {
if (matTypeof(opts[k]) == 'object') {
for (kk in opts[k])
if (IRCOptions[k][kk] != undefined)
IRCOptions[k][kk] = opts[k][kk];
} else
IRCOptions[k] = opts[k];
}
}
}
}
function saveIRCOptions() {
var serverID = GetServerId();
localStorage.setItem('IRCOptions_' + serverID, JSON2.stringify(IRCOptions));
}
function readChatIconsOptions() {
var serverID = GetServerId();
s = GM_getValue('ChatIcons_' + serverID);
if (s != null) {
opts = JSON2.parse(s);
for (k in opts) {
ChatIcons[k] = opts[k];
}
}
}
function saveChatIconsOptions() {
var serverID = GetServerId();
GM_setValue('ChatIcons_' + serverID, JSON2.stringify(ChatIcons));
}
/***
***/
var myServers = { // incomplete, untested
serverlist: null,
get: function (notify) {
if (myServers.serverlist) {
notify(myServers.serverlist);
return;
}
var params = uW.Object.clone(uW.g_ajaxparams);
new MyAjaxRequest(uW.g_ajaxpath + "ajax/myServers.php" + uW.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (rslt) {
logit(inspect(rslt, 3, 1));
if (notify)
notify(myServers.serverlist);
},
onFailure: function (rslt) {}
});
},
};
function createButton(label) {
var a = document.createElement('a');
a.className = 'button20';
a.innerHTML = '<span style="color: #ff6">' + label + '</span>';
return a;
}
function AddMainTabLink(text, eventListener, mouseListener) {
var a = createButton(text);
a.className = 'tab';
var tabs = document.getElementById('main_engagement_tabs');
if (!tabs) {
tabs = document.getElementById('topnav_msg');
if (tabs)
tabs = tabs.parentNode;
}
if (tabs) {
var e = tabs.parentNode;
var gmTabs = null;
for (var i = 0; i < e.childNodes.length; i++) {
var ee = e.childNodes[i];
//if (ee.tagName=='DIV') logit ("CHILD: "+ ee.tagName +' : '+ ee.className+' : '+ ee.id);
if (ee.tagName && ee.tagName == 'DIV' && ee.className == 'tabs_engagement' && ee.id != 'main_engagement_tabs') {
gmTabs = ee;
break;
}
}
if (gmTabs == null) {
gmTabs = document.createElement('div');
gmTabs.className = 'tabs_engagement';
gmTabs.style.background = '#ca5';
tabs.parentNode.insertBefore(gmTabs, tabs);
gmTabs.style.whiteSpace = 'normal';
gmTabs.style.width = '735px';
gmTabs.lang = 'en_PT';
}
gmTabs.style.height = '0%';
gmTabs.style.overflow = 'auto';
if (gmTabs.firstChild)
gmTabs.insertBefore(a, gmTabs.firstChild);
else
gmTabs.appendChild(a);
a.addEventListener('click', eventListener, false);
if (mouseListener != null)
a.addEventListener('mousedown', mouseListener, true);
return a;
}
return null;
}
function coordLink(x, y) {
var m = [];
m.push('(<a onclick="ptGotoMapHide (');
m.push(x);
m.push(',');
m.push(y);
m.push('); return false">');
m.push(x);
m.push(',');
m.push(y);
m.push('</a>)');
return m.join('');
}
uW.ptGotoMapHide = function (x, y) {
try {
uW.Modal.hideModal();
} catch (e) {}
try {
Modal.hideModal();
} catch (e) {}
uW.ptGotoMap(x, y);
}
uW.ptGotoMap = function (x, y) {
if (Options.hideOnGoto)
hideMe();
setTimeout(function () {
document.getElementById('mapXCoor').value = x;
document.getElementById('mapYCoor').value = y;
uW.reCenterMapWithCoor();
var a = document.getElementById("mod_views").getElementsByTagName("a");
for (var b = 0; b < a.length; b++) {
a[b].className = "buttonv2 nav h20"
}
document.getElementById('mod_views_map').className = "buttonv2 nav h20 sel";
document.getElementById("maparea_city").style.display = 'none';
document.getElementById("maparea_fields").style.display = 'none';
document.getElementById("maparea_map").style.display = 'block';
uW.tutorialClear()
}, 0);
};
/**********************************************************************************/
function makeButton20(label) {
var a = document.createElement('a');
a.className = "button20 ptButton20";
var s = document.createElement('span');
s.innerHTML = label;
a.appendChild(s);
return a;
}
function strButton20(label, tags) {
if (tags == null)
tags = '';
return ('<TABLE class=ptNoPad><TR><TD><A class="button20 ptButton20" ' + tags + '><SPAN>' + label + '</span></a></td></tr></table>');
}
function strButton14(label, tags) {
if (tags == null)
tags = '';
return ('<A class="button14 ptButton20" ' + tags + '><SPAN>' + label + '</span></a>');
}
function cityStatusString(cs) {
if (cs == 4)
return 'V';
if (cs == 3)
return 'T';
if (cs == 2)
return 'BP';
return 'N';
}
// Simple method, as if it were typed in thru DOM
function sendChat(msg) {
document.getElementById("mod_comm_input").value = msg;
uW.Chat.sendChat();
}
// works well, but message is not echoed back to local client
Chat = {
params: null,
sendWhisper: function (msg, who, notify) {
this.params = uW.Object.clone(uW.g_ajaxparams);
this.params.ctype = 3;
this.params.name = who;
this._sendit(msg, notify);
},
sendGlobal: function (msg, notify) {
this.params = uW.Object.clone(uW.g_ajaxparams);
this.params.ctype = 1;
this._sendit(msg, notify);
},
sendAlliance: function (msg, notify) {
this.params = uW.Object.clone(uW.g_ajaxparams);
this.params.ctype = 2;
this._sendit(msg, notify);
},
_sendit: function (msg, notify) {
function strip(s) {
return s.replace(/^\s+/, '').replace(/\s+$/, '');
}
this.params.comment = strip(msg);
new MyAjaxRequest(uW.g_ajaxpath + "ajax/sendChat.php" + uW.g_ajaxsuffix, {
method: "post",
parameters: this.params,
onSuccess: function (transport) {
if (notify)
notify();
},
onFailure: function (transport) {
if (notify)
notify();
}
});
},
}
function doDefTrain(cityId, siege, unitId, num, notify) {
var time = uW.modal_walls_traintime(unitId, num);
var params = uW.Object.clone(uW.g_ajaxparams);
params.cid = cityId;
params.type = unitId;
params.quant = num;
params.items = siege;
new MyAjaxRequest(uW.g_ajaxpath + "ajax/fortify.php" + uW.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (rslt) {
if (rslt.ok) {
uW.seed.queue_fort["city" + cityId].push([unitId, num, rslt.initTS, parseInt(rslt.initTS) + time, 0, time, rslt.fortifyId]);
if (notify != null)
setTimeout(function () {
notify(null);
}, 500);
} else {
if (notify != null)
setTimeout(function () {
notify(rslt.errorMsg);
}, 500);
}
},
onFailure: function () {
if (notify != null)
notify(rslt.errorMsg);
},
});
}
function doTrain(cityId, tut, gamble, unitId, num, notify) {
var time = uW.modal_barracks_traintime(unitId, num);
var params = uW.Object.clone(uW.g_ajaxparams);
params.cid = cityId;
params.type = unitId;
params.quant = num;
params.items = tut;
params.gambleId = gamble;
new MyAjaxRequest(uW.g_ajaxpath + "ajax/train.php" + uW.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (rslt) {
if (rslt.ok) {
for (var i = 1; i < 5; i++) {
var resourceLost = parseInt(uW.unitcost["unt" + unitId][i]) * 3600 * parseInt(num);
if (rslt.gamble) resourceLost = resourceLost * rslt.gamble[i];
uW.seed.resources["city" + cityId]["rec" + i][0] = parseInt(uW.seed.resources["city" + cityId]["rec" + i][0]) - resourceLost;
}
uW.seed.citystats["city" + cityId].gold[0] = parseInt(uW.seed.citystats["city" + cityId].gold[0]) - parseInt(uW.unitcost["unt" + unitId][5]) * parseInt(num);
uW.seed.citystats["city" + cityId].pop[0] = parseInt(uW.seed.citystats["city" + cityId].pop[0]) - parseInt(uW.unitcost["unt" + unitId][6]) * parseInt(num);
if (unitId == 16)
uW.seed.items.i34001 = parseInt(uW.seed.items.i34001) - parseInt(uW.unitcost["unt" + unitId][11]["34001"]) * parseInt(num);
uW.seed.queue_unt["city" + cityId].push([unitId, num, rslt.initTS, parseInt(rslt.initTS) + time, 0, time, null]);
if (notify != null)
setTimeout(function () {
notify(null);
}, 500);
} else {
if (notify != null) {
setTimeout(function () {
notify(rslt.errorMsg);
}, 500);
}
}
},
onFailure: function (o) {
if (notify != null)
notify(rslt.errorMsg);
}
});
}
/************ LIB classes/functions .... **************/
function getAbsoluteOffsets(e) {
ret = {
left: 0,
top: 0
};
while (e.offsetParent) {
if (e.style.position == 'absolute')
break;
ret.left += e.offsetLeft;
ret.top += e.offsetTop;
e = e.offsetParent;
}
return ret;
}
DebugTimer = {
startTime: 0,
start: function () {
now = new Date();
DebugTimer.startTime = now.getTime();
},
display: function (label, noReset) {
now = new Date();
elapsed = now.getTime() - DebugTimer.startTime;
logit(label + ": " + elapsed / 1000);
if (noReset === null || !noReset)
DebugTimer.startTime = now.getTime();
},
};
function debugPos(e) {
return 'client - offset: ' + e.clientLeft + ',' + e.clientTop + ',' + e.clientWidth + ',' + e.clientHeight + ' - ' + e.offsetLeft + ',' + e.offsetTop + ',' + e.offsetWidth + ',' + e.offsetHeight + ' ' + e + ' --OP--> ' + e.offsetParent;
}
function debugElement(e) {
var x = uW.Object.clone(e.wrappedJSObject);
x.innerHTML = '';
x.innerText = '';
x.textContent = '';
return inspect(x, 1, 1);
}
function searchDOM(node, condition, maxLevel, doMult) {
var found = [];
eval('var compFunc = function (node) { return (' + condition + ') }');
doOne(node, 1);
if (!doMult) {
if (found.length == 0)
return null;
return found[0];
}
return found;
function doOne(node, curLevel) {
try {
if (compFunc(node))
found.push(node);
} catch (e) {}
if (!doMult && found.length > 0)
return;
if (++curLevel < maxLevel && node.childNodes != undefined)
for (var c = 0; c < node.childNodes.length; c++)
doOne(node.childNodes[c], curLevel);
}
}
function getClientCoords(e) {
if (e == null)
return {
x: null,
y: null,
width: null,
height: null
};
var x = 0,
y = 0;
ret = {
x: 0,
y: 0,
width: e.clientWidth,
height: e.clientHeight
};
while (e.offsetParent != null) {
ret.x += e.offsetLeft;
ret.y += e.offsetTop;
e = e.offsetParent;
}
return ret;
}
function htmlTitleLine(msg) {
return '<TABLE width=100% cellspacing=0><TR><TD style="padding:0px" width=50%><HR></td><TD style="padding:0px">[ ' + msg + ' ]</td><TD style="padding:0px" width=50%><HR></td></tr></table>';
}
var WinManager = {
wins: {}, // prefix : CPopup obj
get: function (prefix) {
var t = WinManager;
return t.wins[prefix];
},
add: function (prefix, pop) {
var t = WinManager;
t.wins[prefix] = pop;
if (uW.cpopupWins == null)
uW.cpopupWins = {};
uW.cpopupWins[prefix] = pop;
},
delete: function (prefix) {
var t = WinManager;
delete t.wins[prefix];
delete uW.cpopupWins[prefix];
}
}
// creates a 'popup' div
// prefix must be a unique (short) name for the popup window
function CPopup(prefix, x, y, width, height, enableDrag, onClose) {
var pop = WinManager.get(prefix);
if (pop) {
pop.show(false);
return pop;
}
this.BASE_ZINDEX = 111111;
// protos ...
this.show = show;
this.toggleHide = toggleHide;
this.getTopDiv = getTopDiv;
this.getMainDiv = getMainDiv;
this.getLayer = getLayer;
this.setLayer = setLayer;
this.setEnableDrag = setEnableDrag;
this.getLocation = getLocation;
this.setLocation = setLocation;
this.focusMe = focusMe;
this.unfocusMe = unfocusMe;
this.centerMe = centerMe;
this.destroy = destroy;
// object vars ...
this.div = document.createElement('div');
this.prefix = prefix;
this.onClose = onClose;
var t = this;
this.div.className = 'CPopup ' + prefix + '_CPopup';
this.div.id = prefix + '_outer';
this.div.style.background = "#fff";
this.div.style.zIndex = this.BASE_ZINDEX // KOC modal is 100210 ?
this.div.style.display = 'none';
this.div.style.width = width + 'px';
this.div.style.height = height + 'px';
this.div.style.position = "absolute";
this.div.style.top = y + 'px';
this.div.style.left = x + 'px';
if (CPopUpTopClass == null)
topClass = 'CPopupTop ' + prefix + '_CPopupTop';
else
topClass = CPopUpTopClass + ' ' + prefix + '_' + CPopUpTopClass;
var m = '<TABLE cellspacing=0 width=100% height=100%><TR id="' + prefix + '_bar" class="' + topClass + '"><TD width=99% valign=bottom><SPAN id="' + prefix + '_top"></span></td>\
<TD id=' + prefix + '_X align=right valign=middle onmouseover="this.style.cursor=\'pointer\'" style="color:#fff; background:#333; font-weight:bold; font-size:14px; padding:0px 5px; -moz-border-radius-topright: 20px;">x</td></tr>\
<TR><TD height=100% valign=top class="CPopMain ' + prefix + '_CPopMain" colspan=2 id="' + prefix + '_main"></td></tr></table>';
document.body.appendChild(this.div);
this.div.innerHTML = m;
document.getElementById(prefix + '_X').addEventListener('click', e_XClose, false);
this.dragger = new CWinDrag(document.getElementById(prefix + '_bar'), this.div, enableDrag);
this.div.addEventListener('mousedown', e_divClicked, false);
WinManager.add(prefix, this);
function e_divClicked() {
t.focusMe();
}
function e_XClose() {
t.show(false);
if (t.onClose != null)
t.onClose();
}
function focusMe() {
t.setLayer(5);
for (k in uW.cpopupWins) {
if (k != t.prefix)
uW.cpopupWins[k].unfocusMe();
}
}
function unfocusMe() {
t.setLayer(-5);
}
function getLocation() {
return {
x: parseInt(this.div.style.left),
y: parseInt(this.div.style.top)
};
}
function setLocation(loc) {
t.div.style.left = loc.x + 'px';
t.div.style.top = loc.y + 'px';
}
function destroy() {
document.body.removeChild(t.div);
WinManager.delete(t.prefix);
}
function centerMe(parent) {
if (parent == null) {
var coords = getClientCoords(document.body);
} else
var coords = getClientCoords(parent);
var x = ((coords.width - parseInt(t.div.style.width)) / 2) + coords.x;
var y = ((coords.height - parseInt(t.div.style.height)) / 2) + coords.y;
if (x < 0)
x = 0;
if (y < 0)
y = 0;
t.div.style.left = x + 'px';
t.div.style.top = y + 'px';
}
function setEnableDrag(tf) {
t.dragger.setEnable(tf);
}
function setLayer(zi) {
t.div.style.zIndex = '' + (this.BASE_ZINDEX + zi);
}
function getLayer() {
return parseInt(t.div.style.zIndex) - this.BASE_ZINDEX;
}
function getTopDiv() {
return document.getElementById(this.prefix + '_top');
}
function getMainDiv() {
return document.getElementById(this.prefix + '_main');
}
function show(tf) {
if (tf) {
t.div.style.display = 'block';
t.focusMe();
} else {
t.div.style.display = 'none';
}
return tf;
}
function toggleHide(t) {
if (t.div.style.display == 'block') {
return t.show(false);
} else {
return t.show(true);
}
}
}
function CWinDrag(clickableElement, movingDiv, enabled) {
var t = this;
this.setEnable = setEnable;
this.setBoundRect = setBoundRect;
this.debug = debug;
this.dispEvent = dispEvent;
this.lastX = null;
this.lastY = null;
this.enabled = true;
this.moving = false;
this.theDiv = movingDiv;
this.body = document.body;
this.ce = clickableElement;
this.moveHandler = new CeventMove(this).handler;
this.outHandler = new CeventOut(this).handler;
this.upHandler = new CeventUp(this).handler;
this.downHandler = new CeventDown(this).handler;
this.clickableRect = null;
this.boundRect = null;
this.bounds = null;
this.enabled = false;
if (enabled == null)
enabled = true;
this.setEnable(enabled);
function setBoundRect(b) { // this rect (client coords) will not go outside of current body
this.boundRect = boundRect;
this.bounds = null;
}
function setEnable(enable) {
if (enable == t.enabled)
return;
if (enable) {
clickableElement.addEventListener('mousedown', t.downHandler, false);
t.body.addEventListener('mouseup', t.upHandler, false);
} else {
clickableElement.removeEventListener('mousedown', t.downHandler, false);
t.body.removeEventListener('mouseup', t.upHandler, false);
}
t.enabled = enable;
}
function CeventDown(that) {
this.handler = handler;
var t = that;
function handler(me) {
if (DEBUG_TRACE_DRAG) t.dispEvent('eventDOWN', me);
if (t.bounds == null) {
t.clickableRect = getClientCoords(clickableElement);
t.bodyRect = getClientCoords(document.body);
if (t.boundRect == null)
t.boundRect = t.clickableRect;
if (DEBUG_TRACE_DRAG) logit('Clickable rect: ' + inspect(t.clickableRect, 3, 1));
if (DEBUG_TRACE_DRAG) logit('Body rect: ' + inspect(t.bodyRect, 3, 1));
if (DEBUG_TRACE_DRAG) logit('Bound rect: ' + inspect(t.boundRect, 3, 1));
t.bounds = {
top: 10 - t.clickableRect.height,
bot: t.bodyRect.height - 25,
left: 40 - t.clickableRect.width,
right: t.bodyRect.width - 25
};
if (DEBUG_TRACE_DRAG) logit("BOUNDS: " + inspect(t.bounds, 8, 10));
}
if (me.button == 0 && t.enabled) {
t.body.addEventListener('mousemove', t.moveHandler, true);
t.body.addEventListener('mouseout', t.outHandler, true);
t.lastX = me.clientX;
t.lastY = me.clientY;
t.moving = true;
}
}
}
function CeventUp(that) {
this.handler = handler;
var t = that;
function handler(me) {
if (DEBUG_TRACE_DRAG) t.dispEvent('eventUP', me);
if (me.button == 0 && t.moving)
_doneMoving(t);
}
}
function _doneMoving(t) {
if (DEBUG_TRACE_DRAG) logit('doneMoving');
t.body.removeEventListener('mousemove', t.moveHandler, true);
t.body.removeEventListener('mouseout', t.outHandler, true);
t.moving = false;
}
function CeventOut(that) {
this.handler = handler;
var t = that;
function handler(me) {
//t.dispEvent ('eventOUT', me);
if (me.button == 0) {
t.moveHandler(me);
}
}
}
function CeventMove(that) {
this.handler = handler;
var t = that;
function handler(me) {
if (t.enabled && !t.wentOut) {
//t.dispEvent ('eventMOVE', me);
var newTop = parseInt(t.theDiv.style.top) + me.clientY - t.lastY;
var newLeft = parseInt(t.theDiv.style.left) + me.clientX - t.lastX;
if (newTop < t.bounds.top) { // if out-of-bounds...
newTop = t.bounds.top;
_doneMoving(t);
} else if (newLeft < t.bounds.left) {
newLeft = t.bounds.left;
_doneMoving(t);
} else if (newLeft > t.bounds.right) {
newLeft = t.bounds.right;
_doneMoving(t);
} else if (newTop > t.bounds.bot) {
newTop = t.bounds.bot;
_doneMoving(t);
}
t.theDiv.style.top = newTop + 'px';
t.theDiv.style.left = newLeft + 'px';
t.lastX = me.clientX;
t.lastY = me.clientY;
}
}
}
function debug(msg, e) {
logit("*************** " + msg + " ****************");
logit('clientWidth, Height: ' + e.clientWidth + ',' + e.clientHeight);
logit('offsetLeft, Top, Width, Height (parent): ' + e.offsetLeft + ',' + e.offsetTop + ',' + e.offsetWidth + ',' + e.offsetHeight + ' (' + e.offsetParent + ')');
logit('scrollLeft, Top, Width, Height: ' + e.scrollLeft + ',' + e.scrollTop + ',' + e.scrollWidth + ',' + e.scrollHeight);
}
function dispEvent(msg, me) {
logit(msg + ' Button:' + me.button + ' Screen:' + me.screenX + ',' + me.screenY + ' client:' + me.clientX + ',' + me.clientY + ' rTarget: ' + me.relatedTarget);
}
}
function inspect(obj, maxLevels, level, doFunctions) {
var str = '',
type, msg;
if (level == null) level = 0;
if (maxLevels == null) maxLevels = 1;
if (maxLevels < 1)
return 'Inspect Error: Levels number must be > 0';
if (obj == null)
return 'ERROR: Object is NULL\n';
var indent = '';
for (var i = 0; i < level; i++)
indent += ' ';
for (property in obj) {
try {
type = matTypeof(obj[property]);
if (doFunctions == true && (type == 'function')) {
str += indent + '(' + type + ') ' + property + "[FUNCTION]\n";
} else if (type != 'function') {
str += indent + '(' + type + ') ' + property + ((obj[property] == null) ? (': null') : ('')) + ' = ' + obj[property] + "\n";
}
if ((type == 'object' || type == 'array') && (obj[property] != null) && (level + 1 < maxLevels))
str += inspect(obj[property], maxLevels, level + 1, doFunctions); // recurse
} catch (err) {
// Is there some properties in obj we can't access? Print it red.
if (typeof (err) == 'string') msg = err;
else if (err.message) msg = err.message;
else if (err.description) msg = err.description;
else msg = 'Unknown';
str += '(Error) ' + property + ': ' + msg + "\n";
}
}
str += "\n";
return str;
}
Array.prototype.compare = function (testArr) {
if (this.length != testArr.length) return false;
for (var i = 0; i < testArr.length; i++) {
if (this[i].compare) {
if (!this[i].compare(testArr[i])) return false;
}
if (this[i] !== testArr[i]) return false;
}
return true;
}
String.prototype.entityTrans = {
'&': '&',
'<': '<',
'>': '>',
'\"': '"',
'\'': ''',
'<': '\\u003c',
'/': '\\/',
'\\': '\\\\',
'\"': '\\\"',
'{': '{',
'}': '}'
};
String.prototype.htmlEntities = function () {
var ret = this.toString();
for (k in this.entityTrans)
ret = ret.split(k).join(this.entityTrans[k]);
return ret;
}
String.prototype.htmlSpecialCharsDecode = function () {
var ret = this.toString();
for (k in this.entityTrans)
ret = ret.split(this.entityTrans[k]).join(k);
return ret;
}
String.prototype.stripTags = function () {
return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi, '');
}
String.prototype.capitalize = function () {
return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
}
function objectName(o) {
var s = o.toString();
return s.substr(7, s.length - 8);
}
function matTypeof(v) {
if (v == undefined)
return 'undefined';
if (typeof (v) == 'object') {
if (!v)
return 'null';
else if (v.constructor.toString().indexOf("Array") >= 0 && typeof (v.splice) == 'function')
return 'array';
else return 'object';
}
return typeof (v);
}
function addCommasInt(n) {
nStr = Number(n, 10) + '';
return addCommasWhole(nStr);
}
function addCommas(nStr) {
nStr += '';
x = nStr.split('.');
x1 = x[0];
x2 = x.length > 1 ? '.' + x[1] : '';
var rgx = /(\d+)(\d{3})/;
while (rgx.test(x1)) {
x1 = x1.replace(rgx, '$1' + ',' + '$2');
}
return x1 + x2;
}
function addCommasWhole(nStr) {
nStr += '';
x = nStr.split('.');
x1 = x[0];
x2 = x.length > 1 ? '.' + x[1] : '';
var rgx = /(\d+)(\d{3})/;
while (rgx.test(x1)) {
x1 = x1.replace(rgx, '$1' + ',' + '$2');
}
return x1;
}
function htmlSelector(valNameObj, curVal, tags) {
m = [];
m.push('<SELECT');
if (tags) {
m.push(' ');
m.push(tags);
}
for (k in valNameObj) {
m.push('><OPTION ');
if (k == curVal)
m.push('SELECTED ');
m.push('value="');
m.push(k);
m.push('">');
m.push(valNameObj[k]);
m.push('</option>');
}
m.push('</select>');
return m.join('');
}
function toUnicode(theString) {
var unicodeString = '';
for (var i = 0; i < theString.length; i++) {
var theUnicode = theString.charCodeAt(i);
theUnicode = '&#' + theUnicode + ';';
unicodeString += theUnicode;
}
return unicodeString;
}
function unixTime() {
return parseInt(new Date().getTime() / 1000) + uW.g_timeoff;
}
function htmlOptions(a, curVal) {
m = '';
for (k in a)
m += '<OPTION value="' + k + '"' + (k == curVal ? ' SELECTED' : '') + '>' + a[k] + '</option>';
return m;
}
function getFunctionName(func) {
var name = /\W*function\s+([\w\$]+)\(/.exec(func);
if (!name)
return '';
return name[1];
}
function findAllBetween(txt, find1, find2) {
var m = [];
var last = 0;
while ((i1 = txt.indexOf(find1, last)) >= 0 && (i2 = txt.indexOf(find2, i1)) >= 0) {
m.push(txt.substring(i1 + find1.length, i2));
last = i2 + find2.length;
}
return m;
}
function strUpTo(s, find) {
var i = s.indexOf(find);
if (i > 0)
return s.substr(0, i);
return s;
}
/********
Xd Xh
Xh Xm
Xm Xs
Xs
********/
function timestrShort(time) {
time = parseInt(time);
if (time > 86400) {
var m = [];
time /= 3600;
m.push(parseInt(time / 24));
m.push('d ');
m.push(parseInt(time % 24));
m.push('h ');
return m.join('');
} else
return timestr(time);
}
/**********************
part full
Xd Xh Xm Xd Xh Xm Xs
Xh Xm Xh Xm Xs
Xm Xs Xm Xs
Xs Xs
**********************/
function timestr(time, full) {
time = parseInt(time);
var m = [];
var t = time;
if (t < 61)
return t + 's';
if (t > 86400) {
m.push(parseInt(t / 86400));
m.push('d ');
t %= 86400;
}
if (t > 3600 || time > 3600) {
m.push(parseInt(t / 3600));
m.push('h ');
t %= 3600;
}
m.push(parseInt(t / 60));
m.push('m');
if (full || time <= 3600) {
m.push(' ');
m.push(t % 60);
m.push('s');
}
return m.join('');
}
/************ LIB singletons .... **************/
// TODO: fix REopening window
var WINLOG_MAX_ENTRIES = 1000; // TODO
var WinLog = {
state: null,
win: null,
eOut: null,
lastE: null,
enabled: true,
reverse: true,
busy: false,
isOpening: false,
open: function () {
var t = WinLog;
function eventButClear() {
var t = WinLog;
t.lastE = null;
t.eOut.innerHTML = '';
}
function eventButReverse() {
var t = WinLog;
if (t.busy)
return;
t.busy = true;
if (t.reverse) {
t.win.document.getElementById('wlRev').value = 'Top';
t.reverse = false;
} else {
t.win.document.getElementById('wlRev').value = 'Bottom';
t.reverse = true;
}
var n = t.eOut.childNodes.length;
if (n < 2)
return;
for (i = n - 2; i >= 0; i--) {
t.eOut.appendChild(t.eOut.childNodes[i]);
}
t.busy = false;
}
if (!t.win || t.win.closed) {
t.isOpening = true;
// Firefox bug??? It appears as if a new thread is started on open, withOUT reusing same window
//t.win = window.open('', 'uwtrace', 'top=30,left=0,width=900,height=700,scrollbars=no,location=no,menubar=no,directories=no,status=no');
t.win = new CPopup('ptwinlog', 0, 0, 500, 800, true, function () {
t.win.destroy();
t.win = null;
t.win.closed = true;
});
t.win.show(true);
t.isOpening = false;
t.state = null;
}
if (t.state == null) {
t.win.getMainDiv().innerHTML = '<STYLE>pre{margin:0px} hr{margin:3px; height:1px; border:0px; color:#cee; background-color:#cee}</style>\
<BODY style="margin:0px; padding:0px; border:none">\
<DIV id=winlogtop style="background-color:#d0d0d0; margin:0px; padding:0px; border:1px solid">\
<INPUT id=wlClear type=submit value="Clear"> <INPUT id=wlRev type=submit value="Bottom"></div>\
<DIV id=wlOut style="overflow-y:auto; overflow-x:auto; height:750px; max-height:800px; width:600px"></div></body>';
document.getElementById('wlClear').addEventListener('click', eventButClear, false);
document.getElementById('wlRev').addEventListener('click', eventButReverse, false);
t.eOut = document.getElementById('wlOut');
t.lastE = null;
t.state = 1;
}
},
writeText: function (msg) {
WinLog.write(msg.htmlEntities());
},
write: function (msg) {
var t = WinLog;
if (!t.enabled || t.isOpening)
return;
t.open();
var te = document.createElement('pre');
var now = new Date();
var m = [];
var millis = now.getMilliseconds();
m.push(now.toTimeString().substring(0, 8));
m.push('.');
if (millis < 100)
m.push('0');
if (millis < 10)
m.push('0');
m.push(millis);
m.push(': ');
m.push(msg);
te.innerHTML = m.join('');
if (t.reverse) {
if (t.lastE == null) {
t.eOut.appendChild(te);
t.lastE = te;
} else {
t.eOut.insertBefore(te, t.lastE);
}
var hr = document.createElement('hr');
t.eOut.insertBefore(hr, te);
t.lastE = hr;
} else {
t.eOut.appendChild(te);
t.eOut.appendChild(document.createElement('hr'));
}
},
};
/***** tower tab edits *****/
Tabs.Tower = {
tabOrder: 41,
cont: null,
fixAvailable: {},
tabDisabled: !ENABLE_ALERT_TO_CHAT,
Providers: {
0: { 'country': "--Country--", 'provider': "--Provider--" },
1: { 'country': "AUSTRALIA", 'provider': "T-Mobile" },
2: { 'country': "AUSTRALIA", 'provider': "Optus Zoo" },
3: { 'country': "AUSTRIA", 'provider': "T-Mobile" },
4: { 'country': "BULGARIA", 'provider': "Mtel" },
5: { 'country': "BULGARIA", 'provider': "Globul" },
6: { 'country': "CANADA", 'provider': "Aliant" },
7: { 'country': "CANADA", 'provider': "Bell Mobility" },
8: { 'country': "CANADA", 'provider': "Fido" },
9: { 'country': "CANADA", 'provider': "MTS Mobility" },
10: { 'country': "CANADA", 'provider': "Rogers Wireless" },
11: { 'country': "CANADA", 'provider': "Sasktel Mobility" },
12: { 'country': "CANADA", 'provider': "Telus" },
13: { 'country': "CANADA", 'provider': "Virgin Mobile" },
14: { 'country': "CANADA", 'provider': "Presidents Choice" },
15: { 'country': "GERMANY", 'provider': "T-Mobile" },
16: { 'country': "GERMANY", 'provider': "Vodafone" },
17: { 'country': "GERMANY", 'provider': "O2" },
18: { 'country': "GERMANY", 'provider': "E-Plus" },
19: { 'country': "ICELAND", 'provider': "OgVodafone" },
20: { 'country': "ICELAND", 'provider': "Siminn" },
21: { 'country': "INDIA", 'provider': "Andhra Pradesh AirTel" },
22: { 'country': "INDIA", 'provider': "Andhra Pradesh Idea Cellular" },
23: { 'country': "INDIA", 'provider': "Chennal Skycell Airtel" },
24: { 'country': "INDIA", 'provider': "Chennel RPG Cellular" },
25: { 'country': "INDIA", 'provider': "Delhi Airtel" },
26: { 'country': "INDIA", 'provider': "Delhi Hutch" },
27: { 'country': "INDIA", 'provider': "Gujarat Idea Cellular" },
28: { 'country': "INDIA", 'provider': "Gujaret Airtel" },
29: { 'country': "INDIA", 'provider': "Gujaret Celforce" },
30: { 'country': "INDIA", 'provider': "Goa Airtel" },
31: { 'country': "INDIA", 'provider': "Goa BPL Mobile" },
32: { 'country': "INDIA", 'provider': "Goa Idea Cellular" },
33: { 'country': "INDIA", 'provider': "Haryana Airtel" },
34: { 'country': "INDIA", 'provider': "Haryana Escotel" },
35: { 'country': "INDIA", 'provider': "Himachal Pradesh Airtel" },
36: { 'country': "INDIA", 'provider': "Karnataka Airtel" },
37: { 'country': "INDIA", 'provider': "Kerala Airtel" },
38: { 'country': "INDIA", 'provider': "Kerala Escotel" },
39: { 'country': "INDIA", 'provider': "Kerala BPL Mobile" },
40: { 'country': "INDIA", 'provider': "Kolkata Airtel" },
41: { 'country': "INDIA", 'provider': "Madhya Pradesh Airtel" },
42: { 'country': "INDIA", 'provider': "Maharashtra Airtel" },
43: { 'country': "INDIA", 'provider': "Maharashtra BPL Mobile" },
44: { 'country': "INDIA", 'provider': "Maharashtra Idea Cellular" },
45: { 'country': "INDIA", 'provider': "Mumbai Airtel" },
46: { 'country': "INDIA", 'provider': "Mumbai BPL Mobile" },
47: { 'country': "INDIA", 'provider': "Punjab Airtel" },
48: { 'country': "INDIA", 'provider': "Pondicherry BPL Mobile" },
49: { 'country': "INDIA", 'provider': "Tamil Nadu Airtel" },
50: { 'country': "INDIA", 'provider': "Tamil Nadu BPL Mobile" },
51: { 'country': "INDIA", 'provider': "Tamil Nadu Aircel" },
52: { 'country': "INDIA", 'provider': "Uttar Pradesh West Escotel" },
53: { 'country': "IRELAND", 'provider': "Meteor" },
54: { 'country': "IRELAND", 'provider': "Meteor MMS" },
55: { 'country': "ITALY", 'provider': "TIM" },
56: { 'country': "ITALY", 'provider': "Vodafone" },
57: { 'country': "JAPAN", 'provider': "AU by KDDI" },
58: { 'country': "JAPAN", 'provider': "NTT DoCoMo" },
59: { 'country': "JAPAN", 'provider': "Vodafone Chuugoku/Western" },
60: { 'country': "JAPAN", 'provider': "Vodafone Hokkaido" },
61: { 'country': "JAPAN", 'provider': "Vodafone Hokuriko/Central North" },
62: { 'country': "JAPAN", 'provider': "Vodafone Kansai/West, including Osaka" },
63: { 'country': "JAPAN", 'provider': "Vodafone Kanto/Koushin/East including Tokyo" },
64: { 'country': "JAPAN", 'provider': "Vodafone Kyuushu/Okinawa" },
65: { 'country': "JAPAN", 'provider': "Vodafone Shikoku" },
66: { 'country': "JAPAN", 'provider': "Vodafone Touhoku/Niigata/North" },
67: { 'country': "JAPAN", 'provider': "Vodafone Toukai/Central" },
68: { 'country': "JAPAN", 'provider': "Willcom" },
69: { 'country': "JAPAN", 'provider': "Willcom di" },
70: { 'country': "JAPAN", 'provider': "Willcom dj" },
71: { 'country': "JAPAN", 'provider': "Willcom dk" },
72: { 'country': "NETHERLANDS", 'provider': "T-Mobile" },
73: { 'country': "NETHERLANDS", 'provider': "Orange" },
74: { 'country': "SINGAPORE", 'provider': "M1" },
75: { 'country': "SOUTH AFRICA", 'provider': "Vodacom" },
76: { 'country': "SPAIN", 'provider': "Telefonica Movistar" },
77: { 'country': "SPAIN", 'provider': "Vodafone" },
78: { 'country': "SWEDEN", 'provider': "Tele2" },
79: { 'country': "UNITED STATES", 'provider': "Teleflip" },
80: { 'country': "UNITED STATES", 'provider': "Alltel" },
81: { 'country': "UNITED STATES", 'provider': "Ameritech" },
82: { 'country': "UNITED STATES", 'provider': "ATT Wireless" },
83: { 'country': "UNITED STATES", 'provider': "Bellsouth" },
84: { 'country': "UNITED STATES", 'provider': "Boost" },
85: { 'country': "UNITED STATES", 'provider': "CellularOne" },
86: { 'country': "UNITED STATES", 'provider': "CellularOne MMS" },
87: { 'country': "UNITED STATES", 'provider': "Cingular" },
88: { 'country': "UNITED STATES", 'provider': "Edge Wireless" },
89: { 'country': "UNITED STATES", 'provider': "Sprint PCS" },
90: { 'country': "UNITED STATES", 'provider': "T-Mobile" },
91: { 'country': "UNITED STATES", 'provider': "Metro PCS" },
92: { 'country': "UNITED STATES", 'provider': "Nextel" },
93: { 'country': "UNITED STATES", 'provider': "O2" },
94: { 'country': "UNITED STATES", 'provider': "Orange" },
95: { 'country': "UNITED STATES", 'provider': "Qwest" },
96: { 'country': "UNITED STATES", 'provider': "Rogers Wireless" },
97: { 'country': "UNITED STATES", 'provider': "Telus Mobility" },
98: { 'country': "UNITED STATES", 'provider': "US Cellular" },
99: { 'country': "UNITED STATES", 'provider': "Verizon" },
100: { 'country': "UNITED STATES", 'provider': "Virgin Mobile" },
101: { 'country': "UNITED KINGDOM", 'provider': "O2 1" },
102: { 'country': "UNITED KINGDOM", 'provider': "O2 2" },
103: { 'country': "UNITED KINGDOM", 'provider': "Orange" },
104: { 'country': "UNITED KINGDOM", 'provider': "T-Mobile" },
105: { 'country': "UNITED KINGDOM", 'provider': "Virgin Mobile" },
106: { 'country': "UNITED KINGDOM", 'provider': "Vodafone" },
107: { 'country': "BELGIUM", 'provider': "mobistar" },
108: { 'country': "GERMANY", 'provider': "1und1" },
109: { 'country': "UNITED STATES", 'provider': "MyCricket" }
},
init: function (div) {
var t = Tabs.Tower;
t.cont = div;
try {
m = '<TABLE class=ptTab><TR><TD colspan=2><B>Alliance Report Scanner:</b></td></tr>';
m += '<TR><TD><INPUT id=togEnhanceAR type=checkbox /></td><TD>Enable post of Alliance Reports to Alliance Chat</td></tr>\
<TR><TD></td><TD><TABLE>\
<TR><TD>Min troops: <INPUT id=ptalertmtroops type=text size=6 value=' + Options.alertmtroops + ' /></TD></TR>\
<TR><TD>Scan interval: <INPUT id=ptalertinterval type=text size=3 value=' + Options.alertinterval + ' /> seconds\
<TR><TD><INPUT id=ptalerttext type=checkbox ' + (Options.celltext.enable ? 'CHECKED ' : '') + '/> Send text on alert</td></tr>\
<TR><TD colspan=2><table><tr><td align=left>Text message alert to: <INPUT id=ptnum1 type=text size=4 maxlength=4 value="' + Options.celltext.num1 + '" ' + (Options.celltext.provider == 0 ? 'DISABLED' : '') + '\> <INPUT id=ptnum2 type=text size=3 maxlength=3 value="' + Options.celltext.num2 + '" ' + (Options.celltext.provider == 0 ? 'DISABLED' : '') + '\> <INPUT id=ptnum3 type=text size=4 maxlength=4 value="' + Options.celltext.num3 + '" ' + (Options.celltext.provider == 0 ? 'DISABLED' : '') + '\></td></tr>\
<TR><TD align=left>Country: <select id="ptfrmcountry">';
for (var i in t.Providers) {
var ret = m.indexOf(t.Providers[i].country);
if (ret == -1) {
if (t.Providers[i].country == t.Providers[Options.celltext.provider].country) {
m += '<option value="' + t.Providers[i].country + '" selected="selected">' + t.Providers[i].country + '</option>'; // Load Previous Provider Selection
} else {
m += '<option value="' + t.Providers[i].country + '">' + t.Providers[i].country + '</option>';
}
}
}
m += '</select>\
<select id="ptfrmprovider" ' + (Options.celltext.provider == 0 ? 'DISABLED' : '') + '><option value=0 >--Provider--</option>';
for (var i in t.Providers) {
if (t.Providers[i].country == t.Providers[Options.celltext.provider].country)
if (Options.celltext.provider == i)
m += '<option value="' + i + '" selected="selected">' + t.Providers[i].provider + '</option>'; // Load Previous Provider Selection
else
m += '<option value="' + i + '">' + t.Providers[i].provider + '</option>';
}
m += '</select></td></tr></table></td></tr></table></td></tr></table>';
m += '<TABLE><TR><TD><BR><B>Extra Features:</b></td></tr>\
<TR><TD> Use Dove of Peace <INPUT id=verifyDove type=submit value="Press to Use Dove" \> (Opens a confirmation window)</td></tr></table>';
t.cont.innerHTML = m;
document.getElementById('ptalerttext').addEventListener('change', function (e) {
Options.celltext.enable = e.target.checked;
}, false);
document.getElementById('ptfrmcountry').addEventListener('change', t.setCountry, false);
document.getElementById('ptfrmprovider').addEventListener('change', t.setProvider, false);
document.getElementById('ptnum1').addEventListener('change', t.phonenum, false);
document.getElementById('ptnum2').addEventListener('change', t.phonenum, false);
document.getElementById('ptnum3').addEventListener('change', t.phonenum, false);
document.getElementById('ptalertinterval').addEventListener('change', function (e) {
Options.alertinterval = parseInt(e.target.value);
}, false);
document.getElementById('ptalertmtroops').addEventListener('change', function (e) {
Options.alertmtroops = parseInt(e.target.value);
}, false);
t.togOpt('togEnhanceAR', 'EnhanceAR', AllianceReportsCheck.enable);
document.getElementById('verifyDove').addEventListener ('click', t.verifyDove, false);
} catch (e) {
new CdialogCancelContinue('<PRE>' + inspect(e, 3, 1) + '</pre>', null, null, true);
t.cont.innerHTML = '<PRE>' + e.name + ' : ' + e.message + '</pre>';
}
},
phonenum: function () {
Options.celltext.num1 = document.getElementById('ptnum1').value;
Options.celltext.num2 = document.getElementById('ptnum2').value;
Options.celltext.num3 = document.getElementById('ptnum3').value;
},
setCountry: function () {
var t = Tabs.Tower;
var myselect = document.getElementById("ptfrmprovider");
myselect.innerHTML = '<option value=0 >--Provider--</option>';
myselect.disabled = true;
for (var i in t.Providers) {
if (t.Providers[i].country == document.getElementById("ptfrmcountry").value) {
var addoption = document.createElement('option');
addoption.value = i;
addoption.text = t.Providers[i].provider;
myselect.add(addoption, null) //add new option to end of "Providers"
}
}
myselect.disabled = false;
},
setProvider: function () {
var ddProvider = document.getElementById("ptfrmprovider").wrappedJSObject;
Options.celltext.provider = ddProvider.options[ddProvider.selectedIndex].value;
if (ddProvider.selectedIndex > 0) {
document.getElementById("ptnum1").disabled = false;
document.getElementById("ptnum2").disabled = false;
document.getElementById("ptnum3").disabled = false;
} else {
document.getElementById("ptnum1").disabled = true;
document.getElementById("ptnum2").disabled = true;
document.getElementById("ptnum3").disabled = true;
}
//alert(Options.celltext.provider);
},
hide: function () {},
show: function () {},
togOpt: function (checkboxId, optionName, callEnable, callIsAvailable) {
var t = Tabs.Tower;
var checkbox = document.getElementById(checkboxId);
if (callIsAvailable && callIsAvailable() == false) {
checkbox.disabled = true;
return;
}
if (Options[optionName])
checkbox.checked = true;
checkbox.addEventListener('change', new eventToggle(checkboxId, optionName, callEnable).handler, false);
function eventToggle(checkboxId, optionName, callOnChange) {
this.handler = handler;
var optName = optionName;
var callback = callOnChange;
function handler(event) {
Options[optionName] = this.checked;
saveOptions();
if (callback != null)
callback(this.checked);
}
}
},
useDove : function (){
var t = Tabs.Tower;
t.doveStatus = ById ('verifyDiv');
var params = uW.Object.clone(uW.g_ajaxparams);
new MyAjaxRequest(uW.g_ajaxpath + "ajax/doveOut.php" + uW.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (rslt) {
if (rslt.ok) {
t.doveStatus.innerHTML = "<center><font size='3px'><b>Dove Success!</b></font></center>";
} else {
t.doveStatus.innerHTML = "<center><font size='3px'><b>Dove Fail!</b></font></center>";
}
},
onFailure: function () {
}
});
},
verifyDove : function() {
var t = Tabs.Tower;
var popDove = null;
popDove = new CPopup('ptVerifyDove', 0, -100, 500, 50, true, function() {clearTimeout (1000);});
popDove.centerMe (mainPop.getMainDiv());
var m = '<DIV style="max-height:50px; height:50px; overflow-y:auto"><TABLE align=center cellpadding=0 cellspacing=0 width=100% class="pbShowBarbs" id="pbBars">';
m += '<tr><TD align=center><b> ARE YOU SURE? </b> Click if yes, close if no <INPUT id=useDove type=submit value="YESSSS!!!!" \></td></tr>';
m += '<tr><td align=center><div id=verifyDiv style="overflow-y:auto; max-height:20px; height: 20px;"></div></td></tr>';
popDove.getMainDiv().innerHTML = '</table></div>' + m;
popDove.show(true);
document.getElementById('useDove').addEventListener ('click', t.useDove, false);
},
}
var AllianceReportsCheck = {
aRpt: {},
init: function () {
var t = AllianceReportsCheck;
var b = GM_getValue('allianceRpt_' + GetServerId());
if (b != null)
t.aRpt = JSON2.parse(b);
else {
t.aRpt = {};
}
t.enable(Options.EnhanceAR);
},
enable: function (tf) {
var t = AllianceReportsCheck;
if (Options.EnhanceAR)
t.checkAllianceReport();
setTimeout(function () {
t.enable(Options.EnhaceAR);
}, parseInt((Math.random() * 15 * 1000) + (Options.alertinterval * 1000)));
},
checkAllianceReport: function () {
var t = AllianceReportsCheck;
var params = unsafeWindow.Object.clone(unsafeWindow.g_ajaxparams);
params.group = "a";
new MyAjaxRequest(unsafeWindow.g_ajaxpath + "ajax/listReports.php" + unsafeWindow.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (rslt) {
t.parseAReports(rslt.arReports, rslt.arPlayerNames, rslt.arAllianceNames, rslt.arCityNames, rslt.totalPages);
},
onFailure: function (rslt) {},
}, false);
},
parseAReports: function (ar, playerNames, allianceNames, cityNames, totalPages) {
var t = AllianceReportsCheck;
var myAllianceId = getMyAlliance()[0];
var rptkeys = unsafeWindow.Object.keys(ar);
if (matTypeof(ar) != 'array') {
for (var i = 0; i < rptkeys.length; i++) {
var rpt = ar[rptkeys[i]];
rpt.side0AllianceId = parseInt(rpt.side0AllianceId);
var targetDiplomacy = getDiplomacy(rpt.side0AllianceId);
if (rpt.side1AllianceId != myAllianceId) {
var ID = rpt.reportId;
if (t.aRpt["a" + ID] != null)
return;
if (rpt.marchType == 3)
atkType = 'scouted';
else if (rpt.marchType == 4)
atkType = 'attacked';
if (rpt.side0TileType > 50)
target = "city";
else if (rpt.side0TileType <= 50)
target = "wild";
if (rpt.side1AllianceId == 0)
var allianceName = 'Undefined';
else
var allianceName = allianceNames["a" + rpt.side1AllianceId];
var date = unsafeWindow.formatDateByUnixTime(rpt.reportUnixTime);
var msg = 'Report No: ' + rpt.reportId + ' ' + date + ' : ' + playerNames['p' + rpt.side0PlayerId] + '\'s ' + target + ' at ' + rpt.side0XCoord + ',' + rpt.side0YCoord + ' has been ' + atkType + ' by ' + playerNames["p" + rpt.side1PlayerId] + ' at ' + rpt.side1XCoord + ',' + rpt.side1YCoord + ' of ' + allianceName + '(' + getDiplomacy(rpt.side1AllianceId) + ')';
t.fetchreport(ID, rpt, msg, playerNames, cityNames);
t.addAllianceReport(rpt);
}
}
}
},
addAllianceReport: function (rpt) {
t = AllianceReportsCheck;
var ID = rpt.reportId;
t.aRpt["a" + ID] = rpt.reportUnixTime;
var now = unixTime() - (5 * 24 * 60 * 60);
for (k in t.aRpt) {
if (t.aRpt[k] < now)
delete t.aRpt[k];
}
var string = JSON2.stringify(t.aRpt);
//t.towerMarches['m'+m.mid]
setTimeout(function () {
GM_setValue("allianceRpt_" + GetServerId(), string);
}, 0);
},
postToCell: function (m, playerNames, cityNames) {
var t = AllianceReportsCheck;
var data = [];
if (m.marchType == 3) {
data.atkType = 'scout';
} else if (m.marchType == 4) {
data.atkType = 'atk';
} else {
return;
}
if (m.side0TileType > 50)
data.target = 'city (' + m.side0XCoord + ',' + m.side0YCoord + ')';
else {
data.target = 'wild (' + m.side0XCoord + ',' + m.side0YCoord + ')';
}
data.who = playerNames["p" + m.side1PlayerId] + ' (' + m.side1XCoord + ',' + m.side1YCoord + ')';
//data.arrival = unsafeWindow.timestr(parseInt(m.reportUnixTime - unixTime()));
data.arrival = unsafeWindow.formatDateByUnixTime(m.reportUnixTime);
data.totTroops = ' ';
data.provider = Options.celltext.provider;
data.num1 = Options.celltext.num1;
data.num2 = Options.celltext.num2;
data.num3 = Options.celltext.num3;
data.serverId = GetServerId();
data.player = playerNames['p' + m.side0PlayerId];
data.city = cityNames['c' + m.side0CityId];
GM_xmlhttpRequest({
method: 'POST',
url: 'https://baos.kocscripters.com/index.php',
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
},
data: implodeUrlArgs(data),
})
},
fetchreport: function (rpId, rpt, msg, playerNames, cityNames) {
var t = AllianceReportsCheck;
if (Options.alertmtroops == 0) {
var automsg = sendChat('/a ' + msg);
if (Options.celltext.enable)
t.postToCell(rpt, playerNames, cityNames);
if (Options.alertConfig.sound)
AudioAlert.sound(true);
} else {
var params = uW.Object.clone(uW.g_ajaxparams);
params.rid = rpId;
new MyAjaxRequest(uW.g_ajaxpath + "ajax/fetchReport.php" + uW.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (rslt) {
var troops = rslt.detail.fght.s1;
var trooptot = 0;
for (i in troops) {
trooptot += Number(troops[i][0]);
}
if (Options.alertmtroops > trooptot) return;
var automsg = sendChat('/a ' + msg + ' troops ' + trooptot);
if (Options.celltext.enable)
t.postToCell(rpt, playerNames, cityNames);
if (Options.alertConfig.sound)
AudioAlert.sound(true);
},
onFailure: function () {},
}, false);
}
},
}
function reloadKOC() {
var serverId = GetServerId();
if (serverId == '??') window.location.reload(true);
var goto = 'https://apps.facebook.com/kingdomsofcamelot/?s=' + serverId;
var t = '<FORM target="_top" action="' + goto + '" method=post><INPUT id=xxpbButReload type=submit value=RELOAD><INPUT type=hidden name=s value="' + serverId + '"</form>';
var e = document.createElement('div');
e.innerHTML = t;
document.body.appendChild(e);
setTimeout(function () {
document.getElementById('xxpbButReload').click();
}, 0);
}
function formatUnixTime(unixTimeString, format) {
var rtn = unsafeWindow.formatDateByUnixTime(unixTimeString);
/*if (format=='24hour') {
if (rtn.substr(14,2)=='AM')
rtn = rtn.substr(0,13);
else
rtn = rtn.substr(8,2)+' '+rtn.substr(0,8)+(parseInt(rtn.substr(8,2))+12)+rtn.substr(10,3);
} */
return rtn;
}
var cdtd = {
views: null,
init: function () {
var t = cdtd;
t.views = new CalterUwFunc("citysel_click",[[/cm\.PrestigeCityView\.render\(\)/im,'cm.PrestigeCityView.render();cdtdhook();']]);
unsafeWindow.cdtdhook = t.citychange;
if (Options.EnhCBtns) {
t.views.setEnable(true);
unsafeWindow.update_citylist2 = unsafeWindow.update_citylist;
unsafeWindow.update_citylist = function (e) {
unsafeWindow.update_citylist2(e);
cdtd.drawdefendstatus();
};
if (Options.ColrCityBtns) t.replace();
t.drawdefendstatus();
};
},
citychange: function () {
cdtd.drawdefendstatus();
Tabs.Options.checkAscension(); // ascension expiry tied into enhanced city buttons
},
drawdefendstatus: function () {
var t = cdtd;
for (i = 0; i < unsafeWindow.seed.cities.length; i++) {
var cityidx = i + 1;
var city = document.getElementById('citysel_' + cityidx);
if (!city) {
setTimeout(t.drawdefendstatus, 100);
return;
}
var cityid = 'city' + unsafeWindow.seed.cities[i][0];
city.style.border = '2px inset';
city.style.display = 'inline'; // NEED HELP HERE.. CSS EXPERTS??
//var tw = Math.floor((Number(document.getElementById('mod_citylist').offsetWidth)-18.5)/9);
city.style.width = 10 + '%';
//city.style.height = tw+'px';
//city.style.boxShadow='inset 0px 0px 0px 0px';
//city.style.box-shadow='inset 0px 0px 0px 0px';
if (unsafeWindow.seed.citystats[cityid].gate == 0) {
city.style.color = 'blue';
} else {
city.style.color = 'red';
}
if (Options.DbClkDefBtns) {
city.ondblclick = function () {
logit('id is ' + this.id);
logit('target is ' + this.name);
t.setdefendstatus(this.name);
//setTimeout(t.drawdefendstatus,1000);
};
}
}
},
setdefendstatus: function (city) {
var t = cdtd;
var state = 1;
if (uW.seed.citystats["city" + city].gate != 0)
state = 0;
var params = uW.Object.clone(uW.g_ajaxparams);
params.cid = city;
params.state = state;
new AjaxRequest(uW.g_ajaxpath + "ajax/gate.php" + uW.g_ajaxsuffix, {
method: "post",
parameters: params,
onSuccess: function (message) {
var rslt = eval("(" + message.responseText + ")");
if (rslt.ok) {
uW.seed.citystats["city" + city].gate = state;
t.drawdefendstatus();
}
},
onFailure: function () {
t.drawdefendstatus();
},
});
},
// Nico's code with revised colors
insert: function () {
var t = cdtd;
for (i = 0; i < unsafeWindow.seed.cities.length; i++) {
color = "black";
cityID = unsafeWindow.seed.cities[i][0];
if (unsafeWindow.seed.cityData.city[cityID].isPrestigeCity) {
if (unsafeWindow.seed.cityData.city[cityID].prestigeInfo.prestigeType) {
switch (parseInt(unsafeWindow.seed.cityData.city[cityID].prestigeInfo.prestigeType)) {
case 1: color = "#228b22";break;
case 2: color = "#A944DB";break;
case 3: color = "#E36600";break;
}
}
}
document.getElementById('mod_citylist').children[i].innerHTML = "<SPAN><FONT fontFamily='georgia,​arial,​sans-serif' font-weight=700 font-size=10px color=" + color + ">" + unsafeWindow.roman[i] + "</font></span>";
}
},
replace: function () {
var t = cdtd;
var oldFunction = unsafeWindow.update_citylist;
unsafeWindow.update_citylist = function () {
t.insert();
return oldFunction();
};
},
}
function CheckCityMarches(cityID) {
var Counter = 0;
if (Seed.queue_atkp['city' + cityID] != undefined) {
for (atkp in Seed.queue_atkp['city' + cityID])
if (Seed.queue_atkp['city' + cityID][atkp]["marchUnixTime"]) Counter++;
} else Counter = 0;
return Counter;
}
function getRallypoint(cityId) {
var rallypointlevel = 0;
for (var o in Seed.buildings["city" + cityId]) {
var buildingType = parseInt(Seed.buildings["city" + cityId][o][0]);
var buildingLevel = parseInt(Seed.buildings["city" + cityId][o][1]);
if (buildingType == 12) {
rallypointlevel = parseInt(buildingLevel);
if (rallypointlevel == 12) rallypointlevel = 11;
}
}
if (Seed.cityData.city[cityId].isPrestigeCity) rallypointlevel += 3;
return rallypointlevel;
}
var Market = new CalterUwFunc ('modal_marketplace', [[/maxlength..\d./gim, '']]);
Market.setEnable(true);
function Sendcourtdata(courtdata) {
if (Math.floor((Math.random() * 1000) + 1) > throttle) return;
var params = {};
params.courtdata = btoa(RawDeflate.deflate(JSON.stringify(courtdata)));
params.gz = true;
params.server = Number(GetServerId());
params.tvuid = Number(unsafeWindow.tvuid);
GM_xmlhttpRequest({
method: 'POST',
url: 'https://kocscripters.com/courtdat.php',
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
},
data: implodeUrlArgs(params),
onload: function (message) {
if (message.status != 200) throttle = 0;
else {
var rslt = eval("(" + message.responseText + ")");
if (rslt.ok) throttle = Number(rslt.throttle);
};
},
})
};
function getDST(today) {
var yr = today.getFullYear();
var dst_start = new Date("March 14, "+yr+" 02:00:00"); // 2nd Sunday in March can't occur after the 14th
var dst_end = new Date("November 07, "+yr+" 02:00:00"); // 1st Sunday in November can't occur after the 7th
var day = dst_start.getDay(); // day of week of 14th
dst_start.setDate(14-day); // Calculate 2nd Sunday in March of this year
day = dst_end.getDay(); // day of the week of 7th
dst_end.setDate(7-day); // Calculate first Sunday in November of this year
var dstadj = 0;
if (today >= dst_start && today < dst_end) { //does today fall inside of DST period?
dstadj = (3600); // 60 mins!
}
return dstadj;
}
ptStartup();