// ==UserScript==
// @name GLB Game Log Totals
// @namespace pbr
// @include http://goallineblitz.com/game/player_game_log.pl?*player_id=*
// @include http://glb.warriorgeneral.com/game/player_game_log.pl?*player_id=*
// @copyright 2009, pabst
// @license (CC) Attribution Share Alike; http://creativecommons.org/licenses/by-sa/3.0/
// @version 13.12.29
// @description Show stat totals on the GLB Player Log page by team, by score, and by game type.
// ==/UserScript==
var blowout = 55;
var titles = ["Scrim","Seas","Post","Diff <"+blowout,"Diff >"+blowout];
window.setTimeout(
function() {
game_log_main();
},
500
);
function game_log_main() {
var table = document.getElementById("career_stats");
table.style.display = "none";
tableSetup();
getStats();
var table = document.getElementById("career_stats");
table.style.display = "";
}
function Game() {
this.week = null;
this.team = null;
this.teamLink = null;
this.res = null;
this.diff = null;
this.stats = new Array();
this.toString = function() {
return (this.week+" : "+this.team+"("+this.teamLink.href.split("=")[1]+" vs. "+this.oppLink.href.split("=")[1]+") -"+this.res+"- "+this.diff+" -- "+this.stats.toString());
}
}
function getStats() {
var games = new Array();
var table = document.getElementById("career_stats");
for (var i=2; i<table.rows.length; i++) {
if ((table.rows[i].id.indexOf("total_") == -1) &&
(table.rows[i].className.indexOf("nonalternating") == -1)) {
games.push(getGame(table.rows[i]));
}
}
var scrim = new Array();
var seas = new Array();
var post = new Array();
var bl = new Array();
var nbl = new Array();
for (var i=0; i<games.length; i++) {
var g = games[i];
//console.log(g.toString());
if (g.week == 0) {
scrim.push(g);
}
else if (g.week < 17) {
seas.push(g);
if (g.diff < blowout) {
nbl.push(g);
}
else {
bl.push(g);
}
}
else {
var found = false;
for (var j=0; j<seas.length; j++) {
if (seas[j].oppLink.href == g.oppLink.href) {
post.push(g);
found = true;
break;
}
}
if (found == false) {
if (g.week == 20) {
var champion = true;
for (var gidx=games.length-4; gidx<games.length-1; gidx++) {
//console.log(games[gidx].toString()+" <> "+games[gidx].res);
if (games[gidx].res == "L") {
champion = false;
break;
}
}
if (champion == true) {
post.push(g);
}
else {
scrim.push(g);
}
}
else {
scrim.push(g);
}
}
}
}
// console.log(scrim.length+" - "+seas.length+" - "+post.length+" - "+nbl.length+" - "+bl.length);
var types = [scrim,seas,post,nbl,bl];
for (var i=0; i<types.length; i++) {
if (types[i].length == 0) continue;
var total = getTotal(types[i]);
//console.log(titles[i]+" : "+total);
var el = document.getElementById("total_"+titles[i]);
insertTotals(el, types[i], total);
var teams = getTeams(types[i]);
if (teams.length > 1) {
el.cells[1].setAttribute("align","left");
el.cells[1].innerHTML = "---";
for (var t=0; t<teams.length; t++) {
var tr = document.createElement("tr");
tr.setAttribute("class",el.getAttribute("class"));
for (var j=0; j<el.cells.length; j++) {
tr.insertCell(0);
tr.cells[j].setAttribute("align",el.cells[j].getAttribute("align"));
}
var a = document.createElement("a");
a.href = teams[t][0].teamLink;
a.textContent = teams[t][0].team;
tr.cells[1].appendChild(a);
insertTotals(tr, teams[t], getTotal(teams[t]));
table.insertBefore(tr, el.nextSibling);
}
}
}
}
var start = 4;
function insertTotals(el, g, t) {
el.cells[2].setAttribute("align","left");
el.cells[2].innerHTML = g.length;
var win = 0;
for (var i=0; i<g.length; i++) {
if (g[i].res == "W") win++;
}
el.cells[3].setAttribute("align","center");
el.cells[3].innerHTML = win+"-"+(g.length-win);
var start=5;
for (var i=start; i<el.cells.length; i++) {
el.cells[i].setAttribute("align","right");
if (t[i-start] != null) {
el.cells[i].innerHTML = t[i-start];
}
else {
el.cells[i].innerHTML = " ";
}
}
}
function getTeams(g) {
var idx = -1;
var ids = new Array();
var teams = new Array();
for (var i=0; i<g.length; i++) {
idx = ids.indexOf(g[i].team);
// console.log(ids+" -- "+idx);
if (idx == -1) {
idx = ids.length;
ids.push(g[i].team);
teams[idx] = new Array();
}
teams[idx].push(g[i]);
}
/*
console.log(teams.length);
for (var i=0; i<teams.length; i++) {
console.log(teams[i]+" --> "+teams[i].length);
}
*/
return teams;
}
function getTotal(g) {
var pos = document.getElementsByClassName("position")[0].innerHTML;
var result = new Array();
switch (pos) {
case "C" : ;
case "G" : ;
case "OT" : result = olTotal(g);
break;
case "QB" : result = qbTotal(g);
break;
case "HB" : ;
case "FB" : result = rbTotal(g);
break;
case "TE" : result = teTotal(g);
break;
case "WR" : result = wrTotal(g);
break;
case "DT" : ;
case "DE" : ;
case "LB" : ;
case "FS" : ;
case "SS" : result = defTotal(g);
break;
case "CB" : result = cbTotal(g);
break;
case "P" : result = pTotal(g);
break;
case "K" : result = kTotal(g);
break;
}
return result;
}
function defTotal(g) {
var result = new Array();
if (g.length == 0) return result;
for (var i=0; i<g[0].stats.length; i++) {
result[i] = 0;
}
for (var i=0; i<g.length; i++) {
for (var j=0; j<result.length; j++) {
if (g[i].stats[j] != null) {
result[j] += parseInt(g[i].stats[j]);
}
}
}
return result;
}
function olTotal(g) {
var result = defTotal(g);
return result;
}
function cbTotal(g) {
var result = defTotal(g);
result[7] = avg(result, 5, 6);
result[11] = avg(result, 9, 10);
result[6] = result[6].toFixed(0);
result[10] = result[10].toFixed(0);
return result;
}
function qbTotal(g) {
var result = defTotal(g);
result[3] = (100*result[1] / result[2]).toFixed(1);
result[5] = avg(result, 2, 4);
result[11] = avg(result, 9, 10);
result[0] = qbrating(result).toFixed(1);
result[4] = result[4].toFixed(0);
result[10] = result[10].toFixed(0);
return result;
}
function rbTotal(g) {
var result = defTotal(g);
result[2] = avg(result, 0, 1);
result[6] = avg(result, 4, 5);
result[7] = yac(g, 4, 7);
result[1] = result[1].toFixed(0);
result[5] = result[5].toFixed(0);
return result;
}
function wrTotal(g) {
var result = defTotal(g);
result[2] = avg(result, 0, 1);
result[7] = avg(result, 5, 6);
result[11] = avg(result, 9, 10);
result[3] = yac(g, 0, 3);
result[1] = result[1].toFixed(0);
result[6] = result[6].toFixed(0);
result[10] = result[10].toFixed(0);
return result;
}
function teTotal(g) {
var result = defTotal(g);
result[2] = avg(result, 0, 1);
result[3] = yac(g, 0, 3);
result[1] = result[1].toFixed(0);
result[6] = result[6].toFixed(0);
return result;
}
function pTotal(g) {
var result = defTotal(g);
result[2] = avg(result, 0, 1);
result[1] = result[1].toFixed(0);
return result;
}
function kTotal(g) {
var result = defTotal(g);
for (var i=2; i<7; i++) {
result[i] = fgTotal(g,i);
}
return result;
}
function fgTotal(g, idx) {
var fg = 0;
var att = 0;
for (var i=0; i<g.length; i++) {
fg += parseInt(g[i].stats[idx]);
att += parseInt(g[i].stats[idx].split("/")[1]);
}
return fg+"/"+att;
}
function avg(arr, a, y) {
var res = (arr[y] / arr[a]).toFixed(1);
if (isNaN(res) == true) {
res = "0.0";
}
return res;
}
function yac(g, r, y) {
var rec = 0;
var yac = 0;
for (var i=0; i<g.length; i++) {
rec += g[i].stats[r];
yac += g[i].stats[r]*g[i].stats[y];
}
if (rec == 0) return "0.0";
return (yac/rec).toFixed(1);
}
function qbrating(arr) {
var x = arr[1] / arr[2];
x -= 0.3;
x /= 0.2;
x = Math.max(x,0);
x = Math.min(x,2.375);
var y = arr[4] / arr[2];
y -= 3;
y /= 4;
y = Math.max(y,0);
y = Math.min(y,2.375);
var z = arr[6] / arr[2];
z /= 0.05;
z = Math.max(z,0);
z = Math.min(z,2.375);
var w = arr[7] / arr[2];
w = 0.095 - w;
w /= 0.04;
w = Math.max(w,0);
w = Math.min(w,2.375);
//console.log(x+" - "+y+" - "+z+" - "+w);
rating = (x+y+z+w)*100/6;
rating = Math.round(rating*10);
rating /= 10;
return rating;
}
function getGame(row) {
var g = new Game();
g.week = row.cells[0].textContent;
g.team = row.cells[1].firstChild.innerHTML;
g.teamLink = row.cells[1].firstChild;
g.opp = row.cells[2].firstChild.innerHTML;
g.oppLink = row.cells[2].firstChild;
g.res = row.cells[3].firstChild.innerHTML.slice(0,1);
var diff = row.cells[3].firstChild.innerHTML;
diff = diff.slice(1).split("-");
g.diff = Math.max(parseInt(diff[0]),parseInt(diff[1])) - Math.min(parseInt(diff[0]),parseInt(diff[1]));
g.stats = new Array();
// if (isNaN(parseFloat(row.cells[4].textContent)) == true) start++;
var start=5;
for (var i=start; i<row.cells.length; i++) {
if (row.cells[i].textContent.indexOf("/") == -1) {
g.stats.push(parseFloat(row.cells[i].textContent));
}
else {
g.stats.push(row.cells[i].textContent);
}
}
return g;
}
function tableSetup() {
var table = document.getElementById("career_stats");
if (table == null) return;
var count = table.rows[1].cells.length;
var tr = document.createElement("tr");
tr.setAttribute("class","nonalternating_color2");
for (var i=0; i<count; i++) {
var td = tr.insertCell(tr.cells.length);
var align = "right";
if (i < 3) align = "left";
else if (i == 3) align = "center";
td.setAttribute("align",align);
if (i == 1) td.innerHTML = "Team";
else if (i == 2) td.innerHTML = "G";
else if (i == 3) td.innerHTML = "W-L";
else if (i < 4) td.innerHTML = ' ';
else td.innerHTML = table.rows[1].cells[i].innerHTML;
}
table.appendChild(tr);
for (var j=0; j<5; j++) {
var tr = document.createElement("tr");
tr.setAttribute("class","alternating_color"+((j%2)+1));
tr.setAttribute("id","total_"+titles[j]);
for (var i=0; i<count; i++) {
var td = tr.insertCell(0);
td.innerHTML = ' ';
}
tr.cells[0].setAttribute("style","font-weight:bold");
tr.cells[0].innerHTML = titles[j];
table.appendChild(tr);
if (j == 2) {
var tr = document.createElement("tr");
tr.setAttribute("class","nonalternating_color2");
for (var i=0; i<count; i++) {
var td = tr.insertCell(tr.cells.length);
td.innerHTML = ' ';
}
table.appendChild(tr);
}
}
var tr = document.createElement("tr");
tr.setAttribute("class","nonalternating_color2");
for (var i=0; i<count; i++) {
var td = tr.insertCell(tr.cells.length);
td.innerHTML = ' ';
}
table.appendChild(tr);
}