Code: Select all
// Conquer Club - Card Counter, Card Redemption Value, Status Indicator
// version 0.4 BETA!
// now with additions!!
//-----------------------------------------------------------------------------
// Installation
//-----------------------------------------------------------------------------
// This is a Greasemonkey user script.
//
// To install, you need Greasemonkey: http://greasemonkey.mozdev.org/
// Then restart Firefox and revisit this script.
// Under Tools, there will be a new menu item to "Install User Script".
// Accept the default configuration and install.
//
// To uninstall, go to Tools/Manage User Scripts,
// select "Conquer Club", and click Uninstall.
//
//-----------------------------------------------------------------------------
// Description
//-----------------------------------------------------------------------------
// * Adds a status indicators and number of cards for each player
// * Adds card redemption values
// * Adds dynamic countdown timer
// * Adds statistics
// * Automatically Jumps to map.
// * Adds red focus indicators
//
//-----------------------------------------------------------------------------
// Addons
//-----------------------------------------------------------------------------
// * cyberdaniel's dice statistics
// * Tubby Rower's Terminator points tracker
//-----------------------------------------------------------------------------
// Notes
//-----------------------------------------------------------------------------
// * The status indicator isn't always accurate. It goes yellow when a player
// receives men, and red when they fortify, and back to green when a new round
// is started.
// * Armies per turn DOES NOT INCLUDE BONUSES.. so no continent bonuses.
// * Strength = # Armies + Potential Armies - ( 2/3 * # Countries )
//-----------------------------------------------------------------------------
// Meta Data
//-----------------------------------------------------------------------------
// ==UserScript==
// @name Conquer Club
// @namespace http://personal.ecu.edu/tnt1202/conquerclub.user.js
// @description Adds card counter, redemption value, and user status
// @include http://*conquerclub.com*
// ==/UserScript==
//-----------------------------------------------------------------------------
// USER SETTINGS
//-----------------------------------------------------------------------------
var OPTIONS = new Object();
OPTIONS['jumptomap'] = true;
OPTIONS['colorblind'] = false;
OPTIONS['donated'] = true;
OPTIONS['focuscolor'] = '#C00';
OPTIONS['stats'] = true;
//-----------------------------------------------------------------------------
// DO NOT EDIT BELOW THIS ( unless you know what you are doing )
//-----------------------------------------------------------------------------
function gm_ConquerClubGame(OPTIONS){
/*---- Check for Required Components ----*/
var log = document.getElementById('log');
var rightside = document.getElementById('right_hand_side');
var dashboard = document.getElementById('dashboard');
var map = document.getElementById('inner-map');
//If we cannot find any of the following just quit out.
if( !(log && rightside && dashboard && map) ) return;
/*---- Prototyping ----*/
String.prototype.has = function(key) { return this.indexOf(key) > -1; }
/*---- Object Stuff ----*/
//Player Status
var eStatus = { GREEN:0, YELLOW:1, RED:2, UNKNOWN:3, WINNER:4, LOSER:5 }
//Player Class
function Player( name, pid, color ){
this._name = name;
this._pid = pid;
this._color = color;
this._status = eStatus.UNKNOWN;
this._cards = 0;
this._score = 0;
this._armies = 0;
this._countries = 0;
this.toString = function() { return this._name; }
this.getArmiesPerTurn = function() { if( this._countries < 12 ) return 3; return Math.floor(this._countries/3); }
this.getTurninP = function() { if( this._cards < 3 ) return 0; if( this._cards > 4 ) return 1; if( this._cards == 3 ) return 0.3341; return 0.778; }
this.alert = function() {
alert( "Name:\t" + this._name +
"\nPID:\t" + this._pid +
"\nStatus:\t" + this._status +
"\nCards:\t" + this._cards +
"\nArmies:\t" + this._armies +
"\nCountries:\t" + this._countries +
"\nArmies/Turn:\t" + this.getArmiesPerTurn()
);
}
}
//Game Enumerations
var eGameType = { STANDARD:0, TERMINATOR:1, DOUBLES:2, TRIPLES:3 }
var ePlayOrder = { NDTFREESTYLE: 0, FREESTYLE:1, SEQUENTIAL:2 }
var eBonusCards = { NOCARDS:0, FLATRATE:1, ESCALATING:2 }
//-------------------------------------------------------------------------
// VARIABLE DECLARATIONS
//-------------------------------------------------------------------------
/*---- Gameplay ----*/
var num_turnins = 0;
var num_players = 0;
var m_gameType;
var m_playOrder;
var m_bonusCards;
var RedemptionValue;
/*---- Statistics ----*/
var totalArmies = 0;
var totalCountries = 0;
/*---- Player ----*/
var pl = new Array(); // will hold my players
var NID = 0; // Neutral ID
var pl_Colors = new Array("666","f00","090","00f","cc0","0cc","f0f");//Player Colors
var pl_cbIDs = new Array("n","r","g","b","y","t","p"); //Color Blind Identifiers
/*---- Player Status IMG Sources ----*/
pl_StatusSrc = new Array(); // Holds location of default status images
pl_StatusSrc[eStatus.GREEN] = "data:image/gif,GIF89a%0A%00%0A%00%E6C%00P%B1%12b%9Fd%5E%B0%07%82%AC%862%90%1A3%8324%8534%883%8D%F3%02%89%EE%02%8A%EE%02%BA%F6q%89%EC%02%8B%F1%02%84%ED%06e%BD%07%80%E7%06x%E1%0Ax%E2%0A%83%AE%87%BB%FBcq%CA%05%60%9Ac%A9%FA%3C%3D%93%14%2C%7F%17o%C8%05%E5%FE%C4b%A1e%84%B3%89m%C4%05w%E0%0A%9D%FA!5%8A4%8C%F3%02C%A3%16J%A2%11%2C%81%17E%A6%17z%E3%09.%86%18F%9A%10D%97%0Ft%D1%05%A1%C3%A5i%C5%08S%B6%13%A0%C0%A5%A1%C2%A5M%A9%11p%D2%08S%B8%13y%E1%09%3A%8D%13%8F%F8%022%92%1A%83%EC%06~%DB%02%7B%E3%0F%40%9B%15l%CA%089%8A%13%2B~%17D%95%0F2%7C1_%97b%A0%BE%A4%FF%FF%FF%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00!%F9%04%01%00%00C%00%2C%00%00%00%00%0A%00%0A%00%00%07a%80CC%2C%1C!%07%01%2F%82C%1D7%26.%00%3B(%13C0%043'%0B82%24%25B%01%234%1B%14%20%22-5A%06%00%0E%17%3A%12%08%2B*%40%051%106%11%1F%0A%1A%3F%40%16%18%3C%09%0D%0C9%02%3DAB%19)%0F%15%1E%02%3F%3EBC%03%3E%3D%3F%3F%3D%3E%03%8ABA%40%40%C6%82%81%00%3B";
pl_StatusSrc[eStatus.YELLOW] = "data:image/gif,GIF89a%0A%00%0A%00%D5%3A%00%C2%94%00%C1%9B%00%C2%A7%05%CD%BF%40%DB%AC%00%D5%A3%00%E9%DD%BF%DB%A7%00%F1%E7_%C1%99%00%C2%A5%04%D9%A6%00%F4%D7%12%C7%98%00%D4%A5%00%F1%D5%12%CA%A40%E9%DC%BA%DB%B4A%CB%A65%C7%9D%1F%CC%BE%3E%E7%CF%1C%EB%D9%3A%DA%B3C%F9%E6%40%DE%B9%02%E8%DB%BA%C1%94%00%E0%B6%3B%C2%A6%05%C1%9A%00%EC%D0%12%E8%DC%BF%C5%9A%00%D4%A2%00%D8%BF%10%D7%A4%00%DD%C9%95%DB%B4F%CC%AA%01%DE%D4W%E2%D2%AC%E0%CF%A3%DA%C3%1B%C3%AC%0F%C4%B2%20%C3%B1%20%C1%9C%00%EA%CE%11%C9%A2*%FF%F7%92%D4%A6%00%C8%9F%25%D1%A0%00%DB%B7%01%F8%EC%60%DE%CB%9B%FF%FF%FF%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00!%F9%04%01%00%00%3A%00%2C%00%00%00%00%0A%00%0A%00%00%06E%40%5D'%A2%2B%1A%8B%07%82ds%2C.b%1A%1A%C6p%2C12%96%9B%E3%14*%16%1E3%DC%85%85%12%01t%23%10%225p%09%60%14%9D%8DTyy%025S%B1%D1R%7Cd9G%1C%09%10%2BM%3A%13*%87%3AA%00%3B";
pl_StatusSrc[eStatus.RED] = "data:image/gif,GIF89a%0A%00%0A%00%D5%00%00%C2**%C0))%BF%08%09%C5**%C1%08%09%C8%2B%2B%E5e%5B%C4%08%09%D8..%E922%BB%08%08%FCod%E3dZ%ED33%D4%5DT%E722%FAZO%AF%07%08%CA%2B%2B%E7e%5B%E200%BE%08%08%F033%B8%07%08%C1))%FF%DC%D9%B7%07%08%FF%7Cr%AE%07%08%ECh%5D%EC33%FC%5BP%BC%08%08%FF%CF%CC%C6**%FF%81x%FD%5BP%E6e%5B%EBg%5D%C3**%F7%16%17%F244%C3%08%09%FF%5CQ%AA%07%08%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00!%F9%04%00%00%00%00%00%2C%00%00%00%00%0A%00%0A%00%00%06H%40%82%EA%A0*%AA%04%97%88%E0%91j%A6%2C%14%09%AB%D2%C8%84%AE%9BN%81%05%F2%8CV%60%92I%C4%F5%AEP(1%B9%FBE%ABY%8A%C4%E2C%87L%06%2C%0D%C2P%EA3%1C%18%2C%1C%00'%85'%00%01%01%2C%8B%8C%8D%2CA%00%3B";
pl_StatusSrc[eStatus.UNKNOWN] = "data:image/gif,GIF89a%01%00%01%00%80%00%00%FF%FF%FF%00%00%00!%F9%04%01%00%00%00%00%2C%00%00%00%00%01%00%01%00%00%02%02D%01%00%3B";
pl_StatusSrc[eStatus.WINNER] = "data:image/gif,GIF89a%0A%00%0A%00%D5%00%00888z%9F%EAppp~~~b%8D%E4%B6%B6%B6%08%08%08%84%84%847X%9B%03%05%0A%14%1A'%0A%0C%11%1A%1D%244Ky7Kv5O%85%22%3Ag%2FK%83Lv%CA%A5%BB%E7%CC%CC%CC%17%1A!*%3Ed%3Ca%AA%93%B0%EA%09%0E%1A%07%09%0E~%9F%E2Oz%D1%0C%0E%11Ot%BE%0E%15%24%0D%14%22%CA%CA%CA%80%91%B3%0E%18-7Q%84%85%A7%EALWn1%3EX%3Cf%BBDo%C6%04%06%0AW%80%D4%03%06%0BOYn%A7%BD%EA%8A%A9%EAz%8D%B3g%87%C6%15%206h%91%E4%99%B3%E7%18%227%1E2Yjjj%86%86%86%00%00%00%EE%EE%EE%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00!%F9%04%00%00%00%00%00%2C%00%00%00%00%0A%00%0A%00%00%06Q%40%9D%90Ra%84%84H%DD%C0%D4%1A%24%85%00%98%08%80%BC%19r%0B%DA%A4%933%DCN%9B%D2%0B%E3r%90%1E%B2%9B%22%16%08%20%10%91%CCM%87%D3%CC%08%1C%14%0B'%2C%D4%08%2B%12)%23%05B%02%0D%1E%1F%20%17%10%02B%07%16*88%096%07%3AA%00%3B";
pl_StatusSrc[eStatus.LOSER] = "data:image/gif,GIF89a%0A%00%0A%00%D5%00%00*(%12%EE%EE%EEYR%16%EC%D9%23ED%3D%EC%DA%23%EE%DD%23%F0%E1%23%F4%E8u%F0%E12CB6%DC%DC%DC%F5%EA%8D%AC%9D%1A%F1%E3_%C3%B5%3A%F0%E0Y%3F%3D2%25%25%23bZ%16%B2%A4%2B%D6%D6%D3%F4%E9%7B%ED%ED%EC%F3%E7q*(%1121%25%F4%E9%89%5CU%16%D1%C6l%F5%EB%93%F0%E1-%BA%AA%1C0-%13%B7%A7%1B10%25%F3%E6x%0F%0E%09%DA%DA%D9%EE%DCF%96%8FO%EE%EE%ED%06%06%04%40%3F4%1F%1E%1A%ED%DB%23rh%1243)%ED%DA%23LF%17%EF%DF%23%D9%D9%D9%EB%D6%23%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00!%F9%04%00%00%00%00%00%2C%00%00%00%00%0A%00%0A%00%00%06U%C0%C0%8C%F0%8A%C5%5E%84%85P%D2%D9x%18%24%14k%F6z%400%16%84%E3DY%C5h%85Z%E2S%1B%D0%00.ZKv8%C8%604A%BAU%AB%D7%E0%82o%CD%20%93%19jg%23%20%60-0f%0D%113*%224%8D4.%253%17%15%1A!%13%1C%19%0A%26)A%00%3B";
/*---- Clock ----*/
var today = new Date();
var time = new Array();// { hh, mm, ss }
var timeStr;
var timeLocStr = rightside.innerHTML.has('<span class="countdown-alert">')?'<h4>Time Remaining</h4><span class="countdown-alert">':'<h4>Time Remaining</h4>';
var timeLoc;//location of the time
var timeindexOffset;//location of the time + the index ( hr, min, or sec )
var timeWIDTH = 18;
var clockInterval;
/*---- Misc ----*/
var i;
var tmp;
var tmp2;
var re;
var pid; // player identifier
var name; // tmp name
//-------------------------------------------------------------------------
// FUNCTIONS
//-------------------------------------------------------------------------
var countDown = function(){
var hrs = document.getElementById('hrs');
var mins = document.getElementById('min');
var secs = document.getElementById('sec');
if( --secs.value < 0 ){
if( --mins.value < 0 ){
if( --hrs.value < 0 ){
hrs.value = 0;
if( mins.value <= 0 && secs.value <= 0 ){
clearInterval(clockInterval);//No more counting down
//No weird negative #s
mins.value = 0;
secs.value = 0;
document.getElementById('countdown').innerHTML = "<b><font color=red>NEW ROUND STARTED!<br />Click Refresh Map</font></b>";
//window.location.reload();
return;
}
}
mins.value = 59;
}
secs.value = 59;
}
}
var calcRedemption = function(){
if( m_bonusCards == eBonusCards.ESCALATING ){
if( num_turnins < 5 ) return num_turnins * 2 + 4;
else return num_turnins * 5 - 10;
} else if( m_bonusCards == eBonusCards.FLATRATE) return 7;
return 0; //no cards
}
var calcArmiesNextTurn = function(countries){
if( countries < 12 ) return 3;
return Math.floor(countries/3);
}
/*---- Returns probability of a tunin - http://www.kent.ac.uk/IMS/personal/odl/riskfaq.htm#3.5 ----*/
var getTurnInP = function(num_cards){
if( num_cards < 3 ) return 0;
if( num_cards > 4 ) return 1;
if( num_cards == 3 ) return 0.3341;
return 0.778; // has 4 cards
}
//-------------------------------------------------------------------------
// INIT
//-------------------------------------------------------------------------
/*---- Start Clock ----*/
tmp = rightside.innerHTML.indexOf(timeLocStr);//to make sure there is a clock.
if( tmp > -1 ){
timeLoc = tmp + timeLocStr.length + 1;
tmp = rightside.innerHTML;
timeStr = tmp.substring(timeLoc,timeLoc + timeWIDTH);
re = new RegExp( timeStr );//Replace time
time = timeStr.split(/hrs\n|min\n|sec\n/);
var formAttr = "style=text-align:right;width:1.1em;border:none;background:#eee; size=1 maxlength=2 type=text";
timeStr = '<form><input '+formAttr+' id=hrs value='+time[0]+'> hrs <input '+formAttr+' id=min value='+time[1]+'> min <input '+formAttr+' id=sec value='+time[2]+'> sec</form>';
rightside.innerHTML = tmp.replace(re,"<div id=countdown>" + timeStr + "</div>");
clockInterval = window.setInterval(countDown,1000);
}
/*---- Create Divisions ----*/
var stats = document.createElement('div');
dashboard.parentNode.insertBefore(stats, log.previousSibling.previousSibling);
stats.style.margin = '10px 0 0 0';
if( !OPTIONS['donated'] ){
var donation = document.createElement('div');
dashboard.parentNode.insertBefore(donation, log.previousSibling.previousSibling);
donation.style.margin = '10px 0 0 0';
var WWW = 'http://personal.ecu.edu/tnt1202/'
var NONAG = 'nonag';
var SCRIPTFILE = 'conquerclub.user.js';
if( OPTIONS['colorblind'] ) SCRIPTFILE = 'colorblind' + SCRIPTFILE;
donation.innerHTML = '<form action="https://www.paypal.com/cgi-bin/webscr" method="post"><input type="hidden" name="cmd" value="_xclick"><input type="hidden" name="business" value="troythompson@nc.rr.com"><input type="hidden" name="item_name" value="Donation for Tr0y\'s Greasemonkey Script"><input type="hidden" name="no_shipping" value="1"><input type="hidden" name="return" value="'+ WWW + NONAG +SCRIPTFILE +'"><input type="hidden" name="currency_code" value="USD"><input type="hidden" name="tax" value="0"><input type="hidden" name="lc" value="US"><input type="hidden" name="bn" value="PP-DonationsBF"><input type="image" src="data:image/gif,GIF89an%002%00%E6W%00%DF%DF%DF%DC%DC%DC%9E%9E%9E%F9%F9%F9%84%84%84%3B%3B%3B%CD%CD%CD%F3%F3%F3%AB%AB%AB%ED%D9%26%FB%FB%FB%E7%E7%E7ddd%18%18%18%F5%F5%F5%A5%A5%A5%F1%E1%26%D3%D3%D3%EE%EE%EE%7D%7D%7D%E2%E2%E2OOO%FE%FE%FE%95%95%95%A1%A1%A1%E9%E9%E9%BE%BE%BE%9B%9B%9B%8A%8A%8A%2C)%13%C6%C6%C6%D9%D9%D9sj%13%F1%E0%26MH%18LF%1743)%5BU%18%F0%DE%26ED%3D%B9%00%00%F0%DD%26BA6%FF%FF%FE%F1%E2%5C%F5%E8s%AE%9F%1C%EF%DB%26%E5%E5%E354(%F2%E20%5EV%18GE%3A%F5%EB%8A65%2B%C5%B7%3C%07%06%04%D2%C8n%F3%E5b%F6%EB%7D%F6%EB%8F%F4%E8yc%5B%17%F2%E34%B4%A6-%E8%E8%E8%F6%EC%95%EC%EC%EC%AE%00%00%FE%FE%FD%97%91P%25%25%23%1F%1F%1A%D9%00%00%F6%EAwCB7%EA%EA%E8%EF%DC%2632\'%10%0F%09%F0%DFH%BC%AC%1E1.%15%B9%A9%1E%EB%EB%EB%00%00%00%FF%FF%FF%FF%FF%FF%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00!%F9%04%01%00%00W%00%2C%00%00%00%00n%002%00%00%07%FF%80W%82%06%18%17%1C%1C%04%89%8A%8B%8C%8D%8E%8F%90%91%92%93%94%8A%13%13%0C%0C%1B%82%9C%1A%17%06%14%00%01%A3%A4%A5%A6%A7%A8%A9%AA%AB%AC%AD%AE%A6%1F%11%02%0D%0C%9C%00%1C%11V%BA%BB%BC%BD%BE%BF%C0%C1%C2%C3%C4%C5%C3%0FU%1A%82%02%1B%C6%CE%CF%D0%D1%D2%BC%0A%05%15%82%0C%1E%D3%DB%DC%DD%CF%0A%0E%17%0D%82%15%B9%D3UU%DE%EA%EB%BB%E0%12%08U%E4%E6%BB%E8%BD%E9%BF%F5%DC%E8%FB%EB%F9V%FE%C6%DC%C1%13T%C0%80%3D%7F%00y%25%8C%96o%A14%87%CE%14%1C%A02%F0J%C1%83%F5%F8%FD%D3%D8%F0%DE%BE%7B%F44%EAB%E8Q%E4G%90%1FG%A6%24%D9Q%A4D%8A%F1%2C%1AT%B81%5D%C2%8C6K%AA%C4%87%B2%E7%C6%9D%3F%83%86%04%1A%B4c%D1%7B%2F%2B%5E%A4%F9%0F%E8%C9%9A%3DS%864%E9%D3%E8Q%95%1C%7D%5E%B5%9A4%E6Rz%07%B7R%E5I%94%E4U%B1N%B5%1A%E5%3AQ%E9L%B0%0A%FFs%EE%C4Yv%A8P%ABxu%E6%B5%BBV%A7%95%AE%04%DF%8E%0C%0BU%EE%D1%9BR%0B%C75%7B%98%E5%DD%AC%40%25.p%CB%AE%B2%E5g%16%06%1CX%80LP%03m%97C%8B%EEe%C1%82%03%09%14%3A%CB%1C%CD%BAu%5B%AF%82%5B%CBf%F7%3A%F0%EC%DB%B4a%DA%C6%CD%9B%5B%ED%D5%BD%83G%FB%FDU%B8%BA%0C\'H%8C%18A%E2%C4%90n%C4c3%04%19%EC%24%F5%A9%D02%1C%C9QC%08%8F%1EF%90d%F0%AD%1B%F86%88%BE%20%D2uf%E3%06%8B%16%3B%94%E8%80%02d%09y%CA%E7W%8A%8C%3BW%EEz%F4%22%24%D0D%15%3F%C8P%C5%0B%09t%E0%DBd%B0u%B3%17aO%D1e%D5%2F%20%24%60%02%04I%A0%00A%0A%09%94%B0%A0j%C5%3D%E4%D7B%13%FE%D4%D2u%BDTx!%0ADl%D8%E1%7D%0D%EA3%22%8A%25%FE%B7%9F%2F%01V%11%02%04%10%84PE%820%EE%26cN%0E%95X%13%7F%C28%11E%FF%02%1F%25%E0%82%0AA%9Ag%9C0%E8%E9%12%04%0ES%24%A0e%02%20%3C1%DE6%D1M9L%95%BA%14%01C%0CR%F80C%0740%B1B%94!%8A)\'%2Fa%CEi\'%9D%E5%C5i%CC%8DwzS\'4d%02%93%D8u4%06*Tz(%FE%F2%E73%86%12%D6%D4c%10%3A%98%A8%2F%9B%E1%C7%A8~%7D!%B9%D8%91%9Ab%E5%1F%3FO)%26%CCf%20JW%CC%5E%A1%12%05%D6z%9B%1Ej%9DaF%02%B3%A83%A8%26%8A%93G%26N%CA*%A4%0F%0E3%EB%9E3%1E%CA%17%AEv%C1%B5%ABY%BD%8E%9A%A7%A9%C4%B0%E4%17%A2%1Cu%8A%D5T%86%E5%BA%1F%9F%BD%FC%DA%A7%8C%60.%BB-%3B%8D*%CA%A0%90%DF%8AIjL%9F%95%3B\'j%AA5%80%81%15%16(0%C0%BC%F4%D6k%EF%BD%F8%E6%AB%EF%BE%FC%F6%EB%AF%BD%0E%9C%B6%40%00%04%8CsE%05%058p%80%04T4%EC%F0%C3%10G%2C%F1%C4%14Wl%F1%5B%C5%18G%BC%00%05%B1X%23%88%06U%5C%B01%00%24%97l%F2%C9(%A7%AC%F2%CA%2C%B7%EC%F2%CB\'%07%10%8B%01%13%24%C3%09%03U0%80%01%06%02%F4%EC%F3%CF%40%07-%F4%D0D%17m%F4%D1H%03%BD%C1%068%D7%C2%C9%15%134%F0%EA%D4TWm%F5%D5Xg%ADu%15%0DL%C0I%20%00%3B" border="0" name="submit" alt="Make a donation (any amount) and you get a link to remove the nag, and the warm fuzzy feeling you get when you support something you like."><img alt="" border="0" src="https://www.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1"></form>';
}
/*---- Cleanup Log ----*/
var log = log.innerHTML;
log = log.replace(/<br>/g,'');//Remove HTML BR tags
log = log.split('\n');//Splits Each line.
/*---- Get Game Modes ----*/
if( dashboard.innerHTML.has("Terminator") ) m_gameType = eGameType.TERMINATOR;
if( dashboard.innerHTML.has("Sequential") ) m_playOrder = ePlayOrder.SEQUENTIAL;
else {
if( dashboard.innerHTML.has("Freestyle (no double turns)") )
m_playOrder = ePlayOrder.NDTFREESTYLE;
else
m_playOrder = ePlayOrder.FREESTYLE;
dashboard.innerHTML = dashboard.innerHTML.replace("double turns","dbl turns");
rightside = document.getElementById('right_hand_side');//DONT REMOVE THIS LINE! :-(
}
/*---- Get Player Names ----*/
tmp = rightside.innerHTML
tmp = tmp.split("<h4>Players</h4>\n")[1];
tmp = tmp.split(/class="player[^d]">|<\/a>/m);
pl["Neutral"] = new Player("Neutral",NID,pl_Colors[NID]);
for( i = 1; i < tmp.length; i+=2 ) pl[tmp[i]] = new Player(tmp[i],++num_players,pl_Colors[i]);
/*---- Calculate Cards & Player Status ----*/
for( i = 0; i < log.length; i++ ){
name = log[i].split(/<[^>]*>/)[1];
if( log[i].has(" receives ") ){
pl[ name ]._status = eStatus.YELLOW;
}
else if( log[i].has(" gets a card") ){
pl[name]._cards += 1;
pl[name]._status = eStatus.RED;
}
else if( log[i].has(" fortified ") || log[i].has(" ran out of time") || log[i].has(" missed a turn") ){
pl[ name ]._status = eStatus.RED;
}
else if( log[i].has(" cashed") ){
pl[ name ]._cards -= 3;
num_turnins++;
}
else if( log[i].has(" eliminated ") ){
var tmp = log[i].split(/<[^>]*>/);
pl[ tmp[1] ]._cards += pl[tmp[3]]._cards;//conquerer gets losers cards
pl[ tmp[3] ]._cards = 0;
pl[ tmp[3] ]._status = eStatus.LOSER;
}
else if( log[i].has(" gains ") ){
pl[ log[i].split(/<[^>]*>/)[1] ]._status = eStatus.WINNER;
//
//added in version 0.5
tmp2 = log[i].split(" gains ")[1];
pl[name]._score -= - tmp2.split(" ")[0];
}
else if( log[i].has(" loses ") ){
tmp2 = log[i].split(" loses ")[1];
pl[name]._score -= tmp2.split(" ")[0];
}
//end of addition
// }
else if( log[i].has(" was kicked out ") || log[i].has(" was a deadbeat") ){
pl[ log[i].split(/<[^>]*>/)[1] ]._status = eStatus.LOSER;
}
else if( log[i].has("Incrementing game to round") || log[i].has("Game has been initialized") ){
// if( m_playOrder != ePlayOrder.SEQUENTIAL )
for( tmp in pl )
if( pl[tmp]._status != eStatus.LOSER ) pl[tmp]._status = eStatus.GREEN;
}
}
/*---- Put status and number next to each player ----*/
var allPlayers = rightside.getElementsByTagName('a');
i = allPlayers.length;
var blankStatusStr = '<img style="float:left;margin-right:5px;" src="'+ pl_StatusSrc[eStatus.UNKNOWN] +'" border="0" height="10" width="10">';
do {
var curPlayer = allPlayers[--i];
if( !pl[curPlayer.innerHTML] ) break;
name = curPlayer.innerHTML + "";
var nameStr = OPTIONS['colorblind']?pl_cbIDs[ pl[name]._pid ] + ":" + name:name;
var cardStr = " (" + pl[name]._cards + ")";
var statusStr = '<img style="float:left;margin:2px 5px 0 0;" src="'+ pl_StatusSrc[ pl[name]._status ] +'" border="0" height="10" width="10">';
// if( m_playOrder == ePlayOrder.SEQUENTIAL && !( pl[name]._status == eStatus.LOSER || pl[name]._status == eStatus.WINNER) )
// curPlayer.innerHTML = blankStatusStr + "<u>" + nameStr + cardStr + "</u>";
// else
curPlayer.innerHTML = statusStr + "<u>" + nameStr + cardStr + "</u>";
} while( i );
/*---- Add redemption value to dashboard and fix wrapping issue ----*/
tmp = dashboard.innerHTML;
//Lets user know how many armies they can expect to receive if they turn in cards.
if( tmp.indexOf("Escalating") > -1 ){
m_bonusCards = eBonusCards.ESCALATING;
RedemptionValue = calcRedemption();
re = new RegExp("</tbody>");
tmp = tmp.replace(re,"<tr><td colspan=2><b>Next Redemption Value is " + RedemptionValue +".</b></td></tr></tbody>");
dashboard.innerHTML = tmp;
}
else if( tmp.indexOf("Flat Rate") > -1 ){
m_bonusCards = eBonusCards.FLATRATE;
RedemptionValue = calcRedemption();
re = new RegExp("</tbody>");
tmp = tmp.replace(re,"<tr><td colspan=2><font color=red><b>Red:</b></font> 4 <font color=green><b>Green:</b></font> 6 <font color=blue><b>Blue:</b></font> 8 <b>Mixed:</b> 10</td></tr></tbody>");
dashboard.innerHTML = tmp;
}
else {
m_bonusCards = eBonusCards.NOCARDS;
RedemptionValue = calcRedemption();
}
/*---- Map Analysis ----*/
var armiesArr = map.innerHTML.split(/armies=|,|-|" alt="/);
if( OPTIONS['colorblind'] ) var cbMapStr = armiesArr[0] + " armies=";
var tmpArmies = new Array(0,0,0,0,0,0,0); //temp holding for armies
var tmpCountries = new Array(0,0,0,0,0,0,0); //temp holding for countries
//Get individual scores
for( i = 1; i < armiesArr.length-1;i+=2 ){
pid = parseInt( armiesArr[i] );
tmpArmies[pid]+= parseInt( armiesArr[i+1] );
tmpCountries[pid]++;
if( OPTIONS['colorblind'] )
cbMapStr+= armiesArr[i] +"-"+ pl_cbIDs[pid] + armiesArr[i+1] + ","
}
totalCountries = (armiesArr.length-2)/2;
i = 0;
for ( name in pl ){
totalArmies += tmpArmies[i];
pl[name]._armies = tmpArmies[i];
pl[name]._countries = tmpCountries[i++];
}
tmp = document.getElementById('inner-map').innerHTML;
if( OPTIONS['colorblind'] ) {
cbMapStr = cbMapStr.substring(0,cbMapStr.length-1) + '">';
tmp = cbMapStr + "";
}
//Auto Scroll to Game
if( OPTIONS['jumptomap'] ){
document.getElementById('inner-map').innerHTML = '<a name="gmtop">' + tmp + '</a>';
window.setTimeout(window.location.hash="gmtop",1000);
}
/*---- Adds Statistics Table ----*/
var statsStr = "";
tmp = "";
//version 0.5 change
//Added an extra column for point accumulation
statsStr+= "\n<table align=center style='width:100%;border:1px solid #FFF;background:#eee;' rules=rows><tr style='font-weight:bold;'><td>Name</td>";
if ( m_gameType == eGameType.TERMINATOR ) {
statsStr+= "<td>Points Difference</td>";
}
statsStr+= "<td>Armies</td><td>Countries</td><td>Strength</td><td>Armies/Turn w/o Bonus</td></tr>\n";
for( name in pl ){
var scoreStr;
if (pl[name]._score >= 0) {
scoreStr = '<b><font color="green">+' + pl[name]._score + '</font></b>';
}
else {
scoreStr = '<b><font color="red">' + pl[name]._score + '</font></b>';
}
var nameStr = OPTIONS['colorblind']?pl_cbIDs[ pl[name]._pid ]+":"+name:name;
if( pl[name]._countries != 0 ){
var pctArmies = Math.round(pl[name]._armies*100/totalArmies);
var pctCountries = Math.round(pl[name]._countries*100/totalCountries);
var numArmiesNextTurn = ( pl[name]._pid )?calcArmiesNextTurn(pl[name]._countries):0;
// strength = Armies + PotentialArmies - 2*Countries/3
var pl_Strength = Math.round( ( pl[name]._armies + numArmiesNextTurn + (getTurnInP(pl[name]._cards) * RedemptionValue) - (2*pl[name]._countries/3) ) * 100 )/100;
if( pl[name]._pid ) { // if not neutral
statsStr+= "<tr><td><span class='player"+ pl[name]._pid +"'>"+ nameStr + " ( " + pl[name]._cards + " )</span></td>";
if ( m_gameType == eGameType.TERMINATOR ) { statsStr+= "<td><span class='player"+ pl[name]._pid +"'>"+ scoreStr + "</span></td>";}
statsStr+= "<td><span class='player"+ pl[name]._pid +"'>"+ pl[name]._armies +" ( " + pctArmies +"% )</span></td>" +
"<td><span class='player"+ pl[name]._pid +"'>"+ pl[name]._countries + " ( " + pctCountries +"% )</span></td>" +
"<td><span class='player"+ pl[name]._pid +"'>"+ pl_Strength +"</span></td>" +
"<td><span class='player"+ pl[name]._pid +"'>"+ numArmiesNextTurn +"</span></td></tr>\n";
}
else { //neutral
tmp = "<tr><td><span class='player"+ pl[name]._pid +"'>"+ nameStr + "</span></td>";
if ( m_gameType == eGameType.TERMINATOR ) {tmp += "<td><span class='player"+ pl[name]._pid +"'>0</span></td>";}
tmp += "<td><span class='player"+ pl[name]._pid +"'>"+ pl[name]._armies +" ( " + pctArmies +"% )</span></td>" +
"<td><span class='player"+ pl[name]._pid +"'>"+ pl[name]._countries + " ( " + pctCountries +"% )</span></td>" +
"<td><span class='player"+ pl[name]._pid +"'>"+ pl_Strength +"</span></td>" +
"<td><span class='player"+ pl[name]._pid +"'>0</span></td></tr>\n";
}
}
//
// version 0.5 addition
else if ( m_gameType == eGameType.TERMINATOR ) {
if( pl[name]._pid ) // if not neutral
statsStr+= "<tr><td><span class='player" + pl[name]._pid + "'>" + nameStr + " ( 0 )</span></td>" +
"<td>" + scoreStr + "</td>" +
"<td></td>" +
"<td></td>" +
"<td></td>" +
"<td></td></tr>\n";
}
//end of addition
//
}
statsStr+= tmp; //neutral
statsStr+="<tr style='font-weight:bold;color:#000;'><td>Totals</td>";
if ( m_gameType == eGameType.TERMINATOR ) statsStr+="<td></td>";
statsStr+="<td>" + totalArmies + " ( 100% )</td><td>" + totalCountries + " ( 100% )</td><td> - </td><td> - </td></tr>\n";
statsStr+= "</table>"
//////////////////////////////////////////cyberdaniel's addon///////////////////////////////////////////////////
var attacks = document.getElementById('DiceRolls');
if (attacks)
analyze(attacks.innerHTML);
//createCookie("conquerclub","101 47 72 109 94 128 128 101 98 52 57 56 64 44 67 40 47 33 59 39 0 0 0 2 0 0 0 0 0",100);
var settings=readCookie("statssettings");
if ( OPTIONS['stats'] ) {
statsStr+=writeStats();
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
stats.innerHTML = statsStr;
}
//////////////////////////////////////cyberdaniel's functions///////////////////////////////////////////////////
function createCookie(name,value,days) {
if (days) {
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
}
else var expires = "";
document.cookie = name+"="+value+expires+"; path=/";
}
function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}
function eraseCookie(name) {
createCookie(name,"",-1);
}
function analyze(txt) {
var stat=new Array();
//eraseCookie("conquerclub");
var sCookie = readCookie("conquerclub");
if(sCookie==null)
sCookie="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0";
//alert(sCookie);
/*
num wins / num ties / num loses / att 1s / att 2s / att 3s / att 4s / att 5s / att 6s / def 1s / def 2s /
def 3s / def 4s / def 5s / def 6s / 3v2 win / 3v2 tie / 3v2 loss / 3v1 win / 3v1 loss / 2v2 win / 2v2 loss /
2v1 win / 2v1 loss / 1v2 win / 1v2 loss / 1v1 win / 1v1 loss
*/
for(i=0;i<29;i++)
{
if (sCookie.indexOf(" ")!=-1)
stat[i]=parseInt(sCookie.substring(0,sCookie.indexOf(" ")));
else
stat[i]=parseInt(sCookie);
sCookie = sCookie.substring(sCookie.indexOf(" ")+1,sCookie.length);
}
/*
var c="";
for (i=0;i<29;i++)
c+=stat[i]+" ";
*/
//alert("'"+c+"'");
//sCookie = sCookie.substring(sCookie.indexOf(" ")+1,sCookie.length);
/*
<span class="infomsg">Attacker rolls 4 2 6 </span>
<span class="infomsg">Defender rolls 2 5 </span>
*/
var att = txt.substring(0,txt.indexOf("</span>"));
att = att.replace('<span class="infomsg">Attacker rolls ',"");
txt=txt.substring(txt.indexOf("</span>")+8,txt.length);
//alert("'"+att+"'");
//alert(txt);
var numa=new Array();
var i=0;
while(att.length>1)
{
var num=parseInt(att.substring(0,att.indexOf(" ")));
att=att.substring(att.indexOf(" ")+1,att.length);
stat[num+2]++;
numa[i]=num;
i++;
}
//alert("i="+i);
for(k=0;k<i-1;k++)
for(r=1;r<i;r++)
if(numa[k]>numa[r])
{
t=numa[k];
numa[k]=numa[r];
numa[r]=t;
}
att = txt.substring(0,txt.indexOf("</span>"));
att=att.substring(att.indexOf('<span class="infomsg">Defender rolls '),att.length);
att = att.replace('<span class="infomsg">Defender rolls ',"");
//alert("'"+att+"'");
var numd=new Array();
var j=0;
while(att.length>1)
{
var num=parseInt(att.substring(0,att.indexOf(" ")));
att=att.substring(att.indexOf(" ")+1,att.length);
//alert(att);
stat[num+8]++;
numd[j]=num;
j++;
}
//alert("j="+j);
for(k=0;k<j-1;k++)
for(r=1;r<j;r++)
if(numd[k]>numd[r])
{
t=numd[k];
numd[k]=numd[r];
numd[r]=t;
}
if(i>=2&&j>=2)
if(numa[i-1]>numd[j-1]&&numa[i-2]>numd[j-2])
{
stat[0]++;
if (i==3)
stat[15]++;
else
stat[20]++;
}
else if(numa[i-1]<=numd[j-1]&&numa[i-2]<=numd[j-2])
{
stat[2]++;
if (i==3)
stat[17]++;
else
stat[22]++;
}
else
{
stat[1]++;
if (i==3)
stat[16]++;
else
stat[21]++;
}
else
if(numa[i-1]>numd[j-1])
{
stat[0]++;
if (i==3)
stat[18]++;
else
if(i==2)
stat[23]++;
else
if(j==2)
stat[25]++;
else
stat[27]++;
}
else
{
stat[2]++;
if (i==3)
stat[19]++;
else
if(i==2)
stat[24]++;
else
if(j==2)
stat[26]++;
else
stat[28]++;
}
eraseCookie("conquerclub");
var c="";
for (i=0;i<29;i++)
c+=stat[i]+" ";
//alert("'"+c+"'");
createCookie("conquerclub",c,100);
}
function writeStats()
{
var statLen=25;
var stat=new Array();
var sCookie = readCookie("conquerclub");
if(sCookie==null)
sCookie="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0";
//alert(sCookie);
/*
num wins / num ties / num loses / att 1s / att 2s / att 3s / att 4s / att 5s / att 6s / def 1s / def 2s /
def 3s / def 4s / def 5s / def 6s / 3v2 win / 3v2 tie / 3v2 loss / 3v1 win / 3v1 loss / 2v2 win / 2v2 loss /
2v1 win / 2v1 loss / 1v2 win / 1v2 loss / 1v1 win / 1v1 loss
*/
for(i=0;i<29;i++)
{
if (sCookie.indexOf(" ")!=-1)
stat[i]=parseInt(sCookie.substring(0,sCookie.indexOf(" ")));
else
stat[i]=parseInt(sCookie);
sCookie = sCookie.substring(sCookie.indexOf(" ")+1,sCookie.length);
}
var attTotal=stat[3]+stat[4]+stat[5]+stat[6]+stat[7]+stat[8];
var defTotal=stat[9]+stat[10]+stat[11]+stat[12]+stat[13]+stat[14];
var stats="<p><table align=center style='width:100%;border:1px solid #FFF;background:#eee;' rules=rows>" +
"<tr style='font-weight:bold;'><td></td><td>Attacker dice distribution</td><td>Defender dice distribution</td></tr>";
for(k=0;k<6;k++)
{
stats+="<tr style='font-weight:bold;'><td>"+(k+1)+"s</td><td>";
for(i=0;i<statLen;i++)
if(4*stat[3+k]/attTotal*statLen>i)
stats+="<font color='blue'>█</font>";
else
stats+="<font color='red'>█</font>";
stats+=" " + stat[3+k] +" / "+attTotal+" ("+Math.round(stat[3+k]*10000/attTotal)/100+"%)</td><td>";
for(i=0;i<statLen;i++)
if(4*stat[9+k]/defTotal*statLen>i)
stats+="<font color='blue'>█</font>";
else
stats+="<font color='red'>█</font>";
stats+=" "+ stat[9+k] + " / "+defTotal+" ("+Math.round(stat[9+k]*10000/defTotal)/100+"%)</td></tr>";
}
stats+="</table>";
stats+="<p><table style='width:100%;border-spacing:0px;border-collapse: collapse;'><tr><td><table align=center style='width:100%;border:1px solid #FFF;background:#eee;' rules=rows>"+
"<tr style='font-weight:bold;'><td>Battle Outcomes</td></tr>"+
"<tr style='font-weight:bold;'><td>3v2 ";
for(i=0;i<statLen;i++)
if(i<stat[15]*statLen/(stat[15]+stat[16]+stat[17]))
stats+="<font color='blue'>█</font>";
else
if(i<(stat[15]+stat[16])*statLen/(stat[15]+stat[16]+stat[17]))
stats+="<font color='yellow'>█</font>";
else
stats+="<font color='red'>█</font>";
stats+=" "+stat[15]+" / "+stat[16]+" / "+stat[17]+"</td></tr><tr style='font-weight:bold;'><td>3v1 ";
for(i=0;i<statLen;i++)
if(i<stat[18]*statLen/(stat[18]+stat[19]))
stats+="<font color='blue'>█</font>";
else
stats+="<font color='red'>█</font>";
stats+=" "+stat[18]+" / "+stat[19]+"</td></tr><tr style='font-weight:bold;'><td>2v2 ";
for(i=0;i<statLen;i++)
if(i<stat[20]*statLen/(stat[20]+stat[21]+stat[22]))
stats+="<font color='blue'>█</font>";
else
if(i<(stat[20]+stat[21])*statLen/(stat[20]+stat[21]+stat[22]))
stats+="<font color='yellow'>█</font>";
else
stats+="<font color='red'>█</font>";
stats+=" "+stat[20]+" / "+stat[21]+" / "+stat[22]+"</td></tr><tr style='font-weight:bold;'><td>2v1 ";
for(i=0;i<statLen;i++)
if(i<stat[23]*statLen/(stat[23]+stat[24]))
stats+="<font color='blue'>█</font>";
else
stats+="<font color='red'>█</font>";
stats+=" "+stat[23]+" / "+stat[24]+"</td></tr><tr style='font-weight:bold;'><td>1v2 ";
for(i=0;i<statLen;i++)
if(i<stat[25]*statLen/(stat[25]+stat[26]))
stats+="<font color='blue'>█</font>";
else
stats+="<font color='red'>█</font>";
stats+=" "+stat[25]+" / "+stat[26]+"</td></tr><tr style='font-weight:bold;'><td>1v1 ";
for(i=0;i<statLen;i++)
if(i<stat[27]*statLen/(stat[27]+stat[28]))
stats+="<font color='blue'>█</font>";
else
stats+="<font color='red'>█</font>";
stats+=" "+stat[27]+" / "+stat[28]+"</td></tr></table>";
stats+="</td><td><table align=center style='width:100%;border:1px solid #FFF;background:#eee;' rules=rows>" +
"<tr style='font-weight:bold;'><td>Overall stats</td></tr>" +
"<tr style='font-weight:bold;'><td>Attacker threw "+attTotal+" dice.</td></tr>" +
"<tr style='font-weight:bold;'><td>Defender threw "+defTotal+" dice.</td></tr>" +
"<tr style='font-weight:bold;'><td>Wins / Ties / Loses ";
for(i=0;i<statLen;i++)
if(i<stat[0]*statLen/(stat[0]+stat[1]+stat[2]))
stats+="<font color='blue'>█</font>";
else
if(i<(stat[0]+stat[1])*statLen/(stat[0]+stat[1]+stat[2]))
stats+="<font color='yellow'>█</font>";
else
stats+="<font color='red'>█</font>";
stats+=" "+stat[0]+" / "+stat[1]+" / "+stat[2]+"</td></tr>"+
"<tr><td><font color='blue'>█████</font> Attacker wins</td></tr>" +
"<tr><td><font color='yellow'>█████</font> Attacker wins 1, defender wins 1</td></tr>" +
"<tr><td><font color='red'>█████</font> Defender wins</td></tr>" +
"</table></td></tr></table>";
return stats;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*---- Required ----*/
GM_addStyle('body { margin: 0; padding: 0; } div#middleColumn{ padding-top: 5px; } .player0 { font-weight: bold; }');
if( OPTIONS['colorblind'] )
GM_addStyle('.player1, .player2, .player3, .player4, .player5, .player6 { color: black !important; }' );
/*---- Focus Stuff ----*/
GM_addStyle(
'*:focus { -moz-outline: 2px solid ' + OPTIONS['focuscolor'] + ' ! important; -moz-outline-offset: 1px ! important; -moz-outline-radius: 5px ! important; }\n' +
'button:focus::-moz-focus-inner { border-color: transparent ! important; }\n' +
'button::-moz-focus-inner,\n' +
'input[type="reset"]::-moz-focus-inner,\n' +
'input[type="button"]::-moz-focus-inner,\n' +
'input[type="submit"]::-moz-focus-inner,\n' +
'input[type="file"] > input[type="button"]::-moz-focus-inner {\n' +
'border: 1px dotted transparent ! important;\n' +
'}\n' +
'textarea:focus, button:focus, select:focus, input:focus { -moz-outline-offset: -1px ! important; }\n' +
'input[type="radio"]:focus {-moz-outline-radius: 12px; -moz-outline-offset: 0px ! important; }\n' +
'a:focus { -moz-outline: 0 !important; -moz-outline-offset: 0 !important; -moz-outline-radius: 0 !important; }\n');
var theGame = new gm_ConquerClubGame(OPTIONS);