hwm_ecostat_adv

Ecostat advanced by перф

当前为 2015-09-30 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name hwm_ecostat_adv
  3. // @description Ecostat advanced by перф
  4. // @namespace перф
  5. // @homepage http://elfius.com/forum_new/index.php?showtopic=760
  6. // @version 4.11
  7. // @include http://*heroeswm.*/map.php*
  8. // @include http://*heroeswm.*/ecostat*
  9. // @include http://*heroeswm.*/object-info.php*
  10. // @include http://*heroeswm.*/mercenary_guild.php*
  11. // @include http://178.248.235.15/map.php*
  12. // @include http://178.248.235.15/ecostat*
  13. // @include http://178.248.235.15/object-info.php*
  14. // @include http://178.248.235.15/mercenary_guild.php*
  15. // ==/UserScript==
  16.  
  17. // (c) 2009, LazyGreg http://www.heroeswm.ru/pl_info.php?id=160839
  18. // (c) 2010-2012, demin (http://www.heroeswm.ru/pl_info.php?id=15091)
  19. // (c) 2013, перф (http://www.heroeswm.ru/pl_info.php?id=2188492)
  20.  
  21. // 4.11 30.09.2015 добавлен сектор Sublime Arbor.
  22. // 4.10 11.12.2013 полностью переработан алгоритм получения баланса и времени (быстрее обрабатывает, сохраняет баланс даже если нет Окончания смены).
  23. // 4.06 10.12.2013 выделение цветом времени объектов за последние 5 минут при балансе >1000з.
  24. // 4.05 19.11.2013 добавлены новые сектора, 5 переменных для хранения значений.
  25. // 4.03 09.10.2013 fix для FF3.6.
  26. // 4.02 09.10.2013 Предприятия разбиты в 3 переменных в зависимости от id; Выделение цветом и жирным ячейки "Может купить" в таблице статистики.
  27. // 4.01 Добавлены балансы
  28.  
  29. var url_cur = location.href;
  30. var url = 'http://'+location.hostname+'/';
  31. var chunks = 5; // количество переменных для хранения статистики
  32. var chunk = 100; // количество obj_id в одной переменной
  33. var BalBorder = 1000; //граница баланса для выделения цветом времени объёктов.
  34.  
  35. try {
  36.  
  37. if (!this.GM_getValue || (this.GM_getValue.toString && this.GM_getValue.toString().indexOf("not supported")>-1)) {
  38. this.GM_getValue=function (key,def) {
  39. return localStorage[key] || def;
  40. };
  41. this.GM_setValue=function (key,value) {
  42. return localStorage[key]=value;
  43. };
  44. this.GM_deleteValue=function (key) {
  45. return delete localStorage[key];
  46. };
  47. }
  48.  
  49. // ===== ID - Location lookup table =====
  50. var id2loc = [];
  51. var o;
  52. // == create objects with loc info
  53. o = {};
  54. o.abbr = "EmC";
  55. o.name = "Empire Capital";
  56. o.colr = "#000000";
  57. o.ids = [3,4,5,6,7,8,9,10,11,12,32,34,38,165];
  58. id2loc.push(o);
  59. //
  60. o = {};
  61. o.abbr = "EsR";
  62. o.name = "East River";
  63. o.colr = "#000000";
  64. o.ids = [23,24,25,26,28,33,36,75,87,89,238,258,279,300,321,342];
  65. id2loc.push(o);
  66. //
  67. o = {};
  68. o.abbr = "PoR";
  69. o.name = "Portal's Ruins";
  70. o.colr = "#FF0000";
  71. o.ids = [92,93,99,100,102,118,163,211,217,228,245,266,287,308,329,350];
  72. id2loc.push(o);
  73. //
  74. o = {};
  75. o.abbr = "WoD";
  76. o.name = "Wolf's Dale";
  77. o.colr = "#000000";
  78. o.ids = [43,44,45,46,47,48,74,85,86,226,241,261,282,303,324,345];
  79. id2loc.push(o);
  80. //
  81. o = {};
  82. o.abbr = "LzL";
  83. o.name = "Lizard's Lowland";
  84. o.colr = "#009900";
  85. o.ids = [56,57,58,59,60,61,63,64,80,83,242,263,284,305,326,347];
  86. id2loc.push(o);
  87. //
  88. o = {};
  89. o.abbr = "GrW";
  90. o.name = "Green Wood";
  91. o.colr = "#009900";
  92. o.ids = [67,68,69,70,71,72,76,77,81,88,243,264,285,306,327,348];
  93. id2loc.push(o);
  94. //
  95. o = {};
  96. o.abbr = "SnC";
  97. o.name = "Sunny City";
  98. o.colr = "#CC6600";
  99. o.ids = [103,104,105,106,107,115,116,213,220,231,248,269,290,311,332,353];
  100. id2loc.push(o);
  101. //
  102. o = {};
  103. o.abbr = "ShS";
  104. o.name = "Shining Spring";
  105. o.colr = "#009900";
  106. o.ids = [108,109,110,111,112,113,114,117,219,230,247,268,289,310,331,352];
  107. id2loc.push(o);
  108. //
  109. o = {};
  110. o.abbr = "EgN";
  111. o.name = "Eagle's Nest";
  112. o.colr = "#CC6600";
  113. o.ids = [94,95,97,98,101,119,120,139,140,227,244,265,286,307,328,349];
  114. id2loc.push(o);
  115. //
  116. o = {};
  117. o.abbr = "PcC";
  118. o.name = "Peaceful Camp";
  119. o.colr = "#CC6600";
  120. o.ids = [49,50,51,52,53,54,55,73,79,82,141,262,283,304,325,346];
  121. id2loc.push(o);
  122. //
  123. o = {};
  124. o.abbr = "TgL";
  125. o.name = "Tiger's Lake";
  126. o.colr = "#000000";
  127. o.ids = [13,14,15,16,27,31,35,39,84,224,239,259,280,301,322,343];
  128. id2loc.push(o);
  129. //
  130. o = {};
  131. o.abbr = "RgW";
  132. o.name = "Rogue's Wood";
  133. o.colr = "#000000";
  134. o.ids = [18,19,20,21,22,30,37,78,90,225,240,260,281,302,323,344];
  135. id2loc.push(o);
  136. //
  137. //
  138. o = {};
  139. o.abbr = "MgM";
  140. o.name = "Magma Mines";
  141. o.colr = "#3300FF";
  142. o.ids = [121,122,135,142,143,144,145,164,216,232,249,270,291,312,333,354];
  143. id2loc.push(o);
  144. //
  145. o = {};
  146. o.abbr = "BrM";
  147. o.name = "Bear' Mountain";
  148. o.colr = "#3300FF";
  149. o.ids = [123,124,125,136,146,147,148,149,214,215,250,271,292,313,334,355];
  150. id2loc.push(o);
  151. //
  152. o = {};
  153. o.abbr = "FrT";
  154. o.name = "Fairy Trees";
  155. o.colr = "#3300FF";
  156. o.ids = [126,127,134,150,151,152,153,212,221,233,251,272,293,314,335,356];
  157. id2loc.push(o);
  158. //
  159. o = {};
  160. o.abbr = "MfC";
  161. o.name = "Mythril Coast";
  162. o.colr = "#3300FF";
  163. o.ids = [128,129,130,137,138,154,155,156,157,235,253,274,295,316,337,358];
  164. id2loc.push(o);
  165. //
  166. o = {};
  167. o.abbr = "PrC";
  168. o.name = "Port City";
  169. o.colr = "#3300FF";
  170. o.ids = [131,132,133,158,159,160,161,162,222,234,252,273,294,315,336,357];
  171. id2loc.push(o);
  172. //
  173. o = {};
  174. o.abbr = "FsV";
  175. o.name = "Fishing Village";
  176. o.colr = "#FF0000";
  177. o.ids = [166,174,175,196,197,198,199,200,223,236,256,277,298,319,340,361];
  178. id2loc.push(o);
  179. //
  180. o = {};
  181. o.abbr = "DrC";
  182. o.name = "Dragons's Caves";
  183. o.colr = "#000000";
  184. o.ids = [167,168,169,170,171,172,209,210,218,229,246,267,288,309,330,351];
  185. id2loc.push(o);
  186. //
  187. o = {};
  188. o.abbr = "GtW";
  189. o.name = "Great Wall";
  190. o.colr = "#FF0000";
  191. o.ids = [173,178,179,192,193,194,195,201,202,203,254,275,296,317,338,359];
  192. id2loc.push(o);
  193. //
  194. o = {};
  195. o.abbr = "TiV";
  196. o.name = "Titans' Valley";
  197. o.colr = "#FF0000";
  198. o.ids = [176,177,187,188,189,190,191,206,207,208,255,276,297,318,339,360];
  199. id2loc.push(o);
  200. //
  201. o = {};
  202. o.abbr = "KiC";
  203. o.name = "Kingdom Castle";
  204. o.colr = "#FF0000";
  205. o.ids = [180,181,182,183,184,185,186,204,205,237,257,278,299,320,341,362];
  206. id2loc.push(o);
  207. //
  208. o = {};
  209. o.abbr = "UnS";
  210. o.name = "Ungovernable Steppe";
  211. o.colr = "#CC6600";
  212. o.ids = [363,364,365,366,369,370,371,372,373,374,375,376,377,378,379,380];
  213. id2loc.push(o);
  214. //
  215. o = {};
  216. o.abbr = "CrG";
  217. o.name = "Crystal Garden";
  218. o.colr = "#CC6600";
  219. o.ids = [367,368,381,382,383,384,385,386,387,388,389,390,391,392,393,394];
  220. id2loc.push(o);
  221. //
  222. o = {};
  223. o.abbr = "Wld";
  224. o.name = "The Wilderness";
  225. o.colr = "#009900";
  226. o.ids = [395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410];
  227. id2loc.push(o);
  228. //
  229. o = {};
  230. o.abbr = "SbA";
  231. o.name = "Sublime Arbor";
  232. o.colr = "#009900";
  233. o.ids = [411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426];
  234. id2loc.push(o);
  235.  
  236. //
  237.  
  238. for (var i=0; i<chunks; i++) {
  239. if( !GM_getValue("hwm_ecost_adv_times"+i) ) GM_setValue("hwm_ecost_adv_times"+i, '|2000_00_0');
  240. }
  241. var wtime_regexp = /: (\d+):(\d+)/;
  242. var id_regexp = /id=(\d+)/;
  243. var isEcostat = (url_cur.indexOf("/ecostat_details.php") != -1);
  244. var isMap = (url_cur.indexOf("/map.php") != -1);
  245. var isMercenary = (url_cur.indexOf("/mercenary_guild.php") != -1);
  246. var hwm_check_time = GM_getValue("hwm_check_time", '1'); // see time
  247. var hwm_check_del = GM_getValue("hwm_check_del", '1'); // delete vladelez
  248. var hwm_check_full = GM_getValue("hwm_check_full", '1'); // full name
  249. var naStr = "&nbsp;<b>[n/a]</b>,<font style=color:#666666>000</font style>";
  250.  
  251. var bt = document.createElement('b');
  252. bt.innerHTML = ' &#9650;';
  253. bt.title = "Настройки скрипта";
  254. addEvent(bt, "click", setting_ts);
  255.  
  256. var all_a = tag('b');
  257. var a_len = all_a.length;
  258. for (var i=a_len; i--;) {
  259. var a_i = all_a[i];
  260. if ( a_i.innerHTML.match(/татистика/) ) {
  261. if ( location.pathname=='/map.php' ) {
  262. a_i.parentNode.parentNode.insertBefore(bt, a_i.parentNode.nextSibling);
  263. } else {
  264. a_i.parentNode.insertBefore(bt, a_i.nextSibling);
  265. }
  266. break;
  267. }
  268. }
  269.  
  270. if (url_cur.indexOf("/object-info.php")!=-1) {
  271.  
  272. var obj_id = id_regexp.exec(url_cur)[1];
  273. var b_id = (tag('body'))[0].innerHTML;
  274. recordWorkTime(obj_id,b_id);
  275.  
  276. } else {
  277. makeLinks();
  278.  
  279. var d = document.createElement('iframe');
  280. d.setAttribute( 'style' , 'position:absolute; top:0; width:100; height:30; visibility:hidden;' );
  281. document.body.appendChild(d);
  282.  
  283. editTables();
  284. }
  285.  
  286. } finally { }
  287.  
  288.  
  289. function editTables(){
  290. if (isMap) {
  291. // Очищаем столбец Владелец.
  292. var t_all = tag('TABLE') ;
  293. for (var i=t_all.length; i--;) {
  294. var re = new RegExp('Владелец');
  295. if ( t_all[i].rows[0].cells[1] != undefined ) {
  296. var matches = re.exec(t_all[i].rows[0].cells[1].textContent);
  297. if (matches) {
  298. var table=t_all[i];
  299. for (var j = 0; j < table.rows.length; j++) {
  300. var cell = table.rows[j].cells[1];
  301. while (cell.childNodes.length > 0)
  302. delete cell.removeChild(cell.firstChild);
  303. // cell.style.display="none"; // вешает!
  304. }
  305. break;
  306. }
  307. }
  308. }
  309. } else if (isEcostat) {
  310. // Меняем "Может купить"
  311. var t_all = tag('TABLE') ;
  312. for (var i=t_all.length; i--;) {
  313. var table=t_all[i];
  314. if ( t_all[i].rows[0].cells[1] != undefined ) {
  315. if ( table.rows[0].cells[1].textContent.match('Может купить') ) {
  316. table.rows[0].cells[1].firstChild.textContent = "Куп.";
  317. table.rows[0].cells[0].width = "85%";
  318. for (var j = 1; j < table.rows.length; j++) {
  319. var cell = table.rows[j].cells[1];
  320. if ( parseInt(cell.firstChild.textContent)>0 ) {
  321. // cell.style.color="#006699";
  322. cell.style.fontWeight = "bold";
  323. // cell.style.textDecoration = "blink";
  324. cell.style.backgroundColor="#CCFF99";
  325. }
  326. }
  327. }
  328. if ( table.rows[0].cells[1].textContent.match('Может продать') ) {
  329. table.rows[0].cells[1].firstChild.textContent = "Ресурс";
  330. table.rows[0].cells[0].width = "70%";
  331. break;
  332. }
  333. }
  334. }
  335. }
  336. }
  337.  
  338. function recordWorkTime(obj_id,text)
  339. {
  340. var chunk_num=Math.floor(obj_id/chunk);
  341. //GM_log(obj_id +"="+ chunk_num);
  342. var times_str = GM_getValue("hwm_ecost_adv_times"+chunk_num);
  343.  
  344. // Получаем Баланас только для нормально открытой страницы, т.к. XMLHttpRequest всё равно не передаёт нормально русские символы
  345. //objectBalance = 0;
  346. /*var t_all = document.getElementsByTagName ('TABLE')
  347. for (var i=t_all.length; i--;) {
  348. var re = new RegExp('Баланс:');
  349. var matches = re.exec(t_all[i].rows[0].cells[0].textContent);
  350. if (matches) {
  351. objectBalance = Number(t_all[i].rows[0].cells[1].textContent.replace(/\D/g, ""))
  352. break;
  353. }
  354. }
  355. // И больше ничего не делаем
  356. */
  357.  
  358. var objectBalance = 0;
  359. var objectMinutes = "99";
  360. //var objectMinutes = new Date().getMinutes();
  361. //objectMinutes = Math.floor(objectMinutes/5)*5; // округляем в меньшую сторону; нужно учесть 0 или 5 - краш при разборе строки (d{2})
  362.  
  363. var responseObj = document.implementation.createHTMLDocument(null);
  364. var body_2=-1;
  365. var body_1=text.indexOf("<body");
  366. if (body_1==-1) body_1=text.indexOf("<BODY"); // надо учесть регистры
  367. if (body_1!=-1) {
  368. body_2=text.indexOf("<\/BODY>");
  369. if (body_2==-1) body_2=text.indexOf("<\/body>");
  370. }
  371. if (body_2!=-1) {text=text.substring(body_1,body_2+7);}
  372. //GM_log (text);
  373.  
  374. responseObj.documentElement.innerHTML = text; // нужно вынуть только то что в <BODY> а то засирает консоль ошибок предупреждениями.
  375.  
  376. var tables = responseObj.querySelectorAll("table");
  377. for (var i=tables.length; i--;) {
  378. var gold_img = tables[i].querySelectorAll("img[src*='gold.gif']");
  379. if (gold_img.length==2) {
  380. objectBalance = Number(gold_img[0].parentNode.nextSibling.textContent.replace(/\D/g, ""))
  381. var ta = wtime_regexp.exec(tables[i].innerHTML);
  382. if (ta) { objectMinutes = ta[2]; }
  383. break;
  384. }
  385. }
  386.  
  387. var new_time = obj_id+"_"+objectMinutes+"_"+objectBalance;
  388. if (times_str.indexOf("|"+obj_id+"_")==-1) { // very 1st visit
  389. times_str += "|"+new_time;
  390. } else {
  391. var vt_regexp = obj_id+"_\(\\d\{2\}\)_\(\\d\+\)";
  392. var vtR = new RegExp( vt_regexp );
  393. times_str = times_str.replace(vtR, new_time);
  394. }
  395.  
  396. /*if (ta) {
  397.  
  398. PosBal = text.indexOf(ta[1]+':'+ta[2]);
  399. BalS = text.substring(PosBal-650, PosBal-250);
  400. if ( BalS.match(/gold.gif.+?<\/td><td><b>(.+)<\/b><\/td><\/tr>/) ) {
  401. objectBalance = Number( (RegExp.$1).replace(/\D/g, "") );
  402.  
  403.  
  404. var new_time = obj_id+"_"+ta[2]+"_"+objectBalance;
  405. if (times_str.indexOf("|"+obj_id+"_")==-1) { // very 1st visit
  406. times_str += "|"+new_time;
  407. } else {
  408. var vt_regexp = obj_id+"_\(\\d\{2\}\)_\(\\d\+\)";
  409. var vtR = new RegExp( vt_regexp );
  410. times_str = times_str.replace(vtR, new_time);
  411. }
  412.  
  413. } else if (times_str.indexOf("|"+obj_id+"_")!=-1) {
  414. var vt_regexp = "\\|"+ obj_id+"_\(\\d\{2\}\)_\(\\d\+\)";
  415. var vtR = new RegExp( vt_regexp );
  416. times_str = times_str.replace(vtR, "");
  417. }*/
  418.  
  419.  
  420. GM_setValue("hwm_ecost_adv_times"+chunk_num, times_str);
  421. }
  422.  
  423. function makeLinks(){
  424. var sa;
  425. var loc;
  426. var loc_data;
  427. var ts = "";
  428. var ids_passed_str = "";
  429. var my_row;
  430. var id_regexp = /object-info.php\?id=(\d+)/;
  431. var my_id;
  432. var target_time;
  433. var target_time2;
  434.  
  435. var row_count = 0;
  436. var a_all = tag('a') ;
  437. var el;
  438. for (var i=0; i<a_all.length; i++) {
  439. el = a_all[i];
  440. if (el.href.indexOf('/object-info.php?')==-1) { continue; }
  441.  
  442. ts = "_"+el.href.split('/object-info.php?')[1]+"_";
  443. if (ids_passed_str.indexOf(ts)!=-1) { continue; } //workaround for last cell on map page (>>>)
  444. ids_passed_str += ts;
  445.  
  446. target_time = naStr;
  447. my_id = id_regexp.exec(el.href)[1];
  448.  
  449. if ( hwm_check_time==1 ) {
  450.  
  451. //target_time2 = get_time_id(my_id);
  452. //if ( target_time2 ) target_time = target_time2;
  453.  
  454. sa = document.createElement( 'a' );
  455. sa.href = el.href;
  456. sa.style.fontSize = "11px";
  457. //sa.innerHTML = target_time;
  458. sa.innerHTML = get_time_id(my_id);
  459. }
  460.  
  461. if (isEcostat) { // add location only in Ecostat page
  462. if ( hwm_check_del == 1 ) {
  463. while (a_all[i].parentNode.childNodes[2]) a_all[i].parentNode.removeChild(a_all[i].parentNode.childNodes[2]);
  464. }
  465. loc_data = getLocData(my_id);
  466. loc = document.createElement( 'span' );
  467. if ( hwm_check_full == 1 ) {
  468. loc.innerHTML = ",&nbsp;<b><font color="+loc_data.colr+">"+loc_data.name+"</font></b>";
  469. } else {
  470. loc.title = loc_data.name;
  471. loc.innerHTML = "&nbsp;<b><font color="+loc_data.colr+">"+loc_data.abbr+"</font></b>";
  472. }
  473. el.parentNode.insertBefore(loc, el.nextSibling);
  474. }
  475.  
  476. if (!isMercenary && sa) {
  477. el.parentNode.insertBefore(sa, el.nextSibling);
  478. addEvent(sa, "click", get_obj_time);
  479. }
  480.  
  481. if (isMercenary) { // add location only in Mercenary Guild page
  482. loc_data = getLocData(my_id);
  483. loc = document.createElement( 'span' );
  484. //loc.title = loc_data.name;
  485. //loc.title = "Wolf's Dale";
  486. //loc.innerHTML = "&nbsp;&nbsp;XXX";
  487. loc.innerHTML = "&nbsp;<b>(&nbsp;<font color="+loc_data.colr+">"+loc_data.name+"</font>&nbsp;)</b>";
  488. el.parentNode.insertBefore(loc, el.nextSibling);
  489. }
  490.  
  491. if (row_count%2 && isEcostat) {
  492. my_row = el.parentNode.parentNode;
  493. for(rn=0; rn<my_row.childNodes.length; rn++){
  494. my_row.childNodes[rn].style.backgroundColor = "#fff";
  495. }
  496. }
  497. row_count++;
  498. }
  499. }
  500.  
  501. function getLocData(n) {
  502. var loc_data = {};
  503. loc_data.abbr = "n/a";
  504. loc_data.name = "New Loc?";
  505. loc_data.colr = "#000000";
  506.  
  507. var o;
  508. var ids_str;
  509. for(var i=0; i<id2loc.length; i++) {
  510. o = id2loc[i];
  511. ids_str = "_" +o.ids.join("_")+ "_";
  512. if(ids_str.indexOf("_"+n+"_") != -1) {
  513. loc_data = o;
  514. }
  515. }
  516. return loc_data;
  517. }
  518.  
  519. function get_obj_time(event)
  520. {
  521. event = event || window.event;
  522. event.preventDefault ? event.preventDefault() : (event.returnValue=false);
  523. var sa = event.target || event.srcElement;
  524. if ( !sa.href ) {
  525. if (sa.parentNode.parentNode.nodeName=="A") {sa = sa.parentNode.parentNode} else {sa = sa.parentNode} // после подсветки устройства на работу смещается parentNode при клике на времени
  526. }
  527. sa.innerHTML = loaderid(); // анимация загрузки.
  528. var objXMLHttpReqFrId = createXMLHttpReq(Math.random()* 1000000);
  529. objXMLHttpReqFrId.open('GET', sa.href + '&rand=' + (Math.random()* 1000000), true);
  530. objXMLHttpReqFrId.onreadystatechange = function() { handleHttpResponseFrId(objXMLHttpReqFrId,sa); }
  531. objXMLHttpReqFrId.send(null);
  532. }
  533.  
  534. function handleHttpResponseFrId(obj,sa) {
  535. if (obj.readyState == 4 && obj.status == 200) {
  536. var obj_id = id_regexp.exec(sa.href)[1]; //получение id-обекта из строки ссылки
  537. recordWorkTime(obj_id,obj.responseText); // передаём XMLHttpRequest
  538. //GM_log (obj.responseXML);
  539. /*var target_time = naStr;
  540. var target_time2 = get_time_id(obj_id);
  541. if ( target_time2 ) target_time = target_time2;
  542. sa.innerHTML = target_time;*/
  543. sa.innerHTML = get_time_id(obj_id);
  544. }
  545. }
  546.  
  547. function get_time_id(my_id)
  548. {
  549. var chunk_num=Math.floor(my_id/chunk);
  550. var times_str = GM_getValue("hwm_ecost_adv_times"+chunk_num);
  551. var target_time2 = naStr;
  552.  
  553. if(times_str.indexOf("|"+my_id+"_")!=-1) {
  554.  
  555. var curDate = new Date();
  556. var curHour = curDate.getHours();
  557. var curMin = curDate.getMinutes();
  558. var vt_arr = [];
  559.  
  560. var vt_regexp = my_id+ "_\(\\d\{2\}\)_\(\\d\+\)";
  561. var vtR = new RegExp( vt_regexp );
  562. vt_arr = vtR.exec(times_str);
  563. //t_min = vt_arr.length? vtR.exec(times_str)[1] : "00"; // ?
  564. var t_min = vt_arr.length? vt_arr[1] : "99"; // ?
  565. var BalanceNum = vt_arr? vt_arr[2] : "000";
  566. /*var t_min = "99";
  567. var BalanceNum = "000";
  568. if (vt_arr) {
  569. t_min = vt_arr[1];
  570. BalanceNum = vt_arr[2];
  571. } else {
  572. GM_log(my_id+": "+times_str);
  573. }*/
  574.  
  575. var target_hr = (t_min > curMin)? curHour : curHour+1;
  576.  
  577. target_time2 = "&nbsp;<b>[n/a]</b>";
  578.  
  579. if (t_min < 60) {
  580. var soon_work = t_min-curMin; //скоро на работу
  581. soon_work = (soon_work < 0)? soon_work+60 : soon_work;
  582. if ( soon_work<11 && BalanceNum > BalBorder ) { t_min = "<font style=color:#CC0000>"+ t_min +"</font style>"; }
  583. if ( soon_work>54 && BalanceNum > BalBorder ) { t_min = "<font style=color:#400060>"+ t_min +"</font style>"; }
  584. target_hr = (target_hr==24)? "00" : target_hr;
  585. target_time2 = "&nbsp;<b>["+ target_hr +":"+ t_min +"]</b>";
  586. }
  587.  
  588. if (BalanceNum>500000) {
  589. style_color = '#00B000';
  590. BalanceStr=Math.round(BalanceNum/100000)/10 + 'kk';
  591. } else if (BalanceNum>30000) {
  592. style_color = '#0033FF';
  593. BalanceStr=Math.round(BalanceNum/1000) + 'k';
  594. } else if (BalanceNum>999) {
  595. style_color = '#6633CC';
  596. BalanceStr=Math.round(BalanceNum/1000) + 'k';
  597. } else {
  598. style_color = '#666666';
  599. BalanceStr= BalanceNum + 'з';
  600. }
  601. BalanceStr = "<font style=color:"+ style_color +">"+ BalanceStr +"</font style>"
  602.  
  603. target_time2 += "," +BalanceStr;
  604. }
  605. return target_time2;
  606. }
  607.  
  608. function form_close_ts()
  609. {
  610. bg = $('bgOverlay');
  611. bgc = $('bgCenter');
  612. if( bg )
  613. {
  614. bg.style.display = bgc.style.display = 'none';
  615. }
  616. }
  617.  
  618. function setting_ts()
  619. {
  620. bg = $('bgOverlay');
  621. bgc = $('bgCenter');
  622. if( !bg )
  623. {
  624. bg = document.createElement('div') ;
  625. bg.id = 'bgOverlay' ;
  626. document.body.appendChild( bg );
  627. bg.style.position = 'absolute' ;
  628. bg.style.left = '0';
  629. bg.style.width = '100%';
  630. bg.style.background = "#000000";
  631. bg.style.opacity = "0.5";
  632. addEvent(bg, "click", form_close_ts);
  633.  
  634. bgc = document.createElement('div') ;
  635. bgc.id = 'bgCenter' ;
  636. document.body.appendChild( bgc );
  637. bgc.style.position = 'absolute' ;
  638. bgc.style.width = '650px';
  639. bgc.style.background = "#F6F3EA";
  640. bgc.style.left = ( ( document.body.offsetWidth - 650 ) / 2 ) + 'px';
  641. }
  642.  
  643. bgc.innerHTML = '<div style="border:1px solid #abc;padding:5px;margin:2px;"><div style="float:right;border:1px solid #abc;width:15px;height:15px;text-align:center;cursor:pointer;" id="bt_close_ts" title="Close">x</div><table>'+
  644. '<tr><td>Отображать время окончания смены: <input type=checkbox '+(hwm_check_time=="1"?"checked":"")+' id=hwm_check_time_id title=""></td></tr>'+
  645. '<tr><td>Удалять владельца предприятия в экономической статистике: <input type=checkbox '+(hwm_check_del=="1"?"checked":"")+' id=hwm_check_del_id title=""></td></tr>'+
  646. '<tr><td>Отображать полные названия секторов (иначе сокращенные): <input type=checkbox '+(hwm_check_full=="1"?"checked":"")+' id=hwm_check_full_id title=""><br><br></td></tr>'+
  647. '<tr><td><input type="submit" id="hwm_ecost_adv_times_id" value="Стереть окончания смен" title=""></td></tr>'+
  648. '</table></div>' ;
  649.  
  650. addEvent($("bt_close_ts"), "click", form_close_ts);
  651. addEvent($("hwm_check_time_id"), "click", hwm_check_time_f);
  652. addEvent($("hwm_check_del_id"), "click", hwm_check_del_f);
  653. addEvent($("hwm_check_full_id"), "click", hwm_check_full_f);
  654. addEvent($("hwm_ecost_adv_times_id"), "click", hwm_ecost_adv_times_f);
  655.  
  656. var height_v = getClientHeight_ts();
  657. if (height_v < document.body.offsetHeight) height_v = document.body.offsetHeight;
  658.  
  659. bg.style.top = (-document.body.scrollTop)+'px';
  660. bg.style.height = ( height_v + document.body.scrollTop ) +'px';
  661. bgc.style.top = ( document.body.scrollTop + 150 ) + 'px';
  662. bg.style.display = bgc.style.display = 'block';
  663. }
  664.  
  665. function hwm_check_time_f()
  666. {
  667. if( $('hwm_check_time_id').checked==true ) hwm_check_time='1'; else hwm_check_time='0';
  668. GM_setValue( "hwm_check_time", hwm_check_time );
  669. }
  670.  
  671. function hwm_check_del_f()
  672. {
  673. if( $('hwm_check_del_id').checked==true ) hwm_check_del='1'; else hwm_check_del='0';
  674. GM_setValue( "hwm_check_del", hwm_check_del );
  675. }
  676.  
  677. function hwm_check_full_f()
  678. {
  679. if( $('hwm_check_full_id').checked==true ) hwm_check_full='1'; else hwm_check_full='0';
  680. GM_setValue( "hwm_check_full", hwm_check_full );
  681. }
  682.  
  683. function hwm_ecost_adv_times_f()
  684. {
  685. for (var i=0; i<chunks; i++) {
  686. GM_setValue("hwm_ecost_adv_times"+i, "|2000_00_0");
  687. }
  688. }
  689.  
  690. function loaderid() {
  691. return ' <img border="0" src="data:image/gif;base64,R0lGODlhEAAQAMQAAP///+7u7t3d3bu7u6qqqpmZmYi'+
  692. 'IiHd3d2ZmZlVVVURERDMzMyIiIhEREQAR'+
  693. 'AAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05F'+
  694. 'VFNDQVBFMi4wAwEAAAAh+QQFBwAQACwAAAAAEAAQAAAFdyAkQgGJJOWoQgIjBM8jkKsoPEzgyMGs'+
  695. 'CjPDw7ADpkQBxRDmSCRetpRA6Rj4kFBkgLC4IlUGhbNQIwXOYYWCXDufzYPDMaoKGBoKb886OjAK'+
  696. 'dgZAAgQkfCwzAgsDBAUCgl8jAQkHEAVkAoA1AgczlyIDczUDA2UhACH5BAUHABAALAAAAAAPABAA'+
  697. 'AAVjICSO0IGIATkqIiMKDaGKC8Q49jPMYsE0hQdrlABCGgvT45FKiRKQhWA0mPKGPAgBcTjsspBC'+
  698. 'AoH4gl+FmXNEUEBVAYHToJAVZK/XWoQQDAgBZioHaX8igigFKYYQVlkCjiMhACH5BAUHABAALAAA'+
  699. 'AAAQAA8AAAVgICSOUGGQqIiIChMESyo6CdQGdRqUENESI8FAdFgAFwqDISYwPB4CVSMnEhSej+Fo'+
  700. 'gNhtHyfRQFmIol5owmEta/fcKITB6y4choMBmk7yGgSAEAJ8JAVDgQFmKUCCZnwhACH5BAUHABAA'+
  701. 'LAAAAAAQABAAAAViICSOYkGe4hFAiSImAwotB+si6Co2QxvjAYHIgBAqDoWCK2Bq6A40iA4yYMgg'+
  702. 'NZKwGFgVCAQZotFwwJIF4QnxaC9IsZNgLtAJDKbraJCGzPVSIgEDXVNXA0JdgH6ChoCKKCEAIfkE'+
  703. 'BQcAEAAsAAAAABAADgAABUkgJI7QcZComIjPw6bs2kINLB5uW9Bo0gyQx8LkKgVHiccKVdyRlqjF'+
  704. 'SAApOKOtR810StVeU9RAmLqOxi0qRG3LptikAVQEh4UAACH5BAUHABAALAAAAAAQABAAAAVxICSO'+
  705. '0DCQKBQQonGIh5AGB2sYkMHIqYAIN0EDRxoQZIaC6bAoMRSiwMAwCIwCggRkwRMJWKSAomBVCc5l'+
  706. 'UiGRUBjO6FSBwWggwijBooDCdiFfIlBRAlYBZQ0PWRANaSkED1oQYHgjDA8nM3kPfCmejiEAIfkE'+
  707. 'BQcAEAAsAAAAABAAEAAABWAgJI6QIJCoOIhFwabsSbiFAotGMEMKgZoB3cBUQIgURpFgmEI0EqjA'+
  708. 'CYXwiYJBGAGBgGIDWsVicbiNEgSsGbKCIMCwA4IBCRgXt8bDACkvYQF6U1OADg8mDlaACQtwJCEA'+
  709. 'IfkEBQcAEAAsAAABABAADwAABV4gJEKCOAwiMa4Q2qIDwq4wiriBmItCCREHUsIwCgh2q8MiyEKO'+
  710. 'DK7ZbHCoqqSjWGKI1d2kRp+RAWGyHg+DQUEmKliGx4HBKECIMwG61AgssAQPKA19EAxRKz4QCVIh'+
  711. 'ACH5BAUHABAALAAAAAAQABAAAAVjICSOUBCQqHhCgiAOKyqcLVvEZOC2geGiK5NpQBAZCilgAYFM'+
  712. 'ogo/J0lgqEpHgoO2+GIMUL6p4vFojhQNg8rxWLgYBQJCASkwEKLC17hYFJtRIwwBfRAJDk4Obwsi'+
  713. 'dEkrWkkhACH5BAUHABAALAAAAQAQAA8AAAVcICSOUGAGAqmKpjis6vmuqSrUxQyPhDEEtpUOgmgY'+
  714. 'ETCCcrB4OBWwQsGHEhQatVFhB/mNAojFVsQgBhgKpSHRTRxEhGwhoRg0CCXYAkKHHPZCZRAKUERZ'+
  715. 'MAYGMCEAIfkEBQcAEAAsAAABABAADwAABV0gJI4kFJToGAilwKLCST6PUcrB8A70844CXenwILRk'+
  716. 'IoYyBRk4BQlHo3FIOQmvAEGBMpYSop/IgPBCFpCqIuEsIESHgkgoJxwQAjSzwb1DClwwgQhgAVVM'+
  717. 'IgVyKCEAIfkECQcAEAAsAAAAABAAEAAABWQgJI5kSQ6NYK7Dw6xr8hCw+ELC85hCIAq3Am0U6JUK'+
  718. 'jkHJNzIsFAqDqShQHRhY6bKqgvgGCZOSFDhAUiWCYQwJSxGHKqGAE/5EqIHBjOgyRQELCBB7EAQH'+
  719. 'fySDhGYQdDWGQyUhADs=">';
  720. }
  721.  
  722. function getClientHeight_ts()
  723. {
  724. return document.compatMode=='CSS1Compat' && !window.opera?document.documentElement.clientHeight:document.body.clientHeight;
  725. }
  726.  
  727. function $( id ) { return document.getElementById( id ); }
  728.  
  729. function tag( id ) { return document.getElementsByTagName( id ); }
  730.  
  731. function addEvent(elem, evType, fn) {
  732. if (elem.addEventListener) {
  733. elem.addEventListener(evType, fn, false);
  734. }
  735. else if (elem.attachEvent) {
  736. elem.attachEvent("on" + evType, fn)
  737. }
  738. else {
  739. elem["on" + evType] = fn
  740. }
  741. }
  742.  
  743. function createXMLHttpReq(rndm)
  744. {
  745. var objXMLHttpReq;
  746. if (window.XMLHttpRequest)
  747. {
  748. // Real browsers ;)
  749. //
  750. objXMLHttpReq = new XMLHttpRequest();
  751. }
  752. else if (window.ActiveXObject)
  753. {
  754. // IE
  755. //
  756. objXMLHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
  757. }
  758. return objXMLHttpReq;
  759. }