Array.prototype.tsort = function(alpha,ref,type) { if(alpha) this.sort(function(a,b) { return ((totals[ref][a][type] > totals[ref][b][type]) - (totals[ref][a][type] < totals[ref][b][type])); }); else this.sort(function(a,b) { return (totals[ref][a][type] - totals[ref][b][type]); }); } var versionn = "1.1.3"; var latestVersionn = 0; var features=[]; var proto; var tourReq = []; var totals; var partial; var label; var pfilt = []; var viewer = null; var sorters = {'_players' : new Array(new Sorter(1,null), new Sorter(0,"_total"), new Sorter(0,"_won"), new Sorter(0,"_lost"), new Sorter(0,"_active"), new Sorter(0,"_elim"), new Sorter(1,"_kills")) , '_games' : new Array(new Sorter(0,null), new Sorter(1,"_name"), new Sorter(0, "_round") , new Sorter(1,"_winners"),new Sorter(1,"_elims"))}; var teamsize = {'D' : 2, 'T' : 3, 'Q' : 4}; function Totals() { this._pages = 0; this._counter = 0; this._players = new Object(); this._order = new Array(); this._labels = new Array(); this._games = new Object(); this._gorder = new Array(); this.addGame = function(game,map) { this._games[game] = new Game(map); this._gorder.push(game); } this.addPlayer = function(game,name) { this._players[name] = new Player(); this._order.push(name); } this.addRound = function(game,round) { this._games[game]._round = round; } this.addVictor = function(game,name) { this._games[game]._victor = name; } this.addWinner = function(game,name) { this._players[name]._won++; this._games[game]._winners.push(name); } this.addLoser = function(game,name) { this._players[name]._lost++; this._games[game]._losers.push(name); } this.addActive = function(game,name) { this._players[name]._active++; } this.addTotal = function(game,name) { this._players[name]._total++; } this.addElim = function(game,name) { this._players[name]._lost--; this._players[name]._elim++; } this.addDefeat = function(game,name) { this._games[game]._elims.push(name); } this.setTeam = function(game,team) { this._games[game]._tnums.push(team); } this.addKill = function(kills,name) { this._players[name]._kills+= kills; } } function Sorter(alpha,fn) { this._alpha = alpha; this._dir = 0; this._fn = fn; } function Player() { this._total = 0; this._won = 0; this._lost = 0; this._active = 0; this._elim = 0; this._kills = 0; } function Game(name) { this._name = name; this._round = 0; this._winners = new Array(); this._losers = new Array(); this._elims = new Array(); this._tnums = new Array(); this._victor = ""; } function addState(state, param1,param2,lab,rgx) { label[''][state](param1,param2); if(lab) { label[lab][state](param1,param2); if(rgx && lab.match(rgx)) partial[state](param1,param2); } } function cleanup() { totals = null; tourReq = null; if(viewer != null)viewer.close(); } function removeBox() { viewer.close(); viewer = null; tourReq = []; } function switchTabs(id) { if(id==1) { viewer.document.getElementById('tableContainer').style.visibility = "visible"; viewer.document.getElementById('results').style.visibility = "hidden"; viewer.document.getElementById('labels').style.visibility = "hidden"; viewer.document.getElementById('tab1').style.backgroundColor = "#0f0"; viewer.document.getElementById('tab2').style.backgroundColor = "#cdc"; viewer.document.getElementById('tab3').style.backgroundColor = "#cdc"; } else if(id==2) { viewer.document.getElementById('tableContainer').style.visibility = "hidden"; viewer.document.getElementById('results').style.visibility = "visible"; viewer.document.getElementById('labels').style.visibility = "hidden"; viewer.document.getElementById('tab1').style.backgroundColor = "#cdc"; viewer.document.getElementById('tab2').style.backgroundColor = "#0f0"; viewer.document.getElementById('tab3').style.backgroundColor = "#cdc"; } else if(id==3) { viewer.document.getElementById('tableContainer').style.visibility = "hidden"; viewer.document.getElementById('results').style.visibility = "hidden"; viewer.document.getElementById('labels').style.visibility = "visible"; viewer.document.getElementById('tab1').style.backgroundColor = "#cdc"; viewer.document.getElementById('tab2').style.backgroundColor = "#cdc"; viewer.document.getElementById('tab3').style.backgroundColor = "#0f0"; } } function createBox(txt) { cleanup(); viewer = window.open('','box','width=1040,height=720,scrollbars=yes,resizable=yes,status=no,toolbar=no,location=no,directories=no,menubar=no,copyhistory=no'); viewer.addEventListener('unload', function() { viewer=null; cleanup(); }, false); var style = viewer.document.getElementsByTagName('head')[0].appendChild(viewer.document.createElement("style")); style.type = 'text/css'; style.innerHTML = "#rankDiv {background-color:transparent;position:absolute;width:100%;height:100%;top:0px;left:0px;z-index:10000;} "; style.innerHTML += "#rankBox {position:relative;min-width:1040px;height:100%;margin-top:10px;margin-left:20px;border:2px solid #000;background-color:#F2F5F6;} "; style.innerHTML += "#rankDiv > #rankBox {position:fixed;overflow:auto;} "; style.innerHTML += "#rankBox h1 {margin:0;font:bold 0.9em verdana,arial;background-color:#cdc;color:#000;border-bottom:1px solid #000;padding:2px 0 2px 5px;} "; style.innerHTML += "#rankBox p {font:0.7em verdana,arial;padding-left:50px;width:900px;} .result {font-weight:bold;color:#00f;} .totals {color:#000;} "; style.innerHTML += "#rankBox a {text-decoration:none;} .central {text-align:center} #rankBox #tab1, #rankBox #tab2, #rankBox #tab3, #rankBox #tab4 {border:1px solid black}"; style.innerHTML += "#rankBox #tab1:hover, #rankBox #tab2:hover, #rankBox #tab3:hover, #rankBox #tab4:hover , #rankBox #closeRank:hover {color:#fff} .header {background-color:#cdc;font-weight:bold;} "; style.innerHTML += "#rankBox #closeRank {display:block;position:relative;margin:5px auto;padding:3px;border:2px solid #000;width:70px;font:0.7em verdana,arial;text-transform:uppercase;text-align:center;color:#000;background-color:#cdc;text-decoration:none;} "; style.innerHTML += "#rankBox img {position:relative;top:20px;left:20px;} .rankoptions {width:100px;} .bmedal {font-weight:bold;color:#8C7853} .smedal {font-weight:bold;color:silver} .gmedal {font-weight:bold;color:gold} "; style.innerHTML += ".display_div {width: 48px;padding: 0 2px 0 0;height: 20px;text-align: left;border: 1px solid;} "; style.innerHTML += ".display {background-color: #fff;color: blue;width: 48px;text-align: left;font-size: 8pt;font-family: verdana, arial, helvetica, sans-serif;font-weight: bold;cursor: text;}"; style.innerHTML += "#tabs {text-align:center} #tabs table{align:center;margin-left:30px;} #tabs a {width:100px;font-weight:bold;font: verdana,arial;text-transform:none;color:gray;padding:0 5px} #tabs a:hover {background-color:#cdc}"; style.innerHTML += "#scroller {width: 1000px;} #scroller, #scroller.td, #scroller.a, #summ td, #meds td {color: #000;font: bold 7pt Verdana, Geneva, Arial, Helvetica, sans-serif}"; style.innerHTML += "#resultant, #labelling {width: 1000px;} #resultant, #resultant.td, #resultant.a, #labelling, #labelling.td, #labelling.a {color: #000;font: bold 7pt Verdana, Geneva, Arial, Helvetica, sans-serif}"; style.innerHTML += "div.tableContainer {border: 1px solid #963;height: 535px;overflow:auto;overflow-x: hidden;width: 1000px;margin:10px} span {cursor:pointer;text-decoration:underline}"; style.innerHTML += "#results, #labels {visibility:hidden;border: 1px solid #963;overflow:auto;overflow-x: hidden;width:1000px;height:535px;position:absolute;z-index:200;top:120px;margin:10px;}"; style.innerHTML += "thead.fixedHeader tr, thead.scrollHeader tr, thead.totalsHeader tr {display: block} thead.fixedHeader td, tbody.scrollContent td.banner {background: #cdc;border-bottom: 1px solid #EB8;padding: 4px 3px;text-align: center;width: 1000px}"; style.innerHTML += "thead.scrollHeader td {background: #fff;border-right: 1px solid #B74;border-bottom: 1px solid #EB8;padding: 4px 3px;text-align: center;width: 136px;} "; style.innerHTML += "thead.totalsHeader td {background: #fff;border-right: 1px solid #B74;border-bottom: 1px solid #EB8;padding: 4px 3px;text-align: center;width: 136px;} span.winner {cursor:auto;text-decoration:none;color:red}"; style.innerHTML += "thead.scrollHeader a, thead.scrollHeader a:link, thead.scrollHeader a:visited,thead.totalsHeader a, thead.totalsHeader a:link, thead.totalsHeader a:visited, tbody.scrollContent a, tbody.scrollContent a:link, tbody.scrollContent a:visited {display: block;width: 136px;}"; style.innerHTML += "tbody.scrollContent {width: 100%;} tbody.scrollContent td#tourtitle,tbody.scrollContent td#rtourtitle, tbody.scrollContent td#pl, tbody.scrollContent td#rpl {font-size:12pt;color:blue;} tbody.scrollContent td#tourlabel {font-size:10pt;color:red}"; style.innerHTML += "tbody.scrollContent td {border-right: 1px solid #b74;border-bottom: 1px solid #DDD;padding: 4px 3px;text-align:center;height:20px;} tbody.scrollContent td {width: 136px;vertical-align: middle;} "; style.innerHTML += "tbody.scrollContent tr.mreven {background-color:#ddd} tbody.scrollContent tr.mrodd {background-color:#eee} tbody.scrollContent td.sorton {background-color:cyan;cursor:pointer;} tbody.scrollContent td.tiny {width:10%;} "; mObj = viewer.document.getElementsByTagName("body")[0].appendChild(viewer.document.createElement("div")); mObj.id = "rankDiv"; mObj.style.visibility = 'hidden'; mObj.style.height = viewer.document.documentElement.scrollHeight + "px"; alertObj = mObj.appendChild(viewer.document.createElement("div")); alertObj.id = "rankBox"; alertObj.style.left = (viewer.document.documentElement.scrollWidth - alertObj.offsetWidth)/2 - "px"; h1 = alertObj.appendChild(viewer.document.createElement("h1")); h1.appendChild(viewer.document.createTextNode("TOUR STATS")); msg = alertObj.appendChild(viewer.document.createElement("p")); msg.id = "progress"; msg.innerHTML = txt; btn = alertObj.appendChild(viewer.document.createElement("a")); btn.id = "closeRank"; btn.appendChild(viewer.document.createTextNode("CLOSE")); btn.href = "javascript:void(0);"; btn.style.opacity = "0.5"; btn.addEventListener('click', function() { if(btn.style.backgroundColor == "green") removeBox(); }, true); tabs = viewer.document.getElementById('rankBox').appendChild(viewer.document.createElement("div")); tabs.id = "tabs"; tabs.innerHTML = "
SummaryResultsLabels
"; viewer.document.getElementById('tab1').addEventListener('click', function() { switchTabs(1); },true); viewer.document.getElementById('tab2').addEventListener('click', function() { switchTabs(2); },true); viewer.document.getElementById('tab3').addEventListener('click', function() { switchTabs(3); },true); tableWrap = viewer.document.getElementById('rankBox').appendChild(viewer.document.createElement("div")); tableWrap.id = "tableContainer"; tableWrap.className = "tableContainer"; table = viewer.document.createElement("table"); table.border=1; table.id = "scroller"; table.width = "100%"; table.cellSpacing = "0"; table.cellPadding = "0"; table.className = "scrollTable"; tbody = table.appendChild(viewer.document.createElement("tbody")); tbody.className = "scrollContent"; tbody.id = "ranktable"; viewer.document.getElementById('tableContainer').appendChild(table); results = viewer.document.getElementById('rankBox').appendChild(viewer.document.createElement("div")); results.id = "results"; results.className = "tableContainer"; rtable = viewer.document.createElement("table"); rtable.border=1; rtable.id = "resultant"; rtable.width = "100%"; rtable.cellSpacing = "0"; rtable.cellPadding = "0"; rtable.className = "scrollTable"; rtbody = rtable.appendChild(viewer.document.createElement("tbody")); rtbody.className = "scrollContent"; rtbody.id = "restable"; viewer.document.getElementById('results').appendChild(rtable); lbs = viewer.document.getElementById('rankBox').appendChild(viewer.document.createElement("div")); lbs.id = "labels"; lbs.className = "tableContainer"; ltable = viewer.document.createElement("table"); ltable.border=1; ltable.id = "labelling"; ltable.width = "100%"; ltable.cellSpacing = "0"; ltable.cellPadding = "0"; ltable.className = "scrollTable"; ltbody = ltable.appendChild(viewer.document.createElement("tbody")); ltbody.className = "scrollContent"; ltbody.id = "labtable"; viewer.document.getElementById('labels').appendChild(ltable); mObj.style.visibility = 'visible'; switchTabs(1); } function showMenu() { var gmMenu = document.createElement('div'); gmMenu.id="trn"; var html = "

Tour Stats " + versionn + "

"; gmMenu.innerHTML = html; ul[0].parentNode.appendChild(gmMenu); ul = document.createElement('ul'); ul.style.borderWidth = "1px 1px 0px 1px"; ul.style.width = "151px"; if(latestVersionn) { ul.innerHTML = "
  • New Update Available
  • "; gmMenu.appendChild(ul); } else{ ul.innerHTML = "
  • Latest Version Installed
  • "; gmMenu.appendChild(ul); } var ftext = features.join("\n"); document.getElementById('alatest').addEventListener("click" , function () { alert('New version features\n' + ftext); },true); } var leftBar = document.getElementById("leftColumn"); if(leftBar) { var ul = leftBar.getElementsByTagName("ul"); if (ul[0]) { proto = window.location.protocol; GM_xmlhttpRequest({ method: 'GET', url: 'http://www.fileden.com/files/2008/5/8/1902058/tour.txt?nocache=' + Math.random(), headers: { 'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey', 'Accept': 'text/html', }, onload: function(responseDetails) { features = responseDetails.responseText.split('\n'); var latest = features[0].split('.'); var ver = versionn.split('.'); latestVersionn = (((parseInt(latest[0]) * 100) + (parseInt(latest[1]) * 10) + parseInt(latest[2])) > ((parseInt(ver[0]) * 100) + (parseInt(ver[1]) * 10) + parseInt(ver[2]))); showMenu(); } }); } } function sortByCol(arr,col,ref) { if(sorters[ref][col]._fn != null) arr.tsort(sorters[ref][col]._alpha,ref,sorters[ref][col]._fn); else if(sorters[ref][col]._alpha) arr.sort(); else arr.sort(function(a,b) {return(parseInt(a) - parseInt(b));}); if(sorters[ref][col]._dir) arr.reverse(); sorters[ref][col]._dir = sorters[ref][col]._dir ? 0 : 1; } function setTable(tname,rnd) { var pf = pfilt.join(''); if(rnd && !rnd.match(/ - /)) rnd = " - " + rnd; var w = "Labels: "; var x = "" + tname + "" + rnd + " : " + totals._order.length + " Players."; var y = "" + tname + "" + rnd + " : " + totals._order.length + " Players."; if(pf != "") { var pfs = pfilt.join(' ');; x+= "Summary For " + pfs + ""; y+= "Summary For " + pfs + ""; } var xarr = new Array(); for(var z=0; z" + label['']._labels[z] + " "); } w += xarr + ""; x += "PlayerGamesWinsLossesActiveEliminatedKills"; y += "Game NumberMapRoundWinnersLosers"; if(pf != "") { var summary = new Player(); for(var pp=0; pp<4; pp++) { if(pfilt[pp] != "" && totals._players[pfilt[pp]]) { summary._total += totals._players[pfilt[pp]]._total; summary._won += totals._players[pfilt[pp]]._won; summary._lost += totals._players[pfilt[pp]]._lost; summary._active += totals._players[pfilt[pp]]._active; summary._elim += totals._players[pfilt[pp]]._elim; summary._kills += totals._players[pfilt[pp]]._kills; } } x += "" + pfs + "" + summary._total + "" + summary._won + "" + summary._lost + "" + summary._active + "" + summary._elim + "" + summary._kills + ""; } else{ for(var i=0; i< totals._order.length;i++) { if(i & 1) trc = ""; else trc = ""; x += trc + totals._order[i] + "" + totals._players[totals._order[i]]._total + "" + totals._players[totals._order[i]]._won + "" + totals._players[totals._order[i]]._lost + "" + totals._players[totals._order[i]]._active + "" + totals._players[totals._order[i]]._elim + "" + totals._players[totals._order[i]]._kills + ""; } } var h = 0; for(var g=0; g< totals._gorder.length; g++) { if(totals._games[totals._gorder[g]]._winners.length) { if(h & 1) trc = ""; else trc = ""; if(pf == "" || (pfilt[0] != "" && (totals._games[totals._gorder[g]]._elims.indexOf(pfilt[0]) != -1 || totals._games[totals._gorder[g]]._winners.indexOf(pfilt[0]) != -1)) || (pfilt[1] != "" && (totals._games[totals._gorder[g]]._elims.indexOf(pfilt[1]) != -1 || totals._games[totals._gorder[g]]._winners.indexOf(pfilt[1]) != -1)) || (pfilt[2] != "" && (totals._games[totals._gorder[g]]._elims.indexOf(pfilt[2]) != -1 || totals._games[totals._gorder[g]]._winners.indexOf(pfilt[2]) != -1)) || (pfilt[3] != "" && (totals._games[totals._gorder[g]]._elims.indexOf(pfilt[3]) != -1 || totals._games[totals._gorder[g]]._winners.indexOf(pfilt[3]) != -1))) { y += trc + ""; if(totals._games[totals._gorder[g]]._victor) { var winarray = new Array(); for(var wa=0; wa < totals._games[totals._gorder[g]]._winners.length; wa++) { if(totals._games[totals._gorder[g]]._winners[wa] == totals._games[totals._gorder[g]]._victor) winarray.push(totals._games[totals._gorder[g]]._winners[wa] + ""); else winarray.push(totals._games[totals._gorder[g]]._winners[wa]); } y += "Game " + totals._gorder[g] + "" + totals._games[totals._gorder[g]]._name + "" + totals._games[totals._gorder[g]]._round + "" + winarray + ""; } else y += "Game " + totals._gorder[g] + "" + totals._games[totals._gorder[g]]._name + "" + totals._games[totals._gorder[g]]._round + "" + totals._games[totals._gorder[g]]._winners + ""; var lost = new Array(); if(totals._games[totals._gorder[g]]._tnums[0]) { for(var t=0; t< totals._games[totals._gorder[g]]._elims.length; t++) { lost.push(totals._games[totals._gorder[g]]._elims[t] + "" + totals._games[totals._gorder[g]]._tnums[t] + ""); } y += lost + ""; } else y += totals._games[totals._gorder[g]]._elims + ""; } h++; } } viewer.document.getElementById('ranktable').innerHTML = x; viewer.document.getElementById('restable').innerHTML = y; viewer.document.getElementById('labtable').innerHTML = w; for(var j=0; j< sorters['_players'].length; j++) { viewer.document.getElementById('sort' + j).addEventListener('click', function() { sortByCol(totals._order,parseInt(this.id.split('sort')[1]),"_players"); setTable(tname,rnd); },true); } for(var j=0; j< sorters['_games'].length; j++) { viewer.document.getElementById('res' + j).addEventListener('click', function() { sortByCol(totals._gorder,parseInt(this.id.split('res')[1]),"_games"); setTable(tname,rnd); },true); } viewer.document.getElementById('label').addEventListener('click', function() { totals = label['']; setTable(tname,''); },true); viewer.document.getElementById('rlabel').addEventListener('click', function() { totals = label['']; setTable(tname,''); },true); for(var k=0; k 1) jump += "&page=" + page; tourReq['touring' + page] = new XMLHttpRequest(); tourReq['touring' + page].open('GET', jump, true); tourReq['touring' + page].onreadystatechange = function() { if (tourReq['touring' + page].readyState == 4) { var parser = new DOMParser(); var dom = parser.parseFromString(tourReq["touring" + page].responseText,"application/xml"); var pages = dom.getElementsByTagName('page')[0].firstChild.nodeValue; var game = dom.getElementsByTagName('game'); var numPages = 0; if(pages.match(/^(\d+) of (\d+)$/)) numPages = parseInt(RegExp.$2); if(page == 1) { if(numPages > 1) { for(var pg=2;pg<=numPages;pg++) { getTour(tname,pg,rnd); } } } for(g=0; g 1) jump += "&page=" + page; tourReq['touring' + page] = new XMLHttpRequest(); tourReq['touring' + page].open('GET', jump, true); tourReq['touring' + page].onreadystatechange = function() { if (tourReq['touring' + page].readyState == 4) { var parser = new DOMParser(); var dom = parser.parseFromString(tourReq["touring" + page].responseText,"application/xml"); var pages = dom.getElementsByTagName('page')[0].firstChild.nodeValue; var game = dom.getElementsByTagName('game'); var numPages = 0; if(pages.match(/^(\d+) of (\d+)$/)) numPages = parseInt(RegExp.$2); if(page == 1) { if(numPages > 1) { for(var pg=2;pg<=numPages;pg++) { getGames(glist,pg); } } } for(g=0; g