您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds some new features to the GoallineBlitz.com replay page.
当前为
// ==UserScript== // @name Replay Rewrite // @namespace pbr/rr // @include http://*goallineblitz.com/game/replay.pl?game_id=*&pbp_id=* // @include http://glb.warriorgeneral.com/game/replay.pl?game_id=*&pbp_id=* // @copyright 2010, pabst // @license (CC) Attribution Share Alike; http://creativecommons.org/licenses/by-sa/3.0/ // @version 13.12.29 // @require http://userscripts.org/scripts/source/28938.user.js // @require http://userscripts.org/scripts/source/31573.user.js // @require http://userscripts.org/scripts/source/54630.user.js // @description Adds some new features to the GoallineBlitz.com replay page. // ==/UserScript== /* * * pabst did this 09/07/21+ * * */ var scriptName = "Replay Rewrite"; var scriptVersion = "13.12.29"; var scriptWebpage = "http://userscripts.org/scripts/show/31640"; // you can modify the following variables var preDelay = 3000; var postDelay = 3000; var alwaysPause = false; var alwaysShowPlayText = (unsafeWindow.hide_scores != 1); // <--account option var showFallenPlayers = true; //should pancakes/falls/jukes be shown var showShrinkAnimation = false; var offenseOnBottom = false; var horizontalField = false; var frameRate = 1000/unsafeWindow.frameSpeed; // <--account option var visionDivSize = 2; var visionDivSkip = 4; // you can modify the previous variables // don't screw with these var ihavearealoperatingsystem = false; var pancakeCheck = function() { return; }; if (showFallenPlayers == true) { if (showShrinkAnimation == true) { pancakeCheck = playerShrink; } else { pancakeCheck = playerTrim; } } var replayRewrite = true; var plays = null; var currentPlay = -1; var playDone = false; var playPaused = false; var prePlayTimer = null; var postPlayTimer = null; var playFinishedTimer = null; var httpRequest = null; var frameSpeed = 925/frameRate; var frameTimer = null; var hometeam = unsafeWindow.home; var showVision = true; var showIcons = !unsafeWindow.drawIcons; var vision_data = null; var cam_data = null; var play_data = null; var poss_data = null; var currentFrame = 0; var playerDiv = new Array(); var playerOvr = new Array(); var ptid = unsafeWindow.ptid; var useDefaultColors = unsafeWindow.useDefaultColors; var replayArea = null; var lastTime = -1; var thisScore = unsafeWindow.this_score; var scoreUpdate = unsafeWindow.score_update; var playerExtrasIn = new Array(); var playerExtrasOut = new Array(); var firstRun = true; var ballImage = "/images/ball.gif"; var ballMotionImg = null; var gradient = [["#910000"],["#9a0000"],["#a30000"],["#ad0000"],["#b60000"],["#bf0000"],["#c90000"],["#d20000"],["#db0000"],["#e40000"],["#ed0000"],["#f70000"],["#ff0100"],["#ff0e00"],["#ff1c00"],["#ff2900"],["#ff3600"],["#ff4300"],["#ff5000"],["#ff5d00"],["#ff6a00"],["#ff7700"],["#ff8400"],["#ff9200"],["#ff9f00"],["#ffa600"],["#ffa800"],["#ffaa00"],["#ffad00"],["#ffaf00"],["#ffb200"],["#ffb400"],["#ffb600"],["#ffb900"],["#ffbb00"],["#ffbd00"],["#ffc000"],["#ffc200"],["#ffc500"],["#ffc700"],["#ffc900"],["#ffcc00"],["#ffce00"],["#ffd100"],["#ffd300"],["#ffd500"],["#ffd800"],["#ffda00"],["#ffdc00"],["#ffdf00"],["#ffe100"],["#ffe400"],["#ffe600"],["#ffe800"],["#ffeb00"],["#ffed00"],["#fff000"],["#fff200"],["#fff400"],["#fff700"],["#fff900"],["#fffc00"],["#fffe00"],["#fafc00"],["#f3f900"],["#ecf500"],["#e5f200"],["#dfef00"],["#d8eb00"],["#d1e800"],["#cae400"],["#c3e100"],["#bdde00"],["#b6da00"],["#afd700"],["#a8d300"],["#a2d000"],["#9bcd00"],["#94c900"],["#8dc600"],["#86c200"],["#80bf00"],["#79bc00"],["#72b900"],["#6bb500"],["#65b200"],["#5eaf00"],["#57ab00"],["#50a800"],["#49a400"],["#43a100"],["#3c9e00"],["#359a00"],["#2e9700"],["#289400"],["#219000"],["#1a8d00"],["#138900"],["#0c8600"],["#068300"],["#068300"]]; window.setTimeout( function() { unsafeWindow.pause(); clearTimeout(unsafeWindow.frameTimer); unsafeWindow.frameTimer = null; main(); } , 1); function main() { clearPlayers(); addScriptTags(); restructurePage(); addPlayerLinks(); bortFix(); pbpSetup(); } function createButton(title, cls) { var btn = document.createElement("a"); btn.className = "button left "+cls; btn.innerHTML = "<span>"+title+"</span>"; return btn; } function addScriptTags() { var rrtag = document.createElement("div"); rrtag.setAttribute("id","rrtag"); var div = document.createElement("div"); div.id = "active_list"; div.innerHTML = "<b>Active GM Scripts</b>"; rrtag.appendChild(div); var rrplay = document.createElement("input"); rrplay.setAttribute("id","rrplay"); rrplay.setAttribute("style","display:none; visibility:hidden;"); rrplay.setAttribute("type","text"); rrplay.setAttribute("value",window.location.toString()); document.body.appendChild(rrtag); document.body.appendChild(rrplay); addToActive(); } function restructurePage() { var repfoot = document.getElementById("replay_footer"); repfoot.style.height = "90px"; var playHeader = document.getElementById("replay_header"); var playInfo = document.getElementById("play_info"); var playDesc = document.getElementById("play_outcome"); if (alwaysShowPlayText == false) { playDesc.style.display = "block"; playDesc.style.visibility = "hidden"; } var cnt = document.getElementById("play_container"); cnt.setAttribute("class","play_container"); var color = document.getElementById("color_options"); color.style.width = "190px"; var pposs = createButton("<< Prev Poss","ppossbtn"); var pplay = createButton("< Prev", "pplaybtn"); var rst = createButton("Reset","resetbtn"); var nplay = createButton("Next >", "nplaybtn"); var nposs = createButton("Next Poss >>", "npossbtn"); var rewbtn = document.createElement("a"); rewbtn.className = "button left rewbtn"; rewbtn.innerHTML = '<span class="button_ff_rw"><img src="/images/game/design/replay/button_rw.gif"/></span>'; var pausebtn = document.createElement("a"); pausebtn.setAttribute("class","button left pausebtn"); pausebtn.innerHTML = '<span class="button_ff_rw"><img src="/images/game/design/replay/button_pause.gif"/></span>'; var playbtn = document.createElement("a"); playbtn.setAttribute("class","button left playbtn"); playbtn.innerHTML = '<span class="button_ff_rw"><img src="/images/game/design/replay/button_play.gif"/></span>'; var ffbtn = document.createElement("a"); ffbtn.setAttribute("class","button left ffbtn"); ffbtn.innerHTML = '<span class="button_ff_rw"><img src="/images/game/design/replay/button_ff.gif"/></span>'; var control = document.getElementById("controls"); control.style.width = "650px"; control.style.marginLeft = "0px"; while (control.childNodes.length > 0) { control.removeChild(control.firstChild); } control.appendChild(pposs); control.appendChild(pplay); control.appendChild(rst); control.appendChild(rewbtn); control.appendChild(pausebtn); control.appendChild(playbtn); control.appendChild(ffbtn); control.appendChild(nplay); control.appendChild(nposs); pposs.addEventListener("click",input,true); pplay.addEventListener("click",input,true); rst.addEventListener("click", reset, true); rewbtn.addEventListener("click",rew,true); playbtn.addEventListener("click",play,true); pausebtn.addEventListener("click",pauseReplay,true); ffbtn.addEventListener("click",ff,true); nplay.addEventListener("click",input,true); nposs.addEventListener("click",input,true); var div = document.createElement("div"); div.setAttribute("style","float: right"); div.style.marginRight = "10px"; div.style.marginTop = "15px"; var area = document.getElementById("replay_area"); area.style.width = "520px"; area.style.height = "1160px"; var fimg = area.style.backgroundImage; area.style.backgroundImage = "none"; var img = document.createElement("img"); if (fimg.toString().indexOf('url("') == 0) { console.log("firefox >3.6"); img.src = fimg.slice(fimg.indexOf("/"),fimg.indexOf('")')); } else if (fimg.toString().indexOf('url(') == 0) { console.log("firefox <3.6"); img.src = fimg.slice(fimg.indexOf("/"),fimg.indexOf(")")); } else { console.log("what firefox version is this?"); console.log(fimg.toString()); img.src = fimg.slice(fimg.indexOf("/"),fimg.indexOf(")")); } img.id = "field_image"; img.style.zIndex = 0; area.appendChild(img); inp = document.createElement("input"); inp.id = "use_vision"; inp.type = "checkbox"; var data = "0"; if (GM_getValue) { data = GM_getValue("use_vision",1); if (data == "1") { inp.checked = true; } showVision = (data == "1"); } var vs = document.getElementById("use_hidden_qb_vision"); if (vs != null) { vs.parentNode.insertBefore(inp,vs); vs.parentNode.removeChild(vs); inp.nextSibling.textContent = " Show QB Vision"; } else { var text = document.createElement("text"); text.textContent = " Show QB Vision"; var options = document.getElementById("options_popup"); options.appendChild(inp); options.appendChild(text); options.appendChild(document.createElement("br")); } inp.addEventListener("click",visionClicked,false); var br = document.createElement("br"); inp = document.createElement("input"); inp.id = "variable_framerate"; inp.type = "checkbox"; var data = "0"; if (GM_getValue) { data = GM_getValue("variable_framerate",0); if (data == "1") { inp.checked = true; } ihavearealoperatingsystem = (data == "1"); } var text = document.createElement("text"); text.textContent = " Variable Framerate"; var options = document.getElementById("options_popup"); options.appendChild(br); options.appendChild(inp); options.appendChild(text); inp.addEventListener("click",framerateChanged,false); var inp = document.getElementById("use_hidden_icons"); if (inp == null) { inp = document.createElement("input"); inp.id = "use_hidden_icons"; inp.type = "checkbox"; text = document.createElement("text"); text.textContent = " Hide Popup Icons"; var options = document.getElementById("options_popup"); options.appendChild(br); options.appendChild(inp); options.appendChild(text); } showIcons = !inp.checked; inp.addEventListener("click",iconsClicked,false); options.style.top = "575px";//parseInt(options.style.top)-100+"px"; options.style.height = "150px"; if (document.getElementById("rrframe") == null) { var div = document.createElement("input"); div.type = "hidden"; div.id = "rrframe"; div.value = 0; document.getElementById("footer").appendChild(div); } var page = new Object(); page.responseText = window.document.body.innerHTML; addPlayInfo(page); } function framerateChanged(e) { if (e.target.checked == false) { if (GM_setValue) { GM_setValue("variable_framerate",0); } ihavearealoperatingsystem = false; frameSpeed = 925/frameRate; } else { if (GM_setValue) { GM_setValue("variable_framerate",1); } ihavearealoperatingsystem = true; } } function iconsClicked(e) { if (e.target.checked == true) { showIcons = false; } else { showIcons = true; } } function visionClicked(e) { if (e.target.checked == false) { if (GM_setValue) { GM_setValue("use_vision",0); } showVision = true; var vis = document.getElementById("vision"); if (vis != null) { vis.parentNode.removeChild(vis); } } else { if (GM_setValue) { GM_setValue("use_vision",1); } showVision = false; } } function pbpSetup() { var pbptag = document.createElement("div"); pbptag.setAttribute("id","pbp"); var pbp = document.getElementById("pbp"); if (pbp == null) { document.body.appendChild(pbptag); var href = window.location.toString(); href = href.replace("replay.pl","game.pl"); var idx = href.indexOf("&pbp_id"); href = href.slice(0,idx) + "&mode=pbp"; getInetPage(href, importPBP); setTimeout(pbpSetup, 300); return; } else if (pbp.childNodes.length == 0) { setTimeout(pbpSetup, 300); return; } var page = new Object(); page.responseText = pbp.innerHTML; if (plays == null) { loadPBPSimple(page); } resetPlay(); buttonSetup(); if (alwaysPause == false) { play(); } } function addPlayInfo(page) { if (document.getElementById("use_playcall").checked == true) return; var odesc = null; try { odesc = page.responseText.split("Offense Play:<br>")[1].split("<")[0]; } catch (e) { console.log("first play? : "+e); return; } if (odesc != null) { var ddesc = null; try { ddesc = page.responseText.split("Defense Play:<br>")[1].split("<")[0]; } catch (e) { console.log("no AI access? : "+e); } if (ddesc == null) { ddesc = "Unknown"; if (odesc == "Field Goal") ddesc = "Field Goal Block"; else if (odesc == "Kickoff Return") ddesc = "Kickoff"; else if (odesc == "Punt") ddesc = "Punt Return"; else { var dl = 0; var lb = 0; var cb = 0; var s = 0; for (p in unsafeWindow.players) { var pos = unsafeWindow.players[p].position; console.log(pos); switch (pos) { case "LDE": case "DT": case "NT": case "RDE": dl++; break; case "LOLB": case "LILB": case "MLB": case "RILB": case "ROLB" : lb++; break; case "CB1": case "CB2": case "CB3": case "CB4": case "CB5" : cb++; break; case "FS": case "SS": s++; } } console.log(dl+" : "+lb+" : "+cb+" : "+s); if (lb == 4) { if (dl == 3) ddesc = "3-4"; else ddesc = "4-4"; } else if (cb == 5) ddesc = "3-1-7 Quarter"; else if (cb == 4) { if (lb == 1) ddesc = "4-1-6 Dime"; else ddesc = "3-2-6 Dime"; } else if (cb == 3) { if (lb == 2) ddesc = "4-2-5 Nickel"; else ddesc = "3-3-5 Nickel"; } else if (lb == 3) ddesc = "4-3"; else if (cb == 2) ddesc = "Goalline Small"; else ddesc = "Goalline"; } } var diff = 4; if (goingUp(unsafeWindow.play_data) == true) { diff += 456; } while (document.getElementsByClassName("play_container").length > 0) { var pc = document.getElementsByClassName("play_container"); pc[0].parentNode.removeChild(pc[0]); } console.log(odesc+" : "+ddesc); var odiv = document.createElement("div"); odiv.setAttribute("class","play_container"); odiv.setAttribute("id","play_container"); odiv.setAttribute("style","top:"+diff+"px; left:4px"); odiv.innerHTML = "Offense Play:<br>"+odesc; document.getElementById("replay_container").appendChild(odiv); var ddiv = document.createElement("div"); ddiv.setAttribute("class","play_container"); ddiv.setAttribute("id","play_container"); ddiv.setAttribute("style","top:"+diff+"px; left:269px;"); ddiv.innerHTML = "Defense Play:<br>"+ddesc; document.getElementById("replay_container").appendChild(ddiv); } } function buttonSetup(play) { var currentPlay = -1; if (play == null) { var addr = document.getElementById("rrplay").value; for (var i=0; i<plays.length; i++) { if (plays[i].replay == addr) { currentPlay = i; document.getElementById("rrplay").setAttribute("index",i); break; } } } else { currentPlay = play; } console.log("currentPlay = "+currentPlay); var control = document.getElementById("controls"); var buttons = control.getElementsByClassName("button"); for (var i=0; i<buttons.length; i++) { var b = buttons[i]; if (b.firstChild.innerHTML == "Next >") { b.id = Math.min(currentPlay+1, plays.length-1); } else if (b.firstChild.innerHTML == "Next Poss >>") { b.id = Math.min(currentPlay+100, findPoss(currentPlay,99)); } else if (b.firstChild.innerHTML == "< Prev") { b.id = Math.max(currentPlay-1, 0); } else if (b.firstChild.innerHTML == "<< Prev Poss") { b.id = Math.max(currentPlay-100, findPoss(currentPlay,-99)); } } var playText = plays[currentPlay].play; if ((playText.indexOf("Kickoff") == 0) || (playText.indexOf("Punt by ") == 0) || (playText.indexOf(" attempted by ") != -1)) { ballMotionImg = "kicking-ball.gif"; } else { ballMotionImg = "passing-ball.gif"; } } function addPlayerLinks() { var links = document.getElementsByClassName("player_name"); for (var i=0; i<links.length; i++) { var id = links[i].href.split("=")[1]; links[i].id = "player_link_"+id; } } function clearPlayers() { var area = document.getElementById("replay_area"); var list = area.getElementsByClassName("player_icon_overlay"); while (list.length > 0) { list[0].parentNode.removeChild(list[0]); list = area.getElementsByClassName("player_icon_overlay"); } list = area.getElementsByClassName("player_icon"); while (list.length > 0) { list[0].parentNode.removeChild(list[0]); list = area.getElementsByClassName("player_icon"); } list = area.getElementsByClassName("player_popup_icon"); while (list.length > 0) { list[0].parentNode.removeChild(list[0]); list = area.getElementsByClassName("player_popup_icon"); } } //var diffarray = new Array(); var startTime = 0; var endTime = 0; var adj = [0,0]; function render() { //console.log("render: pP="+playPaused+" : pFT="+(playFinishedTimer != null)+" : cF="+currentFrame+" / "+play_data.length); //console.log(playPaused); //console.log(playFinishedTimer == null); if (playPaused == true) { return; } if (playFinishedTimer != null) { return; } if (lastTime == -1) { lastTime = new Date().getTime(); if (alwaysPause == true) { playPaused = true; return; } else { frameTimer = setTimeout(render,preDelay); return; } } if (currentFrame == 0) { startTime = new Date().getTime(); } //console.log("a "+currentFrame+" --- "+(play_data.length)); if (currentFrame < play_data.length) { var newTime = new Date().getTime(); var diff = newTime - lastTime; if (ihavearealoperatingsystem == true) { //diffarray.push(diff); if (diff < frameSpeed) { frameTimer = setTimeout(render,frameSpeed-diff); return; } //draw frame here drawFrame(); currentFrame++; if ((1000/(newTime-lastTime)) < (frameRate-0.5)) { frameSpeed = frameSpeed * 0.95; adj[0]++; } else if ((1000/(newTime-lastTime)) > (frameRate+0.5)) { frameSpeed = frameSpeed * 1.05; adj[1]++; } lastTime = newTime; } else { //diffarray.push(diff); if (diff < frameSpeed) { frameTimer = setTimeout(render,5); return; } //draw frame here drawFrame(); currentFrame++; lastTime = newTime; } } //console.log("b "+currentFrame+" --- "+(play_data.length)); if (currentFrame > play_data.length-1) { endTime = new Date().getTime(); console.log(startTime+" - "+endTime+" = "+(endTime-startTime)+" | "+play_data.length+" | "+(play_data.length/((endTime-startTime)/1000)).toFixed(2)+" - "+frameSpeed.toFixed(2)+" | "+frameRate+"["+adj[0]+"/"+adj[1]+"]"); clearTimeout(frameTimer); frameTimer = null; adj = [0,0]; var p = document.getElementById("play_outcome"); p.style.display = "block"; p.style.visibility = "visible"; currentFrame = 0; playDone = true; if (parseInt(thisScore) != 0) { var sdiv = null; if (scoreUpdate == "O") { sdiv = document.getElementById("off_score"); } else { sdiv = document.getElementById("def_score"); } sdiv.innerHTML = parseInt(sdiv.innerHTML) + parseInt(thisScore); sdiv.style.outlineStyle = "solid"; sdiv.style.outlineColor = "white"; sdiv.style.color = "gold"; thisScore = 0; } if (playFinishedTimer == null) { //console.log("setting playIsFinished"); playFinishedTimer = setTimeout(playIsFinished,postDelay); } else { console.log("not setting playIsFinished"); } //console.log(diffarray); //diffarray = new Array(); } else { frameTimer = setTimeout(render,5);//frameSpeed>>2); } } function play() { if (frameTimer != null) { clearTimeout(frameTimer); frameTimer = null; } var div = document.getElementById("rrplay"); if (div.childNodes.length > 0) { //console.log("waiting ("+div.childNodes.length+") ..."); setTimeout(play, 200); return; } playPaused = false; render(); } function pauseReplay() { // console.log("pauseReplay"); if (playDone == true) { if (postPlayTimer != null) { clearTimeout(postPlayTimer); postPlayTimer = null; } playPaused = true; playDone = false; } else { playPaused = !playPaused; } // console.log("playDone is "+playDone); if (playPaused == true) { clearTimeout(frameTimer); frameTimer = null; } else { if (playDone == false) { play(); } } } function findPlayer(player, arr) { //console.log("findPlayer"); var output = -1; for (var i=0; i<arr.length; i++) { if (player.id == arr[i].id) { output = i; break; } } //console.log(player.id+" <--> "+arr[output].id); //console.log(" : returning "+output); if (output == -1) { console.log("this is -1 : "+player.id); } return output; } function bortFix() { if (firstRun == true) { for (var f=0; f<unsafeWindow.play_data.length; f++) { for (var p=0; p<unsafeWindow.play_data[f].length; p++) { unsafeWindow.play_data[f][p].x = (unsafeWindow.play_data[f][p].x - 20) / 3; unsafeWindow.play_data[f][p].y = (unsafeWindow.play_data[f][p].y - 40) / 3; if (unsafeWindow.frameSpeed != 100) { if (unsafeWindow.play_data[f][p].tx != null) { unsafeWindow.play_data[f][p].tx = (unsafeWindow.play_data[f][p].tx - 20) / 3; unsafeWindow.play_data[f][p].ty = (unsafeWindow.play_data[f][p].ty - 40) / 3; } } } } if (offenseOnBottom == true) { if (goingUp(unsafeWindow.play_data) == false) { for (var f=0; f<unsafeWindow.play_data.length; f++) { for (var p = 0; p < unsafeWindow.play_data[f].length; p++) { unsafeWindow.play_data[f][p].x = 160 - unsafeWindow.play_data[f][p].x; unsafeWindow.play_data[f][p].y = 360 - unsafeWindow.play_data[f][p].y; if (unsafeWindow.play_data[f][p].tx != null) { unsafeWindow.play_data[f][p].tx = 160 - unsafeWindow.play_data[f][p].tx; unsafeWindow.play_data[f][p].ty = 360 - unsafeWindow.play_data[f][p].ty; } } } } } firstRun = false; } } function goingUp(pd) { if (pd.length == 0) return 0; var count = 0; for (var i=1; i<pd[0].length; i++) { if (pd[0][0].y >= pd[0][i].y) { count++; } else { count--; } } return count > 0; } var rotation = null; function fixFrames() { //console.log("fixFrames"); var stime = new Date(); var uwpd = new Array(); for (var i=0; i<unsafeWindow.play_data.length; i++) { uwpd.push(new Array()); } var missing = 0; for (var p=0; p<unsafeWindow.play_data[0].length; p++) { var id = unsafeWindow.play_data[0][p].id; for (var cf=0; cf<unsafeWindow.play_data.length; cf++) { var found = false; for (var i=0; i<unsafeWindow.play_data[cf].length; i++) { if (id == unsafeWindow.play_data[cf][i].id) { found = true; uwpd[cf].push(eval(uneval(unsafeWindow.play_data[cf][i]))); break; } } if (!found) { uwpd[cf].push(eval(uneval(uwpd[cf-1][p]))); missing++; } } } var time = new Date() - stime; console.log("uwpd copy ("+missing+" missing): "+time.toFixed(0)+"ms"); var stime = new Date(); for (var i=1; i<uwpd[0].length; i++) { var u = uwpd[0][i]; if (document.getElementById("breathcon_"+u.id) != null) { document.getElementById("breathcon_"+u.id).parentNode.removeChild(document.getElementById("breathcon_"+u.id)); document.getElementById("morcon_"+u.id).parentNode.removeChild(document.getElementById("morcon_"+u.id)); } if ((u.br > 0) || (u.mo > 0)) { var li = document.getElementById("player_link_"+u.id); if (li != null) { var brdiv = document.createElement("div"); brdiv.setAttribute("id","breathcon_"+u.id); brdiv.setAttribute("style","margin: 0px; padding: 0px; position: relative; top: -5px; left: 20px; width: 100px; height: 3px; text-align: left; visibility: visible; background-color: rgb(0, 0, 0);"); var brimg = document.createElement("img"); brimg.setAttribute("id","breath_"+u.id); brimg.setAttribute("src","/images/spacer.gif"); brimg.setAttribute("style","position: relative; top: -9px; width: 100px; height: 3px;"); brdiv.appendChild(brimg); li.parentNode.appendChild(brdiv); var modiv = document.createElement("div"); modiv.setAttribute("id","morcon_"+u.id); modiv.setAttribute("style","margin: 0px; padding: 0px; position: relative; top: -8px; left: 125px; width: 100px; height: 3px; text-align: left; visibility: visible; background-color: rgb(0, 0, 0);"); var moimg = document.createElement("img"); moimg.setAttribute("id","morale_"+u.id); moimg.setAttribute("src","/images/spacer.gif"); moimg.setAttribute("style","position: relative; top: -9px; width: 100px; height: 3px;"); modiv.appendChild(moimg); li.parentNode.appendChild(modiv); } var div = document.getElementById("breathcon_"+u.id); div.addEventListener("mouseover",function (e) { unsafeWindow.set_tip("Energy: "+parseInt(this.firstChild.style.width), 0, 1, 1, 1); },false); div.addEventListener("mouseout",function (e) { unsafeWindow.unset_tip(); },false); var div = document.getElementById("morcon_"+u.id); div.addEventListener("mouseover",function (e) { unsafeWindow.set_tip("Morale: "+parseInt(this.firstChild.style.width), 0, 1, 1, 1); },false); div.addEventListener("mouseout",function (e) { unsafeWindow.unset_tip(); },false); } } var time = new Date() - stime; console.log("breath/morale : "+time.toFixed(0)+"ms"); var stime = new Date(); if (uwpd[0] != null) { for (var f=0; f<uwpd.length; f++) { uwpd[f][0].x = parseInt(uwpd[f][0].x*3 + 20 - 3); uwpd[f][0].y = parseInt(uwpd[f][0].y*3 + 40 - 6); if (uwpd[f][0].z != null) { uwpd[f][0].z = Math.min(100+(uwpd[f][0].z-4)*3, 200)/100; } else { uwpd[f][0].z = 1; } if (uwpd[f][0].tx != null) { uwpd[f][0].tx = parseInt(uwpd[f][0].tx*3 + 20 - 3); uwpd[f][0].ty = parseInt(uwpd[f][0].ty*3 + 40 - 6); } for (var g=1; g<uwpd[f].length; g++) { uwpd[f][g].x = parseInt(uwpd[f][g].x*3 + 20 - 6); uwpd[f][g].y = parseInt(uwpd[f][g].y*3 + 40 - 6); } } } else { return new Array(); } var time = new Date() - stime; console.log("multiply : "+time.toFixed(0)+"ms"); var stime = new Date(); var pd = new Array(); for (var cf=0; cf<uwpd.length-1; cf++) { var arr = new Array(); var arr2 = null; for (var i = 0; i < uwpd[cf].length; i++) { var data = uwpd[cf][i]; arr.push(data); //console.log(data.id+" -- "+data.x+" -- "+data.y+" -- "+data.p+" -- "+data.tx+","+data.ty); if (unsafeWindow.frameSpeed == 50) { if (arr2 == null) { arr2 = new Array(); } var data2 = uwpd[cf+1][i]; var d = new Object(); d.id = data.id; d.x = (data.x + data2.x) / 2; d.y = (data.y + data2.y) / 2; d.z = (data.z + data2.z) / 2; if (data2.p != null) d.p = data2.p; if (data.tx != null) { d.tx = data.tx; d.ty = data.ty; } if ((data.tx != null) && (data2.tx != null)) { d.tx = (data.tx + data2.tx) / 2; d.ty = (data.ty + data2.ty) / 2; } arr2.push(d); } } pd.push(arr); if (arr2 != null) { pd.push(arr2); } } pd.push(uwpd[uwpd.length-1]); var time = new Date() - stime; console.log("10-20 : "+time.toFixed(0)+"ms"); var stime = new Date(); vision_data = new Array(); if (pd[0] != null) { for (var f=0; f<pd.length; f++) { var div = document.createElement("div"); div.setAttribute("id","vision"); div.style.position = "absolute"; var ball = pd[f][0]; if (ball.tx != null) { //console.log("("+ball.x+","+ball.y+") -1-to ("+ball.tx+","+ball.ty+")"); var x1 = Math.round(ball.x); var y1 = Math.round(ball.y); var x2 = Math.round(ball.tx); var y2 = Math.round(ball.ty); if (ball.x > ball.tx) { var temp = x1; x1 = x2; x2 = temp; temp = y1; y1 = y2; y2 = temp; } // console.log("("+x1+","+y1+") -2-to ("+x2+","+y2+")"); div.style.left = (x1-1)+"px"; div.style.top = (y1-1)+"px"; div.style.width = Math.abs(x2-x1+2)+"px"; // console.log(y2+"-"+y1+"+2 = "+(y2-y1+2)); div.style.height = Math.abs(y2-y1+2)+"px"; div.style.zIndex = 750; // console.log("("+(ball.x-x1)+","+(ball.y-y1)+") -3-to ("+(ball.tx-x1)+","+(ball.ty-y1)+")"); drawLine(div, parseInt(ball.x-x1), parseInt(ball.y-y1), parseInt(ball.tx-x1), parseInt(ball.ty-y1)); vision_data[f] = div; } } } var time = new Date() - stime; console.log("vision : "+time.toFixed(0)+"ms"); var stime = new Date(); poss_data = new Array(); if (pd[0] != null) { for (var f=0; f<pd.length; f++) { var current = null; var ball = pd[f][0]; for (var p=1; p<pd[f].length; p++) { var player = pd[f][p]; if (ball.y != player.y) continue; var dx = Math.max(ball.x,player.x) - Math.min(ball.x,player.x); if ((dx != 0) && (dx != 3) && (dx != 9) || (ball.z != 1)) continue; current = player.id; break; } poss_data.push(current); } } var time = new Date() - stime; console.log("possession : "+time.toFixed(0)+"ms"); var stime = new Date(); cam_data = new Array(); if (pd != null) { for (var i=0; i<pd.length; i++) { cam_data.push(0); if (pd[i] == null) break; if (pd[i].length < 23) { cam_data[i] = cam_data[i-1]; } else { for (var p=0; p<pd[i].length; p++) { cam_data[i] += pd[i][p].y; } cam_data[i] = cam_data[i]/pd[i].length; var ballTop = pd[i][0].y; var top = cam_data[i] - 250; if (top+425 < ballTop) { top = ballTop - 425; } else if (top+75 > ballTop) { top = ballTop-75; } var val = 0 - top; val = Math.min(0, val); val = Math.max(val, -660); cam_data[i] = parseInt(val); } } } var time = new Date() - stime; console.log("cam : "+time.toFixed(0)+"ms"); var stime = new Date(); var j=0; rotation = null; for (var i=0; i<pd.length-1; i++) { //console.log(i+") "+pd[i][0].x+","+pd[i][0].y+","+pd[i][0].z); if (rotation == null) { if (pd[i][0].z > 1.07) { j=i; rotation = pd[i][0]; rotation.start = i; for (var j=i; j<poss_data.length; j++) { if (poss_data[j] != null) { rotation.stop = j; break; } } } } else { if (rotation.x < pd[i+1][0].x) { mul = 1; } else { mul = -1; } if (rotation.y < pd[i+1][0].y) { mul = mul * -1; } else { mul = mul * 1; } rotation.val = mul * Math.atan(Math.abs(rotation.x-pd[i+1][0].x)/Math.abs(rotation.y-pd[i+1][0].y)); rotation.val += 2*Math.PI; break; } } if (rotation == null) { rotation = 0; rotation.val = 0; rotation.start = pd.length; rotation.stop = pd.length; } var time = new Date() - stime; console.log("rotation ("+j+","+i+","+rotation.val+","+rotation.start+"/"+rotation.stop+"): "+time.toFixed(0)+"ms"); var stime = new Date(); playerExtrasIn = new Array(); playerExtrasOut = new Array(); for (var cf=0; cf<pd.length-1; cf++) { for (var i = 0; i < pd[cf].length; i++) { var data = pd[cf][i]; if (pd[cf][i].icon != null) { if (pd[cf][i].icon.indexOf("s_") == 0) { //console.log("removing this icon(!?!?): "+pd[cf][i].icon); pd[cf][i].icon = null; } } var deletion = ["looked_off","im_open","pump_faked"]; for (var dx=0; dx<deletion.length; dx++) { if (data.icon == deletion[dx]) { for (var j=cf+1; j<pd.length; j++) { if (pd[j][i].icon == deletion[dx]) { pd[j][i].icon = null; } } } } } } for (var cf=0; cf<pd.length-1; cf++) { var frame = cf; var exl = 8; if (unsafeWindow.frameSpeed == 50) { exl += exl; } var expire = frame+exl; for (var i = 0; i < pd[cf].length; i++) { var data = pd[cf][i]; if (data.icon != null) { if (playerExtrasIn[frame] == null) { playerExtrasIn[frame] = new Array(); } playerExtrasIn[frame].push([data.id,data.icon,data.x-12,data.y-16]); if ((data.icon.indexOf("sweat") != -1) || (data.icon.indexOf("sad") != -1)) { expire = frame + 1; } // console.log(cf+": i="+i+" : f="+frame+" --> exp="+expire+") "+data.icon); if (playerExtrasOut[expire] == null) { playerExtrasOut[expire] = new Array(); } playerExtrasOut[expire].push([data.id, data.icon]); } } } var time = new Date() - stime; console.log("extras : "+time.toFixed(0)+"ms"); var stime = new Date(); var t = 0; var brskip = 0; var moskip = 0; for (var i=1; i<pd[0].length; i++) { var breath = pd[0][i].br; var morale = pd[0][i].mo; for (var f=1; f<pd.length; f++) { if (pd[f][i] == null) break; t++; if (pd[f][i].br != null) { if (pd[f][i].br == breath) { pd[f][i].br = null; brskip++; } else { breath = pd[f][i].br; } } if (pd[f][i].mo != null) { if (pd[f][i].mo == morale) { pd[f][i].mo = null; moskip++; } else { morale = pd[f][i].mo; } } } } console.log("br="+brskip+"/"+t+" : "+(100*brskip/t).toFixed(0)+"%"); console.log("mo="+moskip+"/"+t+" : "+(100*moskip/t).toFixed(0)+"%"); var time = new Date() - stime; console.log("strip : "+time.toFixed(0)+"ms"); //console.log("fixFrames end"); return pd; } function drawLine(div, x0, y0, x1, y1) { //console.log(x0+","+y0+" --> "+x1+","+y1); var gstep = 0; var slope = Math.abs(y1 - y0) > Math.abs(x1 - x0); if (slope) { var temp = x0; x0 = y0; y0 = temp; temp = x1; x1 = y1; y1 = temp; } if (x0 > x1) { var temp = x0; x0 = x1; x1 = temp; temp = y0; y0 = y1; y1 = temp; } var deltax = x1 - x0; var deltay = Math.abs(y1 - y0); var error = deltax << 1; var ystep; var y = y0; if (y0 < y1) { ystep = 1; } else { ystep = -1; } for (var x=x0; x<x1; x++) { if (gstep % visionDivSkip == 0) { if (slope) { plot(div,y,x); } else { plot(div,x,y); } } gstep++; error = error - deltay; if (error < 0) { y = y + ystep; error = error + deltax; } } } function plot(div, x,y) { // console.log(x+","+y+" -- "+visionDivSize); var d = document.createElement("div"); d.style.backgroundColor = "white"; d.style.position = "absolute"; d.style.left = x+"px"; d.style.top = y+"px"; d.style.width = visionDivSize+"px"; d.style.height = visionDivSize+"px"; d.style.zIndex = "751"; div.appendChild(d); //console.log("("+d.style.left+","+d.style.top+")"); } function resetPlay() { //console.log("resetPlay"); clearPlayers(); playDone = false; playerDiv = new Array(); playerOvr = new Array(); play_data = fixFrames(); currentFrame = 0; drawFrame(); if (playPaused == false) { setTimeout(play, preDelay); } //console.log("resetPlay end"); } function drawFrame() { //console.log("drawFrame"); var rrframe = document.getElementById("rrframe"); rrframe.value = currentFrame; var evt = document.createEvent("HTMLEvents"); evt.initEvent("change",false,false); rrframe.dispatchEvent(evt); var frame = play_data[currentFrame]; if (frame == null) { return; } if (replayArea == null) { replayArea = document.getElementById("replay_area"); } for (var i = 1; i < frame.length; i++) { var data = frame[i]; drawPlayer(data.id, data.x, data.y, data.z, data.p, data.icon, data.br, data.mo); } drawPlayer('ball', frame[0].x, frame[0].y, frame[0]['z']); drawBall(); if (showVision == true) { var vis = document.getElementById("vision"); if (vis != null) { document.getElementById("replay_area").removeChild(vis); } if (frame[0].tx != null) { document.getElementById("replay_area").appendChild(vision_data[currentFrame]); } } if (playerExtrasOut[currentFrame] != null) { for (var i=0; i<playerExtrasOut[currentFrame].length; i++) { var d = playerExtrasOut[currentFrame][i]; //console.log("removing : "+d); var img = null; do { img = document.getElementById("player_extras_"+d[0]); if (img != null) { replayArea.removeChild(img); } } while (img != null); } } if (showIcons == true) { if (playerExtrasIn[currentFrame] != null) { for (var i=0; i<playerExtrasIn[currentFrame].length; i++) { var d = playerExtrasIn[currentFrame][i]; var img = document.createElement("img"); img.setAttribute("class","player_popup_icon"); img.id = "player_extras_"+d[0]; img.style.left = d[2]+"px"; img.style.top = d[3]+"px"; img.style.zIndex = playerLayerZ+1; img.src = "/images/replay_icons/"+d[1]+".gif"; //console.log("creating : "+d); replayArea.appendChild(img); } } } replayArea.style.top = cam_data[currentFrame]+"px"; } function createPlayerDot(id, x, y, z, p) { if (playerDiv[id] == null) { var oldDiv = document.getElementById(id); if (oldDiv != null) { oldDiv.parentNode.removeChild(oldDiv); } if (id != "ball") { var div = document.createElement('img'); div.className = 'player_icon'; div.id = id; if (document.getElementById("use_colors").checked == true) { if (p != null) { div.style.width = "13px"; div.style.height = "13px"; } div.src = '/images/' + unsafeWindow.players[id].position + '.png'; } else { var path = ""; if (hometeam == ptid[id]) { var color1 = unsafeWindow.home_color1; var color2 = unsafeWindow.home_color2; var border = unsafeWindow.home_border; path = color2; if (border != 0) { path += "_border"; } path += "_home"; } else { var color1 = unsafeWindow.away_color1; var color2 = unsafeWindow.away_color2; var border = unsafeWindow.away_border; path = color2; if (border != 0) { path += "_border"; } } if (p == null) { div.style.backgroundImage = "url(\"/images/dots/" + color1 + ".gif\")"; div.src = '/images/dots/' + path + '/' + unsafeWindow.players[id].position + '.gif'; } else { if (showShrinkAnimation == true) { div.src = '/images/dots/' + path + '/' + unsafeWindow.players[id].position + '.gif'; div.style.width = "13px"; div.style.height = "13px"; div.style.backgroundImage = "url(\"/images/dots/" + color1 + "_small.gif\")"; div.style.backgroundRepeat = "no-repeat"; } else { div.style.backgroundImage = "url(\"/images/dots/" + color1 + ".gif\")"; div.src = '/images/spacer.gif'; } } div.style.zIndex = playerLayerZ; } div.addEventListener("click",function (e) { unsafeWindow.viewPlayer(id); },false); div.addEventListener("mouseover",function (e) { unsafeWindow.set_tip(unsafeWindow.players[id].name.replace(/\\/g, '\\\\').replace(/'/g, "\\" + ''').replace(/"/g, '"'), 0, 1, 1, 1); },false); div.addEventListener("mouseout",function (e) { unsafeWindow.unset_tip(); },false); playerDiv[id] = div; replayArea.appendChild(playerDiv[id]); } else { var img = document.createElement('img'); img.id = 'ball'; img.className = 'player_icon'; img.src = ballImage; img.style.zIndex = playerLayerZ+1; playerDiv["ball"] = img; replayArea.appendChild(playerDiv["ball"]); } } } function drawPlayer(id, x, y, z, p, icon, br, mo) { //console.log("drawPlayer"); //if (p != null) console.log("mine: "+id+"("+x+","+y+","+z+","+p+")"); //console.log("mine: "+id+"("+x+","+y+","+z+")"); if (playerDiv[id] == null) { createPlayerDot(id, x, y, z, p); } else { pancakeCheck(id, x, y, z, p); } if (id == "ball") { if (currentFrame == rotation.start) { playerDiv["ball"].src = "/images/"+ballMotionImg; playerDiv["ball"].setAttribute("style","-moz-transform: rotate("+rotation.val+"rad); "+playerDiv["ball"].getAttribute("style")); } else if ((currentFrame >= rotation.stop) || (currentFrame == 0)) { playerDiv["ball"].src = ballImage; playerDiv["ball"].setAttribute("style",playerDiv["ball"].getAttribute("style").split(";",2)[1]); playerDiv["ball"].style.width = 10 + 'px'; playerDiv["ball"].style.height = 17 + 'px'; playerDiv["ball"].style.zIndex = playerLayerZ + 1; } if (isNaN(z) == false) { playerDiv["ball"].style.width = parseInt(10 * z) + 'px'; playerDiv["ball"].style.height = parseInt(17 * z) + 'px'; } playerDiv["ball"].style.left = x+'px'; playerDiv["ball"].style.top = y+'px'; } else { playerDiv[id].style.left = x + 'px'; playerDiv[id].style.top = y + 'px'; if (br) { document.getElementById("breath_"+id).style.width = br+"px"; document.getElementById("breath_"+id).style.background = gradient[br]; } if (mo) { document.getElementById("morale_"+id).style.width = mo+"px"; document.getElementById("morale_"+id).style.background = gradient[mo]; } } } function playerShrink(id, x, y, z, p) { if (p == null) { if (playerDiv[id].style.width == "13px") { var bgc = playerDiv[id].style.backgroundColor; playerDiv[id].parentNode.removeChild(playerDiv[id]); playerDiv[id] = null; createPlayerDot(id, x, y, z, p); playerDiv[id].style.backgroundColor = bgc; } } else { if (playerDiv[id].style.width != "13px") { var bgc = playerDiv[id].style.backgroundColor; playerDiv[id].parentNode.removeChild(playerDiv[id]); playerDiv[id] = null; createPlayerDot(id, x, y, z, p); playerDiv[id].style.backgroundColor = bgc; } } } function playerTrim(id, x, y, z, p) { if (p == null) { if (playerDiv[id].src.toString().indexOf("spacer") != -1) { var bgc = playerDiv[id].style.backgroundColor; playerDiv[id].parentNode.removeChild(playerDiv[id]); playerDiv[id] = null; createPlayerDot(id, x, y, z, p); playerDiv[id].style.backgroundColor = bgc; } } else { if (playerDiv[id].src.toString().indexOf("spacer") == -1) { var bgc = playerDiv[id].style.backgroundColor; playerDiv[id].parentNode.removeChild(playerDiv[id]); playerDiv[id] = null; createPlayerDot(id, x, y, z, p); playerDiv[id].style.backgroundColor = bgc; } } } function ff() { //console.log("ff"); if (playPaused == true) { var pdl = play_data.length; currentFrame = (pdl+currentFrame+1)%pdl; drawFrame(); } else { frameRate += 3; frameSpeed = frameSpeed/2; } //console.log("ff: "+frameSpeed); } function rew() { //console.log("rew"); if (playPaused == true) { var pdl = play_data.length; currentFrame = (pdl+currentFrame-1)%pdl; drawFrame(); } else { frameRate -= 3; frameSpeed = frameSpeed*2; } //console.log("rew: "+frameSpeed); } function reset() { //console.log("reset"); playPaused = true; currentFrame = 0; drawFrame(); } function beginPlay() { //console.log("beginPlay is not done"); if (postPlayTimer != null) { clearTimeout(postPlayTimer); postPlayTimer = null; } if (playPaused == true) { return; } resetBall(); play(); } function playIsFinished() { //console.log("pIF"); if (playFinishedTimer != null) { clearTimeout(playFinishedTimer); playFinishedTimer = null; } if (postPlayTimer != null) { clearTimeout(postPlayTimer); postPlayTimer = null; } if (playPaused == true) { return; } playDone = false; if (document.getElementById("use_continuous").checked == false) { currentFrame = 0; while (document.getElementById("replay_area").getElementsByClassName("player_popup_icon").length > 0) { var e = document.getElementById("replay_area").getElementsByClassName("player_popup_icon")[0]; e.parentNode.removeChild(e); } beginPlay(); } else { var button = document.getElementsByClassName("nplaybtn")[0]; if (document.getElementById("rrplay").getAttribute("index") == button.id) { currentFrame = 0; beginPlay(); } else { var evt = []; evt.target = button.firstChild; input(evt); } } } function input(evt) { if (postPlayTimer != null) { clearTimeout(postPlayTimer); postPlayTimer = null; } if (playFinishedTimer != null) { clearTimeout(playFinishedTimer); playFinishedTimer = null; } if (prePlayTimer != null) { clearTimeout(prePlayTimer); prePlayTimer = null; } if (playPaused != true) { pauseReplay(); } var id = evt.target.parentNode.getAttribute("id")+""; lastPlay = currentPlay; currentPlay = parseFloat(id); document.getElementById("rrplay").setAttribute("index",currentPlay); //console.log("lastPlay="+lastPlay+" -- currentPlay="+currentPlay); if (currentPlay == plays.length) { console.log("do something about last play of the game"); return; } var address = plays[currentPlay].replay+""; if (address == "[object XPCNativeWrapper [object Text]]") { buttonSetup(currentPlay); handleFieldGoal(currentPlay); } else { //console.log("next address = "+address); evt.target.innerHTML = "Loading ."; httpRequest = getInetPage(address, change, evt.target); } } function change(address, page) { clearTimeout(frameTimer); frameTimer = null; clearTimeout(postPlayTimer); postPlayTimer = null; clearTimeout(prePlayTimer); prePlayTimer = null; changeInfo(page); changePlays(page); buttonSetup(currentPlay); addPlayInfo(page); resetPlay(); var rrplay = document.getElementById("rrplay"); rrplay.value = address; var evt = document.createEvent("HTMLEvents"); evt.initEvent("change", true, true); rrplay.dispatchEvent(evt); var a = document.createElement("a"); a.style.color = "white"; a.innerHTML = "Share this play"; a.href = address; var cont = document.getElementById("share_play"); cont.removeChild(cont.firstChild); for (var i=0; i<cont.firstChild.childNodes.length; i++) { var el = cont.firstChild.childNodes[i]; if (el.href != null) { var href = el.href.split("http://")[1]; el.href = href+address; } } cont.insertBefore(a,cont.firstChild); } function changeInfo(page) { // console.log("changeInfo : "+page.responseText); var div = document.createElement("div"); div.innerHTML = page.responseText.slice(page.responseText.indexOf('<div id="body_container')); var desc = document.getElementById("play_outcome"); if (alwaysShowPlayText == false) { desc.style.visibility = "hidden"; } var new_p = div.getElementsByClassName("play")[0]; var p = document.getElementsByClassName("play")[0]; p.innerHTML = new_p.innerHTML; var timeytg = document.getElementById("time_ytg"); var new_timeytg = div.getElementsByTagName("h1")[0]; timeytg.innerHTML = new_timeytg.childNodes[1].innerHTML; timeytg.previousSibling.textContent = "Q"+plays[currentPlay].quarter+" "; var classes = ["ppossbtn","pplaybtn","nplaybtn","npossbtn"]; var display = ["<< Prev Poss","< Prev","Next >","Next Poss >>"]; for (var i=0; i<classes.length; i++) { var btn = document.getElementsByClassName(classes[i])[0]; btn.innerHTML = "<span>"+display[i]+"</span>"; } var offContainer = document.getElementById("offense_container"); var defContainer = document.getElementById("defense_container"); offContainer.style.visibility = "hidden"; offContainer.style.display = "none"; defContainer.style.visibility = "hidden"; defContainer.style.display = "none"; var containers = document.getElementsByClassName("primary_container"); var new_containers = div.getElementsByClassName("primary_container"); for (var i=0; i<new_containers.length; i++) { containers[i].innerHTML = new_containers[i].innerHTML; containers[i].setAttribute("style",new_containers[i].getAttribute("style")); } var containers = document.getElementsByClassName("secondary_container"); var new_containers = div.getElementsByClassName("secondary_container"); for (var i=0; i<new_containers.length; i++) { containers[i].innerHTML = new_containers[i].innerHTML; containers[i].setAttribute("style",new_containers[i].getAttribute("style")); } var players = document.getElementsByClassName("players"); var new_players = div.getElementsByClassName("players"); for (var i=0; i<new_players.length; i++) { players[i].innerHTML = new_players[i].innerHTML; } addPlayerLinks(); var oscore = document.getElementById("off_score"); var dscore = document.getElementById("def_score"); thisScore = page.responseText.split("var this_score = ")[1]; if (thisScore != null) { thisScore = thisScore.split(";")[0] } else { thisScore = 0; } if (page.responseText.indexOf("score_update = 'D';") != -1) { scoreUpdate = "D"; } else { scoreUpdate = "O"; } if (parseInt(thisScore) != 0) { if (scoreUpdate == "O") { oscore.innerHTML = parseInt(oscore.innerHTML) - parseInt(thisScore); } else { dscore.innerHTML = parseInt(dscore.innerHTML) - parseInt(thisScore); } } oscore.style.display = "block"; oscore.style.visibility = "visible"; dscore.style.display = "block"; dscore.style.visibility = "visible"; offContainer.style.visibility = "visible"; offContainer.style.display = "block"; defContainer.style.visibility = "visible"; defContainer.style.display = "block"; var dai = document.getElementById("dai"); if (dai != null) dai.innerHTML = ""; } function changePlays(page) { var idx = page.responseText.indexOf("var players ="); if (idx != -1) { if (playPaused == false) { pauseReplay(); //pause everything } var p = page.responseText.slice(idx+"var players =".length); p = p.slice(0,p.indexOf("var play_data")); var pd = page.responseText.slice(page.responseText.indexOf("var play_data =")+"var play_data =".length); pd = pd.slice(0,pd.indexOf(";")); var pt = page.responseText.slice(page.responseText.indexOf("var ptid =")+"var ptid =".length); pt = pt.slice(0,pt.indexOf(";")); var newplayers = null; var newplay_data = null; eval("newplayers = "+p); newplay_data = eval(pd); eval("ptid = "+pt); if (newplay_data.length == 0) { newplay_data = [unsafeWindow.play_data[0]]; newplayers = unsafeWindow.players; } if (newplayers != null) unsafeWindow.players = newplayers; if (newplay_data != null) unsafeWindow.play_data = newplay_data.slice(); if (offenseOnBottom == true) { if (goingUp(unsafeWindow.play_data) == false) { for (var f=0; f<unsafeWindow.play_data.length; f++) { for (var p = 0; p < unsafeWindow.play_data[f].length; p++) { unsafeWindow.play_data[f][p].x = 160 - unsafeWindow.play_data[f][p].x; unsafeWindow.play_data[f][p].y = 360 - unsafeWindow.play_data[f][p].y; if (unsafeWindow.play_data[f][p].tx != null) { unsafeWindow.play_data[f][p].tx = 160 - unsafeWindow.play_data[f][p].tx; unsafeWindow.play_data[f][p].ty = 360 - unsafeWindow.play_data[f][p].ty; } } } } } currentFrame = 0; unsafeWindow.currentFrame = 0; if (alwaysPause == true) { playPaused = false; pauseReplay(); } else { playPaused = false; } } else { //console.log("am I in here?"); unsafeWindow.play_data = [unsafeWindow.play_data[0]] pauseReplay(); } } function handleFieldGoal(play) { var p = plays[play]; var desc = document.getElementById("play_outcome"); desc = desc.getElementsByClassName("play")[0]; desc.innerHTML = p.play; if (p.score != 0) { var containers = document.getElementsByClassName("secondary_container"); for (var i=0; i<containers.length; i++) { if (containers[i].firstChild.innerHTML == p.team) { var sdiv = null; if (i == 0) { sdiv = document.getElementById("off_score"); } else { sdiv = document.getElementById("def_score"); } sdiv.style.outlineStyle = "solid"; sdiv.style.outlineColor = "white"; sdiv.style.color = "gold"; sdiv.innerHTML = parseInt(sdiv.innerHTML) + 3; break; } } } var timeytg = document.getElementById("time_ytg"); timeytg.innerHTML = p.timeRemaining+" "+p.down+" & "+p.togo+" on "+p.marker; timeytg.previousSibling.textContent = "Q"+p.quarter+" "; unsafeWindow.play_data = [unsafeWindow.play_data[0]]; play_data = unsafeWindow.play_data.slice(); playDone = true; if (unsafeWindow.play_data[0] != null) { playFinishedTimer = null; pauseReplay(); playPaused = false; resetPlay(); } else { alert("handleFieldGoal: uW.p_d is null"); } } function resetBall() { var el = document.getElementById("pbrball"); if (el != null) { var src = el.parentNode.previousSibling.previousSibling; if (src == null) { src = el.parentNode.nextSibling.nextSibling; } var img = src.childNodes[1].firstChild; el.firstChild.style.backgroundImage = img.style.backgroundImage.toString(); el.removeAttribute("id"); } else { //console.log("el is null"); } } function drawBall() { if (poss_data[currentFrame] == null) { } else { if (currentFrame > 0) { if (poss_data[currentFrame-1] == poss_data[currentFrame]) { return; } } resetBall(); playerId = poss_data[currentFrame]; var l = document.getElementById("pos_dot_"+playerId); if (l != null) { l.parentNode.id = "pbrball"; l.style.backgroundRepeat = "no-repeat"; l.style.backgroundImage = "url(\"/images/ball.gif\")"; } } } function findPoss(idx, direction) { var play = plays[idx]; var currTeam = play.team; if (direction > 0) { for (var i=idx+1; i<plays.length; i++) { if (plays[i].team != currTeam) { return i; } } return idx; } else if (direction < 0) { var i = idx; //console.log("curr="+plays[i]); for (i=i; i>0; i--) { if (plays[i].team != currTeam) { //console.log("prev1="+plays[i]); break; } } for (i=i-1; i>0; i--) { if (plays[i].team == currTeam) { //console.log("prev2="+plays[i+1]); return i+1; } } return 0; } return 0; } if (unsafeWindow.updateOrientation != null) { unsafeWindow.updateOrientation = myUpdateOrientation; } function myUpdateOrientation() { if (document.getElementById("orientation").value == "horizontal") { var cnt = document.getElementsByClassName("play_container"); //do something var field = document.getElementById("replay_container"); field.setAttribute("style","-moz-transform: rotate(90deg);"); console.log("Horizontal fields look horrible. Deal with it."); } else if (document.getElementById("orientation").value == "vertical") { var field = document.getElementById("replay_container"); field.setAttribute("style","-moz-transform: rotate(0deg);"); } else { // alert("What a stupid fucking idea. WTF is wrong with you? Watch this instead. At least it's more interesting."); console.log("refusing to do such a stupid thing."); } }