- // ==UserScript==
- // @name ranking
- // @namespace deeproute
- // @author Triplex
- // @version 1.1.1
- // @description Ranks teams for the Deeproute.com online football game
- // @include http://deeproute.com/default.asp?js=weekbyweek&*
- // @include http://deeproute.com/?js=weekbyweek&*
- // ==/UserScript==
-
- var team=[], oppid=[], record=[], sos=[], rating=[], oldrating=[], sosrank=[], run=0, counter=0;
-
- function findTeamID(inname)
- {
- for (var x=0; x<team.length; x++)
- if (team[x] == inname) return x;
- return -1;
- }
-
- function getSOSRank(id) {
- for (var x=0; x<sosrank.length; x++)
- if (sosrank[x]==id) return x+1;
- return -1;
- }
-
- function creatediv(str, idattr)
- {
- var tmp = document.createElement('div');
- tmp.setAttribute("id", idattr);
- tmp.innerHTML = "<span style='color:white'>" + str + "</span>";
- return tmp;
- }
-
- function ranking() {
-
- var win, loss, tie, total, target, str;
-
- run=1;
-
- for (var x=0; x<team.length; x++)
- rating[x]=oldrating[x]=sos[x]=0.0;
-
- for (var x=0; x<team.length; x++) {
- win=loss=tie=0;
- for (var y=0; y<record[x].length; y++)
- if (record[x][y]==1) win++;
- else if (record[x][y]==-1) loss++;
- else tie++;
-
- oldrating[x]=parseFloat(1.0 + win)/parseFloat(win+loss+tie+2);
- }
-
- while (calc() == 0) ;
-
- var order=new Array(team.length);
- for (var x=0; x<team.length; x++)
- order[x]=sosrank[x]=x;
-
- for (var x=0; x<team.length; x++)
- for (var y=x+1; y<team.length; y++)
- if (rating[order[x]] < rating[order[y]]) {
- var tmp=order[x];
- order[x]=order[y];
- order[y]=tmp;
- }
-
- for (var x=0; x<team.length; x++)
- for (var y=x+1; y<team.length; y++)
- if (sos[sosrank[x]] < sos[sosrank[y]]) {
- var tmp=sosrank[x];
- sosrank[x]=sosrank[y];
- sosrank[y]=tmp;
- }
-
-
- var newDiv1 = creatediv("(Rank).......(W-L-T).......(S.O.S)..............(Rating).......(Team Name)", "ranking0");
- target = document.getElementById('rank_button_table');
- if (target) target.parentNode.insertBefore(newDiv1, target.nextSibling);
-
- for (var x=0; x<team.length; x++) {
-
- win=loss=tie=0;
- for (var y=0; y<record[order[x]].length; y++)
- if (record[order[x]][y]==1) win++;
- else if (record[order[x]][y]==-1) loss++;
- else tie++;
-
- var val0=parseInt(parseFloat(sos[order[x]])*10000.0);
- val0=parseFloat(val0) / 100.0;
- var val1=parseInt(parseFloat(rating[order[x]])*10000.0);
- val1=parseFloat(val1) / 100.0;
-
- if (x<9) str="[0" + (x+1).toString() + "]...........";
- else str="[" + (x+1).toString() + "]...........";
-
- str+=win.toString()+"-"+loss.toString()+"-"+tie.toString();
- if (win<10 && loss<10 && tie<10) str+="..";
- str+="........."+val0.toString()+" (#"+(getSOSRank(order[x])).toString()+")";
- for (var y=0; y<5-val0.toString().length+2-(getSOSRank(order[x])).toString().length; y++) str+="..";
- str+="........"+val1.toString();
- for (var y=0; y<5-val1.toString().length; y++) str+="..";
- str+="........"+team[order[x]];
-
-
- var newDiv = creatediv(str, "ranking"+(x+1).toString());
- target = document.getElementById("ranking" + x);
- if (target) target.parentNode.insertBefore(newDiv, target.nextSibling);
- }
- }
-
- function calc() {
- var win, loss, tie, sum, diff=0.0;
-
- for (var x=0; x<team.length; x++) {
- sum=0.0;
- for (var y=0; y<oppid[x].length; y++) {
- sum+=parseFloat(oldrating[oppid[x][y]-1]);
- }
- sos[x]=parseFloat(sum) / parseFloat(oppid[x].length);
- }
-
- for (var x=0; x<team.length; x++) {
- win=loss=tie=0;
- for (var y=0; y<record[x].length; y++)
- if (record[x][y]==1) win++;
- else if (record[x][y]==-1) loss++;
- else tie++;
- total=win+loss+tie;
-
- var rw=parseFloat(win-loss)/2.0 + sos[x]*parseFloat(total);
- rating[x]=parseFloat(rw+1)/parseFloat(total+2);
- }
-
- for (var x=0; x<team.length; x++) {
- diff += parseFloat(Math.abs(rating[x] - oldrating[x]));
- }
-
- if (diff < 0.0001) return 1;
-
- for (var x=0; x<team.length; x++)
- oldrating[x]=rating[x];
-
- return 0;
- }
-
- window.setTimeout( function() {
-
- var input=document.body.innerHTML, ptr1, ptr2, ptr3, startptr, endptr, id, name, id2, score1, score2;
-
- ptr1=input.indexOf("\"teaminfo\"", 0);
- if (ptr1<0) ptr1=input.indexOf("teaminfo ", 0);
- endptr=input.indexOf("hidden", ptr1+8);
- endptr=input.indexOf("hidden", ptr1+8);
-
- while (1) {
- ptr2=input.indexOf("!", ptr1);
- if (ptr2>endptr || ptr2<0) break;
- ptr3=input.indexOf("^", ptr2+1);
- id=parseInt(input.substring(ptr2+1, ptr3));
- ptr2=input.indexOf("^", ptr3+1);
- name=input.substring(ptr3+1, ptr2);
- team[id-1]=name;
- ptr1=ptr2;
- }
-
- for (var x=0; x<team.length; x++) {
- record[x]=[];
- oppid[x]=[];
- }
-
-
- ptr1=startptr=input.indexOf("\"type-X\"", endptr);
- endptr=input.indexOf("\"type-P\"", ptr1+7);
- if (endptr==-1) endptr=input.indexOf("\"type-R\"", ptr1+7);
-
-
-
- while (1) {
- ptr2=input.indexOf("Y!", ptr1);
- if (ptr2>endptr || ptr2<startptr) break;
- ptr3=input.indexOf("^", ptr2+2);
- id=parseInt(input.substring(ptr2+2, ptr3));
- ptr2=input.indexOf("^", ptr3+1);
- id2=parseInt(input.substring(ptr3+1, ptr2));
- ptr3=input.indexOf("^", ptr2+1);
- score1=parseInt(input.substring(ptr2+1, ptr3));
- ptr2=input.indexOf("^", ptr3+1);
- score2=parseInt(input.substring(ptr3+1, ptr2));
-
-
- record[id-1][record[id-1].length]=(score1 > score2) ? 1 : ((score1 < score2) ? -1 : 0);
- oppid[id-1][oppid[id-1].length]=id2;
- record[id2-1][record[id2-1].length]=(score1 < score2) ? 1 : ((score1 > score2) ? -1 : 0);
- oppid[id2-1][oppid[id2-1].length]=id;
- ptr1=ptr2;
- }
-
- for (ptr1=ptr2=0; ptr2<record.length; ptr2++) {
- if (ptr1!=record[ptr2].length)
- if (ptr1==0) ptr1=record[ptr2].length;
- else if (ptr1<record[ptr2].length) ptr1=record[ptr2].length;
- }
-
- if (ptr1==0) run=1;
-
- var target = document.getElementById('imonstatus');
- var buttontable = document.createElement('table');
- buttontable.setAttribute('cellspacing', '0');
- buttontable.setAttribute('cellpadding', '0');
- buttontable.setAttribute('id', 'rank_button_table');
-
- var newtr=document.createElement('tr');
- buttontable.appendChild(newtr);
- var newtd1 = document.createElement('td');
- newtd1.setAttribute('colspan', '10');
- var newDiv2 = document.createElement('div');
- newDiv2.align = 'center';
- newDiv2.innerHTML = '<input type="button" style="font-size: 10pt; font-weight: bold; width: 100%; height: 30px" value="Ranking">';
- newDiv2.addEventListener('click', function() { if (run==0) ranking(); }, true);
- newtd1.appendChild(newDiv2);
- newtr.appendChild(newtd1);
-
- if (target) target.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.insertBefore(buttontable,
- target.parentNode.parentNode.parentNode.parentNode.parentNode.nextSibling);
- }, 100);