sckcovinfo

sdfsdf

  1. // ==UserScript==
  2. // @name sckcovinfo
  3. // @namespace pbr/inf
  4. // @include http://goallineblitz.com/game/game.pl?game_id=*&mode=pbp
  5. // @copyright 2009, pabst
  6. // @license (CC) Attribution Share Alike; http://creativecommons.org/licenses/by-sa/3.0/
  7. // @version 09.11.02
  8. // @description sdfsdf
  9. // ==/UserScript==
  10.  
  11. window.setTimeout(
  12. function() {
  13.  
  14. var button = document.createElement("input");
  15. button.setAttribute("value","Run Coverage");
  16. button.setAttribute("type","button");
  17. button.setAttribute("id","coveragebutton");
  18. button.addEventListener("click",function() { main(); },false);
  19.  
  20. var spn = document.createElement("span");
  21. spn.setAttribute("id","coveragespan");
  22. spn.appendChild(button);
  23.  
  24. var tbl = document.getElementById("pbp");
  25. tbl.parentNode.insertBefore(spn, tbl);
  26.  
  27. // addTeam();
  28. //main();
  29. }
  30. , 100);
  31.  
  32. var playText = new Array();
  33. var coverages = new Array();
  34. var teamid = 604;
  35. var maxgames = 1;
  36. var season=14;
  37. var tdiv=1;
  38.  
  39. function addTeam() {
  40. getInetPage("http://goallineblitz.com/game/team.pl?season="+season+"&team_id="+teamid, tmf);
  41. }
  42.  
  43. function addGame(addr, page) {
  44. var div = document.createElement("div");
  45. div.innerHTML = page.responseText;
  46. document.body.appendChild(div);
  47. }
  48.  
  49. function tmf(addr, page) {
  50. var div = document.createElement("div");
  51. div.innerHTML = page.responseText;
  52.  
  53. var addr = 0;
  54. var a = div.getElementsByTagName("a");
  55. var current = window.location.toString().split("?")[1].split("&")[0];
  56. for (var i=0; i<a.length; i++) {
  57. if (a[i].href.toString().indexOf("game.pl") != -1) {
  58. addr++;
  59. if (a[i].href.toString().indexOf(current) == -1) {
  60. getInetPage(a[i].href.toString()+"&mode=pbp", addGame);
  61. }
  62. else {
  63. console.log("skipping "+addr);
  64. }
  65. }
  66. if (addr == maxgames) break;
  67. }
  68. }
  69.  
  70. function Coverage() {
  71. this.id;
  72. this.player;
  73. this.position;
  74. this.attempts = 0;
  75. this.completions = 0;
  76. this.yards = 0;
  77. this.pd = 0;
  78. this.toString = function() {
  79. return this.id+" ("+this.position+") "+this.player+" "+this.completions+"/"+this.attempts+" - "+this.yards;
  80. }
  81. }
  82.  
  83. function Rush() {
  84. this.id;
  85. this.player;
  86. this.hurry = 0;
  87. this.sack = 0;
  88. }
  89.  
  90. function main() {
  91. // alert("I am main!");
  92. tdiv = document.getElementsByClassName("team_logo").length/2;
  93. console.log("tdiv is ="+tdiv);
  94. var p = document.getElementsByClassName("pbp_play");
  95. var plays = new Array();
  96. for (var i=0; i<p.length/tdiv; i++) {
  97. plays[i] = p[i];
  98. }
  99. console.log(p.length+" -- "+plays.length);
  100. var replays = document.getElementsByClassName("pbp_replay");
  101.  
  102.  
  103. var threads = document.createElement("div");
  104. threads.setAttribute("id","threads");
  105. threads.setAttribute("number",plays.length);
  106. document.getElementById("footer").appendChild(threads);
  107.  
  108. var cnt = 0;
  109. for (var ri=0; ri<plays.length; ri++) {
  110. var p = plays[ri];
  111. // console.log(ri+") "+p.textContent.toString().slice(0,20));
  112. var t = document.createElement("div");
  113. t.id = replays[ri].childNodes[0].href;
  114. threads.appendChild(t);
  115.  
  116. if ((p.textContent.indexOf(" pass to ") == -1) &&
  117. (p.textContent.indexOf(" sacked by ") == -1)) {
  118. var threads = document.getElementById("threads");
  119. t.innerHTML = "<div></div><div></div>";
  120. continue;
  121. }
  122. playText[replays[ri].childNodes[0].href] = p.textContent;
  123. getInetPage(replays[ri].childNodes[0].href, def);
  124. cnt++;
  125. }
  126. console.log("count="+cnt);
  127. setTimeout(function() { finish(); }, 500);
  128. }
  129.  
  130. function finish(input) {
  131. console.log("input was "+input);
  132. var threads = document.getElementById("threads");
  133. var number = threads.getAttribute("number");
  134.  
  135. var i = input;
  136. if (i == null) i = 0;
  137. for (; i<threads.childNodes.length; i++) {
  138. if (threads.childNodes[i].childNodes.length != 2) {
  139. // console.log("no children : "+i);
  140. document.getElementById("coveragespan").innerHTML = i +
  141. "/" + threads.childNodes.length;
  142. setTimeout(function() { finish(i); }, 3000);
  143. return;
  144. }
  145. }
  146.  
  147. if (0 == 1) {
  148. }
  149. else {
  150. var spn = document.getElementById("coveragespan");
  151. spn.parentNode.removeChild(spn);
  152.  
  153. var output = combine();
  154. coverages = output[0];
  155. // coverages = combineCoverage();
  156. console.log("done : "+coverages.length);
  157.  
  158. var rows = new Array();
  159. for (var i=0; i<coverages.length; i++) {
  160. // console.log(coverages[i]);
  161. rows.push(coverages[i].player);
  162. }
  163. var table = getCoverageTable(0,rows);
  164. var tbl = document.getElementById("pbp");
  165. tbl.parentNode.insertBefore(table, tbl);
  166. for (var i=0; i<coverages.length; i++) {
  167. document.getElementById("cv-0-"+i+"-0").innerHTML = coverages[i].completions;
  168. document.getElementById("cv-1-"+i+"-0").innerHTML = coverages[i].attempts;
  169. var num = (100*coverages[i].completions / coverages[i].attempts).toFixed(0);
  170. if (isNaN(num) == true) {
  171. num = 0;
  172. }
  173. document.getElementById("cv-2-"+i+"-0").innerHTML = num + "%";
  174. document.getElementById("cv-3-"+i+"-0").innerHTML = coverages[i].yards;
  175. document.getElementById("cv-4-"+i+"-0").innerHTML = coverages[i].pd;
  176. }
  177.  
  178. var blocking = output[1];
  179. // coverages = combineBlocking();
  180. var rows = new Array();
  181. for (var i=0; i<blocking.length; i++) {
  182. // console.log(blocking[i]);
  183. rows.push(blocking[i].player);
  184. }
  185. var table = getBlockingTable(0,rows);
  186. var tbl = document.getElementById("pbp");
  187. tbl.parentNode.insertBefore(table, tbl);
  188. for (var i=0; i<blocking.length; i++) {
  189. document.getElementById("bl-0-"+i+"-0").innerHTML = blocking[i].hurry;
  190. document.getElementById("bl-1-"+i+"-0").innerHTML = blocking[i].sack;
  191. }
  192. var t = document.getElementById("threads");
  193. // t.parentNode.removeChild(t);
  194. }
  195. }
  196.  
  197. function combine() {
  198. var rush = new Array();
  199. var pass = new Array();
  200. var threads = document.getElementById("threads");
  201. // for (var cidx=0; cidx<threads.childNodes.length; cidx++) {
  202. // var child = threads.childNodes[cidx];
  203. var replays = document.getElementsByClassName("pbp_replay");
  204. for (var cidx=0; cidx<replays.length/tdiv; cidx++) {
  205. var child = document.getElementById(replays[cidx].childNodes[0].href);
  206. if (child == null) continue;
  207. if (child.childNodes.length == 0) continue;
  208.  
  209. var p = child.childNodes[0].innerHTML;
  210. var t = p.split(" ",5);
  211. if (t.length >= 5) {
  212. var cov = new Coverage();
  213. cov.id = parseInt(t[0]);
  214. cov.completions = parseInt(t[1]);
  215. cov.attempts = 1;
  216. cov.yards = parseInt(t[2]);
  217. cov.pd = parseInt(t[3]);
  218. cov.player = p.slice(t[0].length+t[1].length+t[2].length+5);
  219. pass.push(cov);
  220. }
  221.  
  222. if (child.childNodes.length > 1) {
  223. var bl = child.childNodes[1].innerHTML;
  224.  
  225. var t = bl.split(" ",3);
  226. if (t.length >= 3) {
  227. var r = new Rush();
  228. r.id = parseInt(t[0]);
  229. if (t[1] == "0") r.hurry = 1;
  230. else r.sack = 1;
  231. r.player = bl.slice(t[0].length+3);
  232. rush.push(r);
  233. }
  234. }
  235. }
  236. // threads.parentNode.removeChild(threads);
  237. console.log("coverages == "+pass.length);
  238. console.log("rushes == "+rush.length);
  239.  
  240. var out = new Array();
  241.  
  242. c = pass;
  243. console.log("combine coverage "+c.length);
  244. var output = new Array();
  245. for (var j=0; j<c.length; j++) {
  246. var id = c[j].id;
  247. var idx = -1;
  248. for (var i=0; i<output.length; i++) {
  249. if (c[j].id == output[i].id) {
  250. idx = i;
  251. break;
  252. }
  253. }
  254. if (idx == -1) {
  255. output.push(c[j]);
  256. }
  257. else {
  258. output[idx].completions += c[j].completions;
  259. output[idx].attempts += c[j].attempts;
  260. output[idx].yards += c[j].yards;
  261. output[idx].pd += c[j].pd;
  262. }
  263. }
  264. out[0] = output;
  265.  
  266. c = rush;
  267. console.log("combine blocking "+c.length);
  268. var output = new Array();
  269. for (var j=0; j<c.length; j++) {
  270. var id = c[j].id;
  271. var idx = -1;
  272. for (var i=0; i<output.length; i++) {
  273. if (c[j].id == output[i].id) {
  274. idx = i;
  275. break;
  276. }
  277. }
  278. if (idx == -1) {
  279. output.push(c[j]);
  280. }
  281. else {
  282. output[i].hurry += c[j].hurry;
  283. output[i].sack += c[j].sack;
  284. }
  285. }
  286. out[1] = output;
  287.  
  288. return out;
  289. }
  290.  
  291. function def(addr, page) {
  292. //console.log("pt-- "+playText[addr]);
  293. //console.log(page.responseText);
  294. var idx = page.responseText.indexOf("var players =");
  295. var p = page.responseText.slice(idx+"var players =".length);
  296. p = p.slice(0,p.indexOf("var play_data"));
  297. var pd = page.responseText.slice(page.responseText.indexOf("var play_data =")+"var play_data =".length);
  298. pd = pd.slice(0,pd.indexOf(";"));
  299. var pt = page.responseText.slice(page.responseText.indexOf("var ptid =")+"var ptid =".length);
  300. pt = pt.slice(0,pt.indexOf(";"));
  301. var newplayers = null;
  302. var newplay_data = null;
  303. eval("newplayers = "+p);
  304. newplay_data = eval(pd);
  305. eval("ptid = "+pt);
  306.  
  307. // console.log(newplayers+" -- "+newplay_data.length);
  308. var res = defender_main(newplayers, newplay_data, playText[addr]);
  309. // console.log("def end");
  310.  
  311. var t = document.getElementById(addr);
  312. if (t == null) console.log("t element missing : "+addr);
  313. for (var i=0; i<res.length; i++) {
  314. var div = document.createElement("div");
  315. div.innerHTML = res[i];
  316. t.appendChild(div);
  317. }
  318. for (var i=t.childNodes.length; i<2; i++) {
  319. t.innerHTML += "<div></div>";
  320. }
  321. }
  322.  
  323. function defender_main(players, play_data, playText) {
  324. var output = new Array();
  325. output[0] = null;
  326. output[1] = null;
  327. var playerids = new Array();
  328. for (var i = 0; i < play_data[0].length; i++) {
  329. var data = play_data[0][i];
  330. if (data.id != 'ball') {
  331. playerids.push (data.id);
  332. }
  333. }
  334.  
  335. var receiver = getReceiverName(playText);
  336. //console.log("receiver is : '"+receiver+"'");
  337. if (receiver != null) {
  338. var wrid = -1;
  339. for (var i = 0; i < playerids.length; i++) {
  340. var plyr = players[playerids[i]];
  341. //console.log("'"+plyr.name+"' -- '"+receiver+"'");
  342. if (plyr.name == receiver) {
  343. wrid = playerids[i];
  344. break;
  345. }
  346. }
  347. if (wrid == -1) {
  348. //console.log("no receiver : "+playText);
  349. return ["",""];
  350. }
  351.  
  352. var min = 99999;
  353. var incY = 99999;
  354. var catchY = -1;
  355. var wridx = -1;
  356. for (var i=0; i<play_data[1].length; i++) {
  357. if (play_data[1][i].id == wrid) {
  358. wridx = i;
  359. break;
  360. }
  361. }
  362.  
  363. for (var j = 0; j < play_data.length; j++) {
  364. var balldata = play_data[j][0];
  365. var snapdata = play_data[j][wridx];
  366.  
  367. var ydepth = Math.abs(snapdata.y - balldata.y);
  368. var xdepth = Math.abs(snapdata.x - balldata.x);
  369. //???? xdepth = xdepth-3;
  370. var distance = Math.sqrt(ydepth*ydepth + xdepth*xdepth);
  371. if (distance < min) {
  372. incY = snapdata.y;
  373. min = distance;
  374. distY = balldata.y //added this
  375. }
  376. if (distance == 0) {
  377. catchY = balldata.y
  378. distY = balldata.y //added this
  379. break;
  380. }
  381. //console.log(min+" : "+balldata+" : "+snapdata+" : "+xdepth+" : "+ydepth);
  382. }
  383. var c = -1;
  384. for (var v=0; v<playerids.length; v++) {
  385. if (players[playerids[v]].position == "C") {
  386. for (var w=0; w<play_data[0].length; w++) {
  387. if (play_data[0][w].id == playerids[v]) {
  388. c = w;
  389. break;
  390. }
  391. }
  392. break;
  393. }
  394. }
  395. console.log(playText);
  396. console.log("C is : "+c+" -- "+(distY*3+40-6)+" : "+(play_data[0][c].y*3+40-6));
  397. console.log("Pass Length = "+parseInt(distY-play_data[0][c].y)/3);
  398.  
  399. try {
  400. var defPlayers = findDefender(players, play_data, playText);
  401. if (defPlayers != null) {
  402. var max = findMax(defPlayers);
  403. var def = play_data[0][max];
  404. // console.log(max+"-"+def.id+"-"+players[def.id].position+"-"+players[def.id].name);
  405.  
  406. var pd = 0;
  407. if (playText.indexOf("[deflected by ") != -1) pd = 1;
  408.  
  409. var result = null;
  410. playText = playText.split("(");
  411. for (var i=0; i<playText.length; i++) {
  412. if (playText[i].indexOf("yd gain)") != -1) {
  413. result = parseFloat(playText[i]);
  414. break;
  415. }
  416. else if (playText[i].indexOf("yd loss)") != -1) {
  417. result = parseFloat(playText[i]);
  418. break;
  419. }
  420. else if (playText[i].indexOf("no gain)") != -1) {
  421. result = 0;
  422. break;
  423. }
  424. }
  425. //console.log("result is : "+players[def.id].position+"-"+players[def.id].name+" : "+result);
  426. var c = new Coverage();
  427. c.id = def.id;
  428. c.position = players[def.id].position;
  429. c.player = players[def.id].name;
  430. c.attempts = 1;
  431. c.completions = 0;
  432. c.yards = 0;
  433. if (result != null) {
  434. c.completions++;
  435. c.yards += result;
  436. }
  437. else {
  438. c.pd = pd;
  439. }
  440. // coverages.push(c);
  441. // console.log(c);
  442. output[0] = c.id+" "+c.completions+" "+c.yards+" "+c.pd+" "+c.player;
  443. }
  444. }
  445. catch (err) {
  446. console.log("yac defenders: "+err);
  447. output = "";
  448. }
  449. }
  450.  
  451. try {
  452. var blockers = findBlocker(players, play_data, playText);
  453. if (blockers != null) {
  454. var max = findMax(blockers);
  455. //console.log(blockers);
  456. var def = play_data[0][max];
  457. // console.log(max+"-"+def.id);
  458. if (def.id == "ball") {
  459. max = findMax(blockers.slice(1));
  460. }
  461. var def = play_data[0][max];
  462. // console.log(max+"-"+def.id);
  463. // console.log(players[def.id].position+"-"+players[def.id].name);
  464. var sh = "0";
  465. if (playText.indexOf(" sacked by ") != -1) {
  466. sh = "1";
  467. }
  468. // console.log(def.id+" "+sh+" "+players[def.id].name);
  469. output[1] = def.id+" "+sh+" "+players[def.id].name;
  470. // addBlocker(players[def.id].position+"-"+players[def.id].name);
  471. }
  472. else {
  473. // console.log("no blockers : "+playText);
  474. }
  475. }
  476. catch (err) {
  477. console.log("yac blockers: "+err);
  478. output[1] = "";
  479. }
  480.  
  481. return output;
  482. }
  483.  
  484. function findDefender(players, play_data, outcome) {
  485. var playerids = new Array();
  486. for (var i = 1; i < play_data[0].length; i++) {
  487. var data = play_data[0][i];
  488. if (data.id != 'ball') {
  489. playerids.push (data.id);
  490. }
  491. }
  492.  
  493. var playText = outcome;
  494. var receiver = getReceiverName(playText);
  495.  
  496. var wrid = -1;
  497. for (var i = 0; i < playerids.length; i++) {
  498. var plyr = players[playerids[i]];
  499. if (plyr.name == receiver) {
  500. wrid = playerids[i];
  501. break;
  502. }
  503. }
  504. if (wrid == -1) return null;
  505.  
  506. var wridx = -1;
  507. for (var i=0; i<play_data[1].length; i++) {
  508. if (play_data[1][i].id == wrid) {
  509. wridx = i;
  510. break;
  511. }
  512. }
  513.  
  514. var defmin = 99999;
  515. var defPlayers = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
  516. var j;
  517. for (j = 0; j < play_data.length; j++) {
  518. var k=0;
  519. if (wridx <= 11) {
  520. k=1;
  521. }
  522. var fmin = 99999;
  523. var fidx = -1;
  524. for (var i=(k*11)+1; i<(k*11)+12; i++) {
  525. try{
  526. //console.log(wridx+" == "+i+" -- "+unsafeWindow.play_data[j][i]);
  527. var def = play_data[j][i];
  528. var defydepth = Math.abs(def.y - play_data[j][wridx].y);
  529. var defxdepth = Math.abs(def.x - play_data[j][wridx].x);
  530. var defdistance = Math.sqrt(defydepth*defydepth + defxdepth*defxdepth);
  531. if (defdistance < defmin) {
  532. defmin = defdistance;
  533. }
  534. if (defdistance < fmin) {
  535. fmin = defdistance;
  536. fidx = i;
  537. }
  538. defPlayers[i] = Math.max(0,defPlayers[i]-0.7);
  539. //console.log(unsafeWindow.players[def.id].name);
  540. if ((i != -1) && (defdistance < 18) && (j>5)) {
  541. defPlayers[i] += 1.35;
  542. }
  543. //console.log(unsafeWindow.play_data[j][i].id+" : "+defPlayers[i]);
  544. } catch(e) {}
  545. }
  546. if (fmin < 12) {
  547. defPlayers[fidx] += 0.35;
  548. }
  549. //console.log(j+" -- "+fmin+" : "+fidx+" -- "+defPlayers);
  550.  
  551. try {
  552. var balldata = play_data[j+5][0];
  553. var wrdata = play_data[j+5][wridx];
  554. //console.log(balldata.x+" - "+wrdata.x+" : "+balldata.y+" - "+wrdata.y);
  555. if ((Math.abs(balldata.x - wrdata.x) < 15) && (Math.abs(balldata.y - wrdata.y) < 15)) {
  556. break;
  557. }
  558. }
  559. catch (e) {
  560. break;
  561. }
  562. if ((j == 0) && ((j+10) < (play_data.length-5))) {
  563. j += 9;
  564. }
  565. }
  566. //alert("defmin="+defmin);
  567. if (defmin > 11) {
  568. //console.log("HiZ");
  569. defPlayers = null;
  570. }
  571. return defPlayers;
  572. }
  573.  
  574. function findBlocker(players,play_data, playText) {
  575. var outcome = playText.toString();
  576. var playerids = new Array();
  577. for (var i = 1; i < play_data[0].length; i++) {
  578. var data = play_data[0][i];
  579. if (data.id != 'ball') {
  580. playerids.push (data.id);
  581. }
  582. }
  583.  
  584. var qbid = 0;
  585. for (var i = 0; i < playerids.length; i++) {
  586. var plyr = players[playerids[i]];
  587. //console.log(i+") "+plyr.position);
  588. if (plyr.position == "QB") {
  589. qbid = playerids[i];
  590. break;
  591. }
  592. }
  593.  
  594. var qbidx = 0;
  595. for (var i=0; i<22; i++) {
  596. if (play_data[0][i].id == qbid) {
  597. qbidx = i;
  598. break;
  599. }
  600. }
  601.  
  602. var lastFrame = play_data.length;
  603. var last = 32767;
  604. for (var f=0; f<play_data.length; f++) {
  605. var balldata = play_data[f][0];
  606. var qbdata = play_data[f][qbidx];
  607. var ydepth = Math.abs(qbdata.y - balldata.y);
  608. var xdepth = Math.abs(qbdata.x - balldata.x);
  609. var distance = Math.sqrt(ydepth*ydepth + xdepth*xdepth);
  610. //console.log(f+") "+distance+" --- "+last);
  611. if (distance > last) {
  612. lastFrame = f;
  613. break;
  614. }
  615. last = distance;
  616. }
  617.  
  618. //console.log(qbid+" - "+qbidx+" : lf="+lastFrame);
  619. var rusher;
  620. var idx = outcome.indexOf(" sacked by ")+" sacked by ".length;
  621. if (idx != 10) {
  622. rusher = outcome.slice(idx,idx+outcome.slice(idx).indexOf(" ("));
  623. }
  624. else {
  625. idx = outcome.indexOf(", hurried by ")+", hurried by ".length;
  626. rusher = outcome.slice(idx,idx+outcome.slice(idx).indexOf(", "));
  627. }
  628.  
  629. var rusheridx = -1;
  630. var rusherid = -1;
  631. for (var i=0; i<play_data[0].length; i++) {
  632. var id = play_data[0][i].id;
  633. if (players[id] != null) {
  634. if (players[id].name == rusher) {
  635. rusherid = id;
  636. rusheridx = i;
  637. break;
  638. }
  639. }
  640. }
  641. // console.log("rusher="+rusherid+" : "+rusheridx+" : "+players[rusherid].name);
  642. if (rusherid == -1) return null;
  643.  
  644. var offmin = 99999;
  645. var offPlayers = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
  646. var offidx = -1;
  647. var j;
  648. for (j = 0; j < lastFrame; j++) {
  649. var k=0;
  650. if (rusherid <= 11) {
  651. k=1;
  652. }
  653. var offmin = 99999;
  654. var offidx = -1;
  655. //console.log(rusher+" - "+unsafeWindow.play_data[j][rusheridx].x+","+unsafeWindow.play_data[j][rusheridx].y);
  656. for (var i=(k*11)+1; i<(k*11)+12; i++) {
  657. var off = play_data[j][i];
  658. var offydist = Math.abs(off.y - play_data[j][rusheridx].y);
  659. var offxdist = Math.abs(off.x - play_data[j][rusheridx].x);
  660. var offdistance = Math.sqrt(offydist*offydist + offxdist*offxdist);
  661. if (offdistance < offmin) {
  662. offmin = offdistance;
  663. offidx = i;
  664. }
  665. //console.log(rusherid+"/"+rusheridx+" == "+i+" -- "+unsafeWindow.play_data[j][i].id+" = "+offdistance);
  666. offPlayers[i] = Math.max(0,offPlayers[i]-0.1);
  667. if (offdistance < 9) {
  668. //console.log(unsafeWindow.players[off.id].name+" -- "+offdistance+" :: "+off.x+","+off.y);
  669. offPlayers[i] += 1;
  670. }
  671. //console.log(offPlayers);
  672. }
  673. if (offmin < 6) {
  674. offPlayers[offidx] += 0.35;
  675. }
  676. if (j == 2) j += 7;
  677. }
  678. //console.log(offidx+"-"+offidx+"-"+offmin+"="+offPlayers);
  679. if (offmin > 15) {
  680. offidx = -1;
  681. offPlayers = null;
  682. }
  683. return offPlayers;
  684. }
  685.  
  686. function findMax(arr) {
  687. if (arr == null) return -1;
  688. if (arr.length < 1) return -1;
  689.  
  690. var idx = 0;
  691. var max = arr[idx];
  692. for (var i=1; i<arr.length; i++) {
  693. if (arr[i] > max) {
  694. idx = i;
  695. max = arr[i];
  696. }
  697. }
  698. return idx;
  699. }
  700.  
  701. function getReceiverName(playText) {
  702. var sn = playText.indexOf('pass to ')+8;
  703. var en = 0;
  704.  
  705. if (playText.indexOf(', hurried by')!=-1) {
  706. en = playText.indexOf(', hurried by');
  707. }
  708. else if (playText.indexOf(' up the')!=-1) {
  709. en = playText.indexOf(' up the');
  710. }
  711. else if (playText.indexOf(' over the')!= -1) {
  712. en = playText.indexOf(' over the');
  713. }
  714. else {
  715. return null;
  716. }
  717.  
  718. var name = playText.slice(sn,en);
  719. return name;
  720. }
  721.  
  722. function getInetPage(address, func, target) {
  723. // console.log("getInetPage : "+address);
  724. var req = new XMLHttpRequest();
  725. req.open( 'GET', address, true );
  726. req.onreadystatechange = function() {
  727. if (target != null) {
  728. var d = ["..","...","."];
  729. var str = target.innerHTML.split(" ");
  730. target.innerHTML = str[0]+" "+d[str[1].length-1];
  731. }
  732. };
  733. req.onload = function() {
  734. if (this.status != 200) {
  735. console.log("pbr gm script: Error "+this.status+" loading "+address);
  736. getInetPage(address, func, target);
  737. }
  738. else {
  739. // console.log("loaded: "+address)
  740. func(address,this);
  741. }
  742. };
  743.  
  744. req.send(null);
  745. return req;
  746. }
  747.  
  748. function getCoverageTable(index, rows) {
  749. var title = "Coverage";
  750. var columns = ["Name","Cmp", "Att","Pct","Yards", "PD"];
  751.  
  752. var r = rows;
  753. if (rows == null) r = [];
  754. else if (rows.length == 0) r = [];
  755. return getTable(title,r,columns,index,"cv",true);
  756. }
  757.  
  758. function getBlockingTable(index, rows) {
  759. var title = "Blocking";
  760. var columns = ["Name","Hurries","Sacks"];
  761.  
  762. var r = rows;
  763. if (rows == null) r = [];
  764. else if (rows.length == 0) r = [];
  765. return getTable(title,r,columns,index,"bl",true);
  766. }
  767.  
  768. function getTable(title, rows, columns, index, prefix, sortable) {
  769. var t = document.createElement("table");
  770. t.setAttribute("border","1");
  771. t.setAttribute("cellspacing","0");
  772. t.setAttribute("style","width: 485px;visibility: visible;");
  773. t.setAttribute('id','scout-'+prefix+""+index+'-table');
  774.  
  775. var tr = document.createElement("tr");
  776. tr.setAttribute('class','nonalternating_color pbp_pbr_title');
  777.  
  778. var td = document.createElement("td");
  779. td.setAttribute('id','team'+index+""+prefix);
  780. td.setAttribute('colspan',columns.length+1);
  781. td.setAttribute('align','center');
  782. td.appendChild(document.createTextNode(title));
  783. tr.appendChild(td);
  784. t.appendChild(tr);
  785.  
  786. var tr2 = document.createElement("tr");
  787. tr2.setAttribute('class','nonalternating_color2 pbp_pbr_title');
  788. var first = document.createElement("td");
  789. first.setAttribute("align","left");
  790. first.appendChild(document.createTextNode(columns[0]));
  791. tr2.appendChild(first);
  792. if (sortable == true) {
  793. tr2.addEventListener("click",sortEvent,true);
  794. }
  795. for (var x=1; x<columns.length; x++) {
  796. var colname = document.createElement("td");
  797. var colname = document.createElement("td");
  798. colname.setAttribute('align','center');
  799. var tn = document.createTextNode(columns[x]);
  800. colname.appendChild(tn);
  801. tr2.appendChild(colname);
  802. }
  803. t.appendChild(tr2);
  804.  
  805. for (var y=0; y<rows.length; y++) {
  806. var tr3 = document.createElement("tr");
  807. tr3.setAttribute('class','alternating_color'+(y%2+1)+' pbp_pbr_title_row');
  808. var rowname = document.createElement("td");
  809. rowname.appendChild(document.createTextNode(rows[y]));
  810. tr3.appendChild(rowname);
  811. for (var x=1; x<columns.length; x++) {
  812. var stat = document.createElement("td");
  813. stat.setAttribute('id',prefix+'-'+(x-1)+'-'+y+'-'+index);
  814. stat.setAttribute('align','center');
  815. stat.appendChild(document.createTextNode('('+(x-1)+','+y+')'));
  816. tr3.appendChild(stat);
  817. }
  818. t.appendChild(tr3);
  819. }
  820. return t;
  821. }
  822.  
  823. function sortEvent(evt) {
  824. sortTable(evt.target.parentNode.parentNode,evt.target.cellIndex);
  825. return true;
  826. }
  827.  
  828. function sortTable(table, column) {
  829. var rows = table.rows;
  830. var viz = table.getAttribute("style");
  831. table.setAttribute("style","visibility: hidden;");
  832. for (var i=2; i<rows.length-1; i++) {
  833. var idx = i;
  834. for (var j=i; j<rows.length-1; j++) {
  835. var lrow = rows.item(idx);
  836. var lcell = lrow.cells.item(column);
  837. var rrow = rows.item(j+1);
  838. var rcell = rrow.cells.item(column);
  839. var left = parseFloat(lcell.innerHTML);
  840. var right = parseFloat(rcell.innerHTML);
  841. if (isNaN(left) || isNaN(right)) {
  842. left = lcell.innerHTML.toLowerCase();
  843. right = rcell.innerHTML.toLowerCase();
  844. if (left > right) {
  845. idx = j+1;
  846. }
  847. }
  848. else {
  849. if (left < right) {
  850. idx = j+1;
  851. }
  852. }
  853. }
  854. if (idx != -1) {
  855. var r = table.rows.item(idx);
  856. table.deleteRow(idx);
  857. var newRow = table.insertRow(i);
  858. newRow.setAttribute("class","alternating_color"+(i%2+1)+" pbp_pbr_title_row");
  859. for (var x=0; x<r.cells.length; x++) {
  860. var cell = newRow.insertCell(x);
  861. cell.setAttribute("align",r.cells.item(x).getAttribute("align"));
  862. cell.setAttribute("id",r.cells.item(x).getAttribute("id"));
  863. cell.innerHTML = r.cells.item(x).innerHTML;
  864. }
  865. }
  866. }
  867. if (rows.length != 2) {
  868. var lastRow = table.rows.item(rows.length-1);
  869. lastRow.setAttribute("class","alternating_color"+((rows.length-1)%2+1)+" pbp_pbr_title_row");
  870. }
  871. table.setAttribute("style",viz);
  872. }
  873.  
  874.