There are 48 previous versions of this script.
the source is over 100KB, syntax highlighting in the browser is too slow
// coding: utf-8
// ==UserScript==
// @name Ikariam v3 Empire Board
// @namespace empire-board.ikariam
// @version 171
// @author oliezekat
// @description Display population, resources, trading, transports, incomes, buildings, and army or fleet units overviews for each cities. Require Ikariam v.0.3.x server game. Support any countries/languages.
// @require http://userscripts.org/scripts/source/60774.user.js
// @include http://s*.ikariam.*/*
// @exclude http://support.ikariam.*/*
// @exclude http://*.ikariam.*/*?view=premium
// @exclude http://*.ikariam.*/*?view=premiumPayment
// ==/UserScript==
/**************************************************************************************************
LAST CHANGES:
Version 1.7.1:
- Support tavern level 39.
- Support town hall level 48.
- Fix while store more than one million of resources.
PREVIOUS CHANGES:
http://userscripts.org/topics/20976
Based on "Ikariam Alarm And Overview Table" script (for Ikariam v0.2.8)
http://userscripts.org/scripts/show/35995
**************************************************************************************************/
// Old global vars
var server;
var config;
var PROGRESS_BAR_MODE; //have to be a global variable
// New unique object
if (!EmpireBoard) var EmpireBoard = {};
EmpireBoard =
{
/* Requires modules */
Log: {},
DOM: {},
Str: {},
Ikariam: {},
DB: {},
Tooltip: {},
Updater: {},
StartTime: 0,
EndTime: 0,
LogEnabled: false,
/* Script metas */
ScriptName: 'Ikariam Empire Board',
Version: 171,
HomePage: '',
ScriptURL: '',
UserScriptsID: 41051
};
EmpireBoard.Init = function()
{
this.StartTime = new Date().getTime();
this.HomePage = 'http://userscripts.org/scripts/show/'+this.UserScriptsID;
this.ScriptURL = 'http://userscripts.org/scripts/source/'+this.UserScriptsID+'.user.js';
/* Init Log */
this.Log.Init(this);
this.Log._Enabled = this.LogEnabled;
this.Log.Add('Start...');
this.DOM.Init(this);
this.Str.Init(this);
this.Ikariam.Init(this);
this.DB.Init(this);
this.DB.Load_Options();
this.Updater.Init(this);
// Always create main div for add-ons which need to check version
var body = EmpireBoard.DOM.Get_First_Node("//body");
var span = document.createElement('div');
span.id = "EmpireBoard";
span.setAttribute("version", this.Version);
body.appendChild(span);
server = this.Ikariam.Host();
this.DB.Load();
this.Ikariam.Fetch_CitiesSelect(this.DB.OwnCities, false);
};
EmpireBoard.CheckScriptUpdate = function()
{
if ((this.DB.Options['LastCheckUpdate'] == undefined) || (this.DB.Options['LastCheckUpdate'] < this.StartTime - (1000 * 60 * 60 * 24)))
{
var self = this;
var ScriptURL = 'http://userscripts.org/scripts/source/'+this.UserScriptsID+'.meta.js?since='+this.StartTime;
this.Updater.Check(ScriptURL, function(availableVersion) { self._CompareScriptUpdate(availableVersion); });
}
else
{
this.Log.Add('Not need check update today');
}
};
EmpireBoard._CompareScriptUpdate = function(availableVersion)
{
this.Log.Add('Available version: '+availableVersion);
if (availableVersion != 0)
{
availableVersion = parseInt(availableVersion);
if ((availableVersion > this.Version) && ((this.DB.Options['AvailableVersion'] == undefined) || (availableVersion > this.DB.Options['AvailableVersion'])))
{
if (confirm("Do you want to install \""+this.ScriptName+"\" v. "+availableVersion+" ?"))
{
GM_openInTab(this.ScriptURL+'?version='+availableVersion+'.user.js');
}
}
this.DB.Options['AvailableVersion'] = availableVersion;
this.DB.Options['LastCheckUpdate'] = this.StartTime;
this.DB.Save_Options();
}
};
EmpireBoard.ViewIsBuildingTemple = function()
{
function reportTemple()
{
setViewRqTime('finances');
EmpireBoard.DB.Save();
}
var n = document.getElementById("inputWorkersSubmit");
n.addEventListener("click", reportTemple, false);
};
EmpireBoard.ViewIsMilitaryMovements = function()
{
config["movements"] = {};
function addMovement(cityID, movementID, FleetMovement)
{
if (config["movements"][cityID] == undefined) config["movements"][cityID] = {};
if (config["movements"][cityID][movementID] == undefined) config["movements"][cityID][movementID] = FleetMovement;
config["movements"][cityID][movementID].endTime = FleetMovement.time;
}
this.Ikariam.Fetch_FleetMovements(this.DB.FleetMovements);
var resMi = this.DOM.Get_Nodes("//div[@id='fleetMovements']//table[contains(@class, 'locationEvents')]/tbody/tr/td/img[contains(@src, 'mission_')]");
if (resMi.snapshotLength > 0)
{
for (var i=0; i < resMi.snapshotLength; i++)
{
var tr = resMi.snapshotItem(i).parentNode.parentNode;
var tds = tr.getElementsByTagName("td");
var fleetId = tds[1].id;
if ((fleetId != '') && (this.DB.FleetMovements[fleetId] != undefined))
{
var FleetMovement = this.DB.FleetMovements[fleetId];
var toOwn = false;
if ((this.DB.OwnCities[FleetMovement.tCityId] != undefined) && (FleetMovement.tCityId != FleetMovement.oCityId) && (this.DB.OwnCities[FleetMovement.tCityId].own == true))
{
toOwn = true;
}
// Values: deployarmy, deployfleet, plunder, blockade, defend, defend_port, trade, transport, occupy
if (FleetMovement.hostile == true)
{
}
else if (FleetMovement.own == true)
{
if (FleetMovement.mission == 'trade')
{
// Not military movement
}
else if (FleetMovement.mission == 'transport')
{
// Not military movement
if ((FleetMovement.hasAction == true) && (FleetMovement.hasGoods == true) && (FleetMovement.toLeft == false) && (FleetMovement.toRight == false) && (toOwn == true))
{
setViewRqTime('merchantNavy',0,FleetMovement.time);
}
}
else if (FleetMovement.mission == 'deployarmy')
{
addMovement(FleetMovement.oCityId, fleetId, FleetMovement);
if ((FleetMovement.toRight == true) && (toOwn == true))
{
this.Log.Add("Army "+fleetId+" will arrive to city["+FleetMovement.tCityId+"]");
setViewRqTime('cityMilitary-army', FleetMovement.tCityId, FleetMovement.time);
}
else if (FleetMovement.toLeft == true)
{
this.Log.Add("Army "+fleetId+" come back to city["+FleetMovement.oCityId+"]");
setViewRqTime('cityMilitary-army', FleetMovement.oCityId, FleetMovement.time);
}
}
else if (FleetMovement.mission == 'deployfleet')
{
addMovement(FleetMovement.oCityId, fleetId, FleetMovement);
if ((FleetMovement.toRight == true) && (toOwn == true))
{
this.Log.Add("Fleet "+fleetId+" will arrive to city["+FleetMovement.tCityId+"]");
setViewRqTime('cityMilitary-fleet', FleetMovement.tCityId, FleetMovement.time);
}
else if (FleetMovement.toLeft == true)
{
this.Log.Add("Fleet "+fleetId+" come back to city["+FleetMovement.oCityId+"]");
setViewRqTime('cityMilitary-fleet', FleetMovement.oCityId, FleetMovement.time);
}
}
else if (FleetMovement.mission == 'plunder')
{
addMovement(FleetMovement.oCityId, fleetId, FleetMovement);
if ((FleetMovement.hasGoods == true) && (FleetMovement.toLeft == false) && (FleetMovement.toRight == false))
{
setViewRqTime('merchantNavy',0,FleetMovement.time);
}
}
else
{
addMovement(FleetMovement.oCityId, fleetId, FleetMovement);
}
}
else
{
if (FleetMovement.mission == 'trade')
{
if ((toOwn == true) && (FleetMovement.toRight == true))
{
this.Log.Add("Foreign transport "+fleetId+" arrive to city["+FleetMovement.tCityId+"]");
setViewRqTime('branchOffice', FleetMovement.tCityId, FleetMovement.time);
}
}
else if (FleetMovement.mission == 'transport')
{
}
}
}
}
}
config.mAMMtime = this.StartTime;
};
EmpireBoard.ViewIsBuildingWorkshop = function()
{
// Search getCountdown()
var scripts = document.getElementsByTagName("script");
var found = false;
var sCode = '';
for (var j = 0; j < scripts.length; j++)
{
// search upgradeCountDown
var nScript = scripts[j];
sCode = nScript.innerHTML;
if (sCode.indexOf('upgradeCountdown') >= 0)
{
found = true;
break;
}
}
if (found == true)
{
// buildings under upgrading
var enddate = 0;
var currentdate = 0;
if (/enddate[^0-9]*([0-9]+)/.exec(sCode) != null)
{
enddate = parseFloat(RegExp.$1) * 1000;
}
if (/currentdate[^0-9]*([0-9]+)/.exec(sCode) != null)
{
currentdate = parseFloat(RegExp.$1) * 1000;
}
if (enddate != 0 && currentdate != 0)
{
setViewRqTime('workshop', city_idmainView, this.StartTime + (enddate - currentdate), true);
this.Log.Add('Workshop upgrade remaining time: '+enddate+' - '+currentdate+' = '+(enddate-currentdate)/1000+'s');
}
}
};
EmpireBoard.Set_Common_Styles = function()
{
var default_style = <><![CDATA[
#EmpireBoard {
width: 990px;
margin: -15px auto 20px;
}
#EmpireBoard div.Table {
margin-bottom: 5px;
}
#EmpireBoard table.Overview {
text-align: center;
background-color: #FDF7DD;
width: 100% !important;
border-collapse: collapse;
border-style: double; border-width: 3px; border-color: #CB9B6A;
}
#EmpireBoard table.Overview thead { background: #E7C680 url(skin/input/button.gif) repeat-x scroll 0 0;border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: #E7C680;}
#EmpireBoard table.Overview th.city_name,
#EmpireBoard table.Overview td.city_name { overflow: hidden; }
#EmpireBoard table.Overview th {
height: 22px;
width: auto;
padding: 1px;
padding-bottom: 2px;
padding-left: 3px;
color: #542C0F;
text-align: center !important;
font-weight: bold;
}
#EmpireBoard table.Overview th.city_name {width: 110px !important; max-width: 110px;}
#EmpireBoard.RtoL table.Overview th.city_name {}
#EmpireBoard table.Overview th.actions { border-left-color: #ECCF8E;border-left-width: 1px; border-left-style: solid;width: 47px; max-width: 47px; padding-left: 2px; padding-bottom: 3px; text-align: right !important;vertical-align: bottom;}
#EmpireBoard.RtoL table.Overview th.actions {border-right-color: #ECCF8E; border-right-width: 1px; border-right-style: solid;}
#EmpireBoard table.Buildings th.build_name0,
#EmpireBoard table.Buildings th.build_name1,
#EmpireBoard table.Buildings th.build_name2,
#EmpireBoard table.Buildings th.build_name3,
#EmpireBoard table.Buildings th.build_name4,
#EmpireBoard table.Buildings th.build_name5,
#EmpireBoard table.Buildings th.build_name6 { max-width: 30px; overflow: hidden; cursor: default;}
#EmpireBoard table.Buildings th.build_name2 { max-width: 50px;}
#EmpireBoard table.Buildings th.build_name3 { max-width: 65px;}
#EmpireBoard table.Buildings th.build_name4 { max-width: 80px;}
#EmpireBoard table.Buildings th.build_name5 { max-width: 95px;}
#EmpireBoard table.Buildings th.build_name6 { max-width: 110px;}
#EmpireBoard table.Buildings th.build_name7 { max-width: 125px;}
#EmpireBoard table.Army th.unit_name { max-width: 35px; overflow: hidden; cursor: default;}
#EmpireBoard table.Overview td {border-color: #ECCF8E; border-width: 1px; border-style: solid;}
#EmpireBoard table.Overview td { height: auto; color: #542C0F; line-height: 12px; min-width: 10px; vertical-align: top; text-align: right; padding: 1px;}
#EmpireBoard table.Buildings td {vertical-align: middle;}
#EmpireBoard table.Overview td.city_name { width: 110px; max-width: 110px;padding-left: 3px;text-align: left; }
#EmpireBoard.RtoL table.Overview td.city_name { text-align: right; }
#EmpireBoard table.Overview td.actions { text-align: right; }
#EmpireBoard.RtoL table.Overview td.actions { }
#EmpireBoard table.Overview th.actions img,
#EmpireBoard table.Overview td.actions img { margin-left: 1px; border: none; max-height: 15px;}
#EmpireBoard table.Overview tr.current {
background-color: #FEE8C8;
}
#EmpireBoard table.Overview .More {
font-size: 10px;
line-height: 10px !important;
height: 10px !important;
margin-top:-1px;
clear: both;
display: block;
cursor: default;
}
#EmpireBoard table.Overview tbody .More { color: #CB9B6A;}
/****************** progress bar styles *******************/
#EmpireBoard table.Overview table.myPercent {
height: 4px !important;
width: 92%;
background-color: !transparent !important;
margin-top: 1px;
margin-left: 3px;
margin-right: 2px;
}
#EmpireBoard table.Overview table.myPercent td {height: 4px !important;border-color: #FDF7DD; min-width: 0px !important; padding: 0px !important; background-color: #CB9B6A;}
#EmpireBoard table.Overview table.myPercent td.Normal { background-color: #73443E;}
#EmpireBoard table.Overview table.myPercent td.Warning { background-color: #8F1D1A;}
#EmpireBoard table.Overview table.myPercent td.AlmostFull { background-color: #B42521;}
#EmpireBoard table.Overview table.myPercent td.Full { background-color: #ff0000;}
#EmpireBoard table.Overview tfoot {
background-color: #FAEAC6;
}
#EmpireBoard table.Overview tfoot td {
border-top-width: 2px;
border-top-style: solid;
border-top-color: #CB9B6A;
font-weight: bold;
}
#EmpireBoard table.Overview th.lf,
#EmpireBoard table.Overview td.lf {
border-left-style: solid;
border-left-width: 2px;
border-left-color: #CB9B6A;
}
#EmpireBoard.RtoL table.Overview th.lf,
#EmpireBoard.RtoL table.Overview td.lf {
border-left-style: none;
border-right-style: solid;
border-right-width: 2px;
border-right-color: #CB9B6A;
}
#EmpireBoard p {text-align: left; display: block; width: 100% !important; }
#EmpireBoard.RtoL p {text-align: right;}
#EmpireBoard p.Caption { font-size: 11px}
/****************** alerts *******************/
#EmpireBoard sup {
vertical-align: top !important;
font-size: 10px;
line-height: 10px;
height: 10px;
}
#EmpireBoard .Bold,
#EmpireBoard .Brown,
#EmpireBoard .DarkRed,
#EmpireBoard .Red {font-weight: bold;}
#EmpireBoard .Green { color: green !important;}
#EmpireBoard .Brown { color: #8F1D1A !important;}
#EmpireBoard .DarkRed { color: #CC3300 !important;}
#EmpireBoard .Red { color: red !important;}
#EmpireBoard img.Safe { height: 11px; }
#EmpireBoard table.Overview td img.Safe {float: left; margin-left: 3px;}
/****************** footer *******************/
#EmpireBoardSettings {}
#EmpireBoardSettings td {border: none !important;}
#EmpireBoardSettings input.button {margin-right: 5px;}
#EmpireBoardAddons { float: left; text-align: left;}
#EmpireBoardAddons u { font-weight: bold; }
#EmpireBoardAddons li { list-style-type: disc; list-style-position: inside; padding-left: 15px; }
#EmpireBoard p.Footer {text-align: right; clear: both;}
#EmpireBoard.RtoL p.Footer {text-align: left;}
#EmpireBoard p.Footer .button {}
/****************** tooltip *******************/
div#EmpireBoardTooltip { position:absolute; z-index: 2000;}
.TTContent {padding: 3px; background-color: #FDF7DD; border-color: #BE8D53; border-width: 1px; border-top-width: 4px; border-style: solid; color: #542C0F;}
.TTTitle { font-weight: bold; background-color: #FAE0AE;padding: 3px; margin: -3px; margin-bottom:4px;}
.TTContent table tbody {background-color: #FAEAC6; border-bottom-width: 3px; border-bottom-color: #FDF7DD;border-bottom-style: solid;}
.TTContent table tfoot {background-color: #FAE0AE;}
.TTContent table td {padding: 2px; height: auto !important;}
.TTContent table .Small td {
padding-top: 0px;
font-size: 10px !important;
line-height: 10px !important;
}
]]></>.toXMLString();
GM_addStyle(default_style);
}
EmpireBoard.DB =
{
_Parent: null,
Prefix: '',
OwnCities: {},
FleetMovements: {},
Options: {}
};
EmpireBoard.DB.Init = function(parent, host)
{
this._Parent = parent;
if (host == undefined) host = this._Parent.Ikariam.Host();
var prefix = host;
prefix = prefix.replace('.ikariam.', '-');
prefix = prefix.replace('.', '-');
this.Prefix = prefix;
};
EmpireBoard.DB.Serialize = function(data)
{
return uneval(data);
};
EmpireBoard.DB.UnSerialize = function(data)
{
return eval(data);
};
EmpireBoard.DB.Load = function()
{
config = this.UnSerialize(getVar("config", ""));
if (config == null || config == undefined || config == "" || ("".config == "NaN"))
{
config = new Object();
}
if (config.cfg == undefined)
{
config.cfg = new Object();
}
};
EmpireBoard.DB.Load_Options = function()
{
this.Options = this.UnSerialize(GM_getValue(this.Prefix+'.Opt', false)) || {};
};
EmpireBoard.DB.Save = function()
{
setVar("config", this.Serialize(config));
};
EmpireBoard.DB.Save_Options = function()
{
GM_setValue(this.Prefix+'.Opt', this.Serialize(this.Options));
};
EmpireBoard.Ikariam =
{
_Parent: null,
_View: null,
_Tab: null,
_Host: null,
_Server: null,
_Language: null,
_Version: null,
_IsV031x: null,
_IsV032x: null,
_ActionRequest: null,
_currentCity: null,
_LocalizationStrings: null
};
EmpireBoard.Ikariam.Init = function(parent)
{
this._Parent = parent;
};
EmpireBoard.Ikariam.View = function()
{
if (this._View == null)
{
this._View = '';
// Fetch view name
try
{
this._View = document.getElementsByTagName("body")[0].id;
}
catch (e)
{
var url_view = /[\?&]view=([a-zA-Z0-9\-_]+)/.exec(document.URL);
if (url_view != null) this._View = RegExp.$1;
}
}
return this._View;
};
EmpireBoard.Ikariam.Host = function()
{
if (this._Host == null)
{
this._Host = '';
this._Host = document.location.host;
}
return this._Host;
};
EmpireBoard.Ikariam.Server = function(host)
{
if (this._Server == null)
{
if (host == undefined) host = this.Host();
this._Server = '';
var parts = host.split(".");
var idx = 0;
if (parts[0] == 'www') idx++;
this._Server = parts[idx];
}
return this._Server;
};
EmpireBoard.Ikariam.Language = function()
{
if (this._Language == null)
{
this._Language = '';
var sCode = '';
var scripts = document.getElementsByTagName("script");
for (var j = 0; j < scripts.length; j++)
{
var nScript = scripts[j];
sCode = nScript.innerHTML;
if (sCode.indexOf('LocalizationStrings') >= 0)
{
break;
}
}
if (sCode != '')
{
var reg = /LocalizationStrings\['language'\]\s+=\s+'(.+)';/;
var res = reg.exec(sCode);
if (res != null) this._Language = res[1];
}
}
return this._Language;
};
EmpireBoard.Ikariam.Version = function()
{
// Requires: DOM
if (this._Version == null)
{
this._Version = '';
this._Version = this._Parent.DOM.Get_First_Node_TextContent("//div[@id='GF_toolbar']//li[@class='version']//span[@class='textLabel']",'');
}
return this._Version;
};
// NB: return true if higher than 0.3.1
EmpireBoard.Ikariam.Is_Version_031x = function()
{
// Requires: Str
if (this._IsV031x == null)
{
if (this._Parent.Str.Compare_Versions('0.3.1', this.Version()) >= 0)
{
this._IsV031x = true;
this._Parent.Log.Add("Ikariam server is v.0.3.1 or higher");
}
else
{
this._IsV031x = false;
}
}
return this._IsV031x;
};
// NB: return true if higher than 0.3.2
EmpireBoard.Ikariam.Is_Version_032x = function()
{
// Requires: Str
if (this._IsV032x == null)
{
if (this._Parent.Str.Compare_Versions('0.3.2', this.Version()) >= 0)
{
this._IsV032x = true;
this._Parent.Log.Add("Ikariam server is v.0.3.2 or higher");
}
else
{
this._IsV032x = false;
}
}
return this._IsV032x;
};
EmpireBoard.Ikariam.Tab = function()
{
if (this._Tab == null)
{
this._Tab = '';
var url_view = /[\?&]tab=([a-zA-Z0-9\-_]+)/.exec(document.URL);
if (url_view != null) this._Tab = RegExp.$1;
}
return this._Tab;
};
EmpireBoard.Ikariam.Trim_Coords = function(str)
{
return this._Parent.Str.Trim_Accodances(str);
};
EmpireBoard.Ikariam.City_Object = function()
{
var City = new Object;
City.id = 0;
City.name = '';
//City.playername = '';
//City.islandid = 0;
City.knownTime = new Date().getTime();
//City.own = false;
//City.occupied = false;
//City.deployed = false;
//City.selected = false;
return City;
};
EmpireBoard.Ikariam.Parse_Coords = function(str)
{
var res = null;
if ((str != undefined) && (str != null) && (str != ''))
{
var resReg = /(\[[0-9:]+\])/.exec(str);
if (resReg != null)
{
res = resReg[1];
}
}
return res;
};
EmpireBoard.Ikariam.Fetch_CitiesSelect = function(database, includeForeign)
{
// Requires: DOM, Str
if (database == undefined) database = {};
if (includeForeign == undefined) includeForeign = false; // not used yet
var Options = this._Parent.DOM.Get_Nodes("//select[@id='citySelect']/option");
if (Options != null)
{
for (var i=0; i < Options.snapshotLength; i++)
{
var Option = Options.snapshotItem(i);
// Occupied city ?
var isOccupied = false;
if (this._Parent.DOM.Has_ClassName(Option,'occupiedCities'))
{
isOccupied = true;
}
// Deployed troops into allied city
var isDeployed = false;
if (this._Parent.DOM.Has_ClassName(Option,'deployedCities'))
{
isDeployed = true;
}
if ((includeForeign == false) && ((isOccupied == true) || (isDeployed == true))) continue;
var CityId = parseInt(Option.value);
if (database[CityId] == undefined)
{
database[CityId] = new this.City_Object();
}
database[CityId].id = CityId;
database[CityId].name = this._Parent.Str.Trim(this.Trim_Coords(Option.textContent));
if (isOccupied == true)
{
database[CityId].occupied = true;
}
else if (isDeployed == true)
{
database[CityId].deployed = true;
}
else
{
database[CityId].own = true;
}
if (Option.selected == true) database[CityId].selected = true;
//this._Parent.Log.Add('Fetch current city ['+CityId+']: '+database[CityId].name);
}
}
return database;
};
EmpireBoard.Ikariam.ActionRequest = function()
{
if (this._ActionRequest == null)
{
this._ActionRequest = this._Parent.DOM.Get_First_Node_Value("//form[@id='changeCityForm']//input[@type='hidden' and @name='actionRequest']" ,'');
}
return this._ActionRequest;
};
EmpireBoard.Ikariam.Get_Happiness_ImgSrc = function(growth)
{
if (growth == undefined) growth = 0;
var imagen = '';
var tag = '';
if (growth < -6 )
{
imagen = 'outraged';
}
else if (growth < 0)
{
imagen = 'sad';
}
else if (growth < 1)
{
imagen = 'neutral';
}
else if (growth < 6)
{
imagen = 'happy';
}
else
{
imagen = 'ecstatic';
}
//tag = 'skin/smilies/' + imagen + '.gif';
tag = 'skin/smilies/' + imagen + '_x32.gif';
return tag;
};
EmpireBoard.Ikariam.Resource_Capacity = function(ResType, WarehouseLevel)
{
if (ResType == undefined) ResType = 'wine';
if (WarehouseLevel == undefined) WarehouseLevel = 0;
var result = 0;
if (this.Is_Version_031x() == true)
{
result = 1500;
}
else
{
if (ResType == 'wood')
{
result = 3000;
}
else
{
result = 1500;
}
}
result = result + (WarehouseLevel * 8000);
return result;
};
EmpireBoard.Ikariam.Resource_SafeCapacity = function(ResType, WarehouseLevel)
{
if (ResType == undefined) ResType = 'wine';
if (WarehouseLevel == undefined) WarehouseLevel = 0;
var result = 0;
if (this.Is_Version_031x() == true)
{
result = 100;
result = result + (WarehouseLevel * 80);
}
else
{
if (ResType == 'wood')
{
result = 100;
result = result + (WarehouseLevel * 160);
}
else
{
result = 50;
result = result + (WarehouseLevel * 80);
}
}
return result;
};
EmpireBoard.Ikariam.FleetMovement_Object = function()
{
var FleetMovement = new Object;
//FleetMovement.own = false;
//FleetMovement.hostile = false;
FleetMovement.time = 0;
//FleetMovement.hasFleet = false;
//FleetMovement.hasGoods = false;
//FleetMovement.hasArmy = false;
//FleetMovement.oCityId = 0;
//FleetMovement.toLeft = false;
//FleetMovement.mission = '';
// Values: deployarmy, deployfleet, plunder, blockade, defend, defend_port, trade, transport, occupy
//FleetMovement.toRight = false;
//FleetMovement.tCityId = 0;
//FleetMovement.hasAction = false;
return FleetMovement;
};
EmpireBoard.Ikariam.Fetch_FleetMovements = function(database)
{
// Require: DOM, Str
var StartTime = new Date().getTime();
this._Parent.Log.Add('Start fetch movements...');
if (database == undefined) database = {};
function grabCityID(rootElt)
{
var resID = 0;
var alinks = rootElt.getElementsByTagName("a");
for (var k=0; k < alinks.length; k++)
{
var resReg = /[\?&]{1}cityId=([0-9]+)&?/i.exec(alinks[k].href);
if (resReg != null)
{
resID = parseInt(resReg[1]);
break;
}
}
return resID;
}
var resMi = this._Parent.DOM.Get_Nodes("//div[@id='fleetMovements']//table[contains(@class, 'locationEvents')]/tbody/tr/td/img[contains(@src, 'mission_')]");
if (resMi.snapshotLength > 0)
{
this._Parent.Log.Add('Found '+resMi.snapshotLength+' fleets');
// heures
var mTimers = {};
var scripts = document.getElementsByTagName("script");
for (var j = 0; j < scripts.length; j++)
{
// search getCountdown
var nScript = scripts[j];
var sCode = nScript.innerHTML;
if (sCode.indexOf('getCountdown') >= 0)
{
var aCodeLines = sCode.split(';');
for (var i=0; i < aCodeLines.length-1; i++)
{
if (aCodeLines[i].indexOf('getCountdown') >= 0)
{
var sValues = aCodeLines[i].substring(aCodeLines[i].indexOf('{')+1,aCodeLines[i].indexOf('}'));
var sParts = sValues.split(',');
var sPart0 = sParts[0].split(':');
var enddate = 1000*parseInt(this._Parent.Str.Trim(sPart0[1]));
var sPart1 = sParts[1].split(':');
var currentdate = 1000*parseInt(this._Parent.Str.Trim(sPart1[1]));
var sID = sParts[2].substring(sParts[2].indexOf('"')+1,sParts[2].indexOf('"',sParts[2].indexOf('"')+2));
mTimers[sID] = StartTime + (enddate - currentdate);
}
}
}
}
for (var i=0; i < resMi.snapshotLength; i++)
{
var tr = resMi.snapshotItem(i).parentNode.parentNode;
var tds = tr.getElementsByTagName("td");
var fleetId = tds[1].id;
if (fleetId != '')
{
if (database[fleetId] == undefined)
{
database[fleetId] = new this.FleetMovement_Object();
}
database[fleetId].own = this._Parent.DOM.Has_ClassName(tr,'own');
database[fleetId].hostile = this._Parent.DOM.Has_ClassName(tr,'hostile');
if (mTimers[fleetId] != undefined)
{
database[fleetId].time = mTimers[fleetId];
}
else
{
database[fleetId].time = mTimers['nexEventETA1'];
}
var payload = tds[2].innerHTML;
// Has fleet ?
var hasFleet = false;
if (payload.indexOf('ship_ram') > 0)
{
hasFleet = true;
}
else if (payload.indexOf('ship_ballista') > 0)
{
hasFleet = true;
}
else if (payload.indexOf('ship_flamethrower') > 0)
{
hasFleet = true;
}
else if (payload.indexOf('ship_catapult') > 0)
{
hasFleet = true;
}
else if (payload.indexOf('ship_steamboat') > 0)
{
hasFleet = true;
}
else if (payload.indexOf('ship_mortar') > 0)
{
hasFleet = true;
}
else if (payload.indexOf('ship_submarine') > 0)
{
hasFleet = true;
}
if (hasFleet == true)
{
database[fleetId].hasFleet = true;
}
// Has Goods ?
var hasGoods = false;
if (hasFleet == true)
{
// Impossible
}
else if (payload.indexOf('wood') > 0)
{
hasGoods = true;
}
else if (payload.indexOf('wine') > 0)
{
hasGoods = true;
}
else if (payload.indexOf('marble') > 0)
{
hasGoods = true;
}
else if (payload.indexOf('glass') > 0)
{
hasGoods = true;
}
else if (payload.indexOf('sulfur') > 0)
{
hasGoods = true;
}
if (hasGoods == true)
{
database[fleetId].hasGoods = true;
}
// Has Army ?
var hasArmy = false;
if (hasFleet == true)
{
// Impossible
}
else if (payload.indexOf('slinger') > 0)
{
hasArmy = true;
}
else if (payload.indexOf('swordsman') > 0)
{
hasArmy = true;
}
else if (payload.indexOf('phalanx') > 0)
{
hasArmy = true;
}
else if (payload.indexOf('spearman') > 0)
{
hasArmy = true;
}
else if (payload.indexOf('archer') > 0)
{
hasArmy = true;
}
else if (payload.indexOf('marksman') > 0)
{
hasArmy = true;
}
else if (payload.indexOf('gyrocopter') > 0)
{
hasArmy = true;
}
else if (payload.indexOf('steamgiant') > 0)
{
hasArmy = true;
}
else if (payload.indexOf('bombardier') > 0)
{
hasArmy = true;
}
else if (payload.indexOf('ram') > 0)
{
hasArmy = true;
}
else if (payload.indexOf('catapult') > 0)
{
hasArmy = true;
}
else if (payload.indexOf('mortar') > 0)
{
hasArmy = true;
}
else if (payload.indexOf('medic') > 0)
{
hasArmy = true;
}
else if (payload.indexOf('cook') > 0)
{
hasArmy = true;
}
if (hasArmy == true)
{
database[fleetId].hasArmy = true;
}
database[fleetId].oCityId = grabCityID(tds[3]);
database[fleetId].toLeft = (tds[4].innerHTML != '') ? true : false;
database[fleetId].mission = /mission_([_a-z]+)\.[a-z]+/i.exec(resMi.snapshotItem(i).src)[1];
database[fleetId].toRight = (tds[6].innerHTML != '') ? true : false;
database[fleetId].tCityId = grabCityID(tds[7]);
database[fleetId].hasAction = (tds[8].innerHTML != '') ? true : false;
//this._Parent.Log.Add('Detect fleet['+fleetId+']: oCityId='+database[fleetId].oCityId+', tCityId='+database[fleetId].tCityId+', time='+database[fleetId].time+', mission='+database[fleetId].mission);
}
}
}
return database;
};
EmpireBoard.Ikariam.currentCity = function(valueName,sectionName)
{
if (this._currentCity == null)
{
if (unsafeWindow.IKARIAM != undefined)
{
if (unsafeWindow.IKARIAM.currentCity != undefined)
{
this._currentCity = unsafeWindow.IKARIAM.currentCity;
}
}
}
if (sectionName == undefined)
{
if (valueName == undefined)
{
return this._currentCity;
}
else
{
if (this._currentCity[valueName] == undefined)
{
return 0;
}
else
{
return this._currentCity[valueName];
}
}
}
else
{
if ((this._currentCity[sectionName] == undefined) || (this._currentCity[sectionName][valueName] == undefined))
{
return 0;
}
else
{
return this._currentCity[sectionName][valueName];
}
}
};
EmpireBoard.DOM =
{
_Parent: null,
};
EmpireBoard.DOM.Init = function(parent)
{
this._Parent = parent;
};
EmpireBoard.DOM.Get_Nodes = function(query)
{
return document.evaluate(query, document, null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
};
EmpireBoard.DOM.Get_First_Node = function(path)
{
var value = this.Get_Nodes(path);
if (value.snapshotLength >= 1)
{
return value.snapshotItem(0);
}
return null;
};
EmpireBoard.DOM.Get_Last_Node = function(path)
{
var value = this.Get_Nodes(path);
if (value.snapshotLength >= 1)
{
return value.snapshotItem(value.snapshotLength-1);
}
return null;
};
EmpireBoard.DOM.Get_First_Node_Value = function(path, defaultValue)
{
var value = this.Get_First_Node(path);
if (value != null)
{
return value.value;
}
else return defaultValue;
};
EmpireBoard.DOM.Get_Last_Node_Value = function(path, defaultValue)
{
var value = this.Get_Last_Node(path);
if (value != null)
{
return value.value;
}
else return defaultValue;
};
EmpireBoard.DOM.Get_First_Node_TextContent = function(path, defaultValue)
{
var value = this.Get_First_Node(path);
if (value != null)
{
return value.textContent;
}
else return defaultValue;
};
EmpireBoard.DOM.Has_ClassName = function(oElm, strClassName)
{
var arrayClassNames = oElm.className.split(' ');
var Found = false;
var arrayClassNamesLength = arrayClassNames.length;
for (var k=0; k<arrayClassNamesLength; k++)
{
if (arrayClassNames[k] == strClassName)
{
Found = true;
break;
}
}
return Found;
};
/* Lib for strings processes */
EmpireBoard.Str =
{
_Parent: null
};
EmpireBoard.Str.Init = function(parent)
{
this._Parent = parent;
};
EmpireBoard.Str.Trim = function(str)
{
if (str != undefined)
{
str = str.replace(/ /gi, " ");
str = str.replace(/\t/gi, " ");
str = str.replace(/\v/gi, "");
str = str.replace(/\f/gi, "");
str = str.replace(/\n/gi, "");
str = str.replace(/\r/gi, "");
//str = str.replace(/\e/gi, "");
str = str.replace(/\s/gi, " ");
while(str.charAt(0) == (" "))
{
str = str.substring(1);
}
while(str.charAt(str.length-1) == " " )
{
str = str.substring(0,str.length-1);
}
}
return str;
};
EmpireBoard.Str.Trim_Brackets = function(str)
{
str = str.replace(/\(.+\)/gi, "");
return str;
};
EmpireBoard.Str.Trim_Accodances = function(str)
{
str = str.replace(/\[.+\]/gi, "");
return str;
};
EmpireBoard.Str.TwoDigit = function(val)
{
val = parseInt(val);
if (val == 0)
{
val = "00";
}
else if (val < 10)
{
return "0"+val;
}
return val;
};
/*
v1 & v2 as "v.00.00.00 0000"
return 0 if v2 = v1
1 if v2 > v1
-1 if v2 < v1
*/
EmpireBoard.Str.Compare_Versions = function(v1, v2)
{
var result = 0;
// remove "v."
v1 = v1.replace(/v\./gi, "");
v2 = v2.replace(/v\./gi, "");
// build number use space separator
v1 = v1.replace(/ /gi, ".");
v2 = v2.replace(/ /gi, ".");
// Parse numbers
var vn1 = v1.split('.');
var vn2 = v2.split('.');
// Convert as integer
for (var i = 0; i < vn1.length; i++)
{
vn1[i] = parseInt(vn1[i]);
}
for (var j = 0; j < vn2.length; j++)
{
vn2[j] = parseInt(vn2[j]);
}
for (var k = 0; k < vn1.length; k++)
{
if (vn2[k] == undefined)
{
if (vn1[k] > 0) result = -1;
break;
}
else if (vn2[k] > vn1[k])
{
result = 1;
break;
}
else if (vn2[k] < vn1[k])
{
result = -1;
break;
}
}
if ((result == 0) && (vn2.length > vn1.length))
{
if (vn2[vn1.length] > 0)
{
result = 1;
}
else if (vn2[vn2.length-1] > 0)
{
result = 1;
}
}
//this._Parent.Log.Add(v1+" vs "+v2+" = "+result);
return result;
};
EmpireBoard.Str.To_Integer = function(str, defaultValue)
{
// Support signed integers
var temp = ""+str;
temp = temp.replace(/[^-0-9]+/g, "");
temp = parseInt(temp);
if (defaultValue != undefined && (temp == undefined || (""+temp == "NaN")))
{
return defaultValue;
}
return temp;
};
// decimalPoint = '.' or ','
EmpireBoard.Str.To_Float = function(str, defaultValue, decimalPoint)
{
if (decimalPoint == undefined) decimalPoint = '.';
// Support signed integers
var temp = ""+str;
temp = temp.replace(/[^-0-9\.]+/g, "");
temp = Number(temp);
if (defaultValue != undefined && (temp == undefined || (""+temp == "NaN")))
{
return defaultValue;
}
return temp;
};
EmpireBoard.Str.FormatBigNumber = function(num, alwaysShowSign)
{
var s = ""+num;
if (num == undefined || s == "NaN" || s == "-")
{
return "-";
}
else if (num == "?")
{
return num;
}
var negative = "";
if (s.substring(0, 1) == "-")
{
negative = "-";
s = s.substring(1);
}
else if (alwaysShowSign == true)
{
negative = "+";
}
var i = s.length-3;
while (i > 0)
{
s = s.substring(0, i) + "." + s.substring(i);
i -= 3;
}
return negative + s;
};
EmpireBoard.Log =
{
_Parent: null,
_Enabled: false
};
EmpireBoard.Log.Init = function(parent)
{
this._Parent = parent;
};
EmpireBoard.Log.Add = function(msg)
{
if (this._Enabled == true)
{
GM_log(msg);
}
};
EmpireBoard.Updater =
{
_Parent: null,
_ScriptURL: '',
_availableVersion: 0
};
EmpireBoard.Updater.Init = function(parent)
{
this._Parent = parent;
};
// CallBackFct function receive available version number (or null value if failed) as argument
EmpireBoard.Updater.Check = function(ScriptURL, CallBackFct)
{
this._availableVersion = 0;
this._ScriptURL = ScriptURL;
var self = this;
GM_xmlhttpRequest({
method: "GET",
url: ScriptURL,
headers: { Accept:"text/javascript; charset=UTF-8" },
overrideMimeType: "application/javascript; charset=UTF-8",
onload: function(response) { self._ParseScript(response, CallBackFct); }
});
};
EmpireBoard.Updater._ParseScript = function(response, CallBackFct)
{
var availableVersion = 0;
if (response.status == 200)
{
var resReg = /@version\s+(\d+)/.exec(response.responseText);
if (resReg != null)
{
availableVersion = resReg[1];
}
}
this._availableVersion = availableVersion;
if (typeof CallBackFct == 'function')
{
CallBackFct.call(this._Parent, availableVersion, response);
}
};
EmpireBoard.Init();
function getCfgValue(key, defaultValue) {
return ((config.cfg != undefined && config.cfg[key] != undefined) ? config.cfg[key] : defaultValue);
}
function getCfgValueNonEmpty(key, defaultValue) {
return ((config.cfg != undefined && config.cfg[key] != undefined && config.cfg[key] != "") ? config.cfg[key] : defaultValue);
}
var language;
function setLanguage() {
var arr = server.split("\.");
language = arr[arr.length - 1];
if (language == "com" && arr.length == 4) { //for example: http://s1.ba.ikariam.com
language = arr[1];
}
var l = getCfgValueNonEmpty("LANGUAGE", language);
if (l != undefined) {
language = l;
}
}
setLanguage();
var tavernWineUsage = [0, 4, 8, 13, 18, 24, 30, 37, 44, 51, 60, 68, 78, 88, 99, 110, 122, 136,150,165,180,197,216,235,255,277,300,325,351,378,408,439,472,507,544,584,626,670,717,766];
var townHallSpaces = [0, 60, 96, 142, 200, 262, 332, 410, 492, 580, 672, 768, 870, 976, 1086, 1200, 1320, 1440, 1566, 1696, 1828, 1964, 2102, 2246, 2390, 2540, 2690, 2845, 3003, 3163, 3326, 3492, 3710, 3880, 4054, 4230, 4410, 4590, 4774, 4960, 5148, 5340, 5532, 5728, 5926, 6126, 6328, 6534, 6760];
var buildings;
var texts;
var langtype;
function getLocalizedTexts() {
if (language == "de") { //german translation, thanks to Schneppi & xkaaay
langtype = "";
buildings = {
"townHall" : ["Rathaus", "Rathaus"],
"temple" : ["Temple", "Temple"],
"academy" : ["Academie", "Academie"],
"port" : ["Handelshafen", "Handelshafen"],
"shipyard" : ["Schiffswerft", "Schiffswerft"],
"warehouse" : ["Lagerhaus", "Lagerhaus"],
"wall" : ["Stadtmauer", "Stadtmauer"],
"tavern" : ["Taverne", "Taverne"],
"museum" : ["Museum", "Museum"],
"palace" : ["Palast", "Palast"],
"palaceColony" : ["Statthaltersitz", "Statthaltersitz"],
"embassy" : ["Botschaft", "Botschaft"],
"branchOffice" : ["Kontor", "Kontor"],
"safehouse" : ["Versteck", "Versteck"],
"barracks" : ["Kaserne", "Kaserne"],
"workshop" : ["Erfinderwerkstatt", "Erfinderwerkstatt"],
"carpentering" : ["Zimmerei", "Zimmerei"],
"forester" : ["Forsthaus", "Forsthaus"],
"stonemason" : ["Steinmetz", "Steinmetz"],
"glassblowing" : ["Glasbläserei", "Glasbläserei"],
"winegrower" : ["Winzerei", "Winzerei"],
"alchemist" : ["Alchimistenturm", "Alchimistenturm"],
"architect" : ["Architekturbüro", "Architekturbüro"],
"optician" : ["Optiker", "Optiker"],
"vineyard" : ["Kelterei", "Kelterei"],
"fireworker" : ["Feuerwerksplatz", "Feuerwerksplatz"]
};
texts = {
"cityName" : "Stadtname",
"currentlyBuilding" : "Zur Zeit im Bau",
"summary" : "Gesamt:",
"hide_settings" : "Verstecke Optionen",
"show_settings" : "Zeige Optionen",
"Population" : "Bevölkerung",
"Research": "Research",
"finishedBuilding" : "Bau abgeschlossen",
"Incomes" : "Einkommen",
"Trading" : "Handel",
"Wood" : "Baumaterial",
"Wine" : "Wein",
"Marble" : "Marmor",
"Crystal" : "Kristallglas",
"Sulfur" : "Schwefel"
};
} else if (language == "sl") { //Slovenian translation, thanks to Americano
langtype = "";
buildings = {
"townHall" : ["Mestna hiša", "Mestna hiša"],
"academy" : ["Akademija", "Akademija"],
"port" : ["Trgovska luka", "Trgovska luka"],
"shipyard" : ["Ladjedelnica", "Ladjedelnica"],
"warehouse" : ["Skladišče", "Skladišče"],
"wall" : ["Obzidje", "Obzidje"],
"tavern" : ["Krčma", "Krčma"],
"museum" : ["Muzej", "Muzej"],
"palace" : ["Palača", "Palača"],
"palaceColony" : ["Guvernerjeva rezidenca", "Guvernerjeva rezidenca"],
"embassy" : ["Ambasada", "Ambasada"],
"branchOffice" : ["Tržnica", "Tržnica"],
"safehouse" : ["Skrivališče", "Skrivališče"],
"barracks" : ["Barake", "Barake"],
"workshop" : ["Delavnica", "Delavnica"],
"carpentering" : ["Tesar", "Tesar"],
"forester" : ["Gozdar", "Gozdar"],
"stonemason" : ["Kamnoseška delavnica", "Kamnoseška delavnica"],
"glassblowing" : ["Steklopihač", "Steklopihač"],
"winegrower" : ["Vinogradnik", "Vinogradnik"],
"alchemist" : ["Stolp alkimista", "Stolp alkimista"],
"architect" : ["Pisarna arhitekta", "Pisarna arhitekta"],
"optician" : ["Optika", "Optika"],
"vineyard" : ["Vinska preša", "Vinska preša"],
"fireworker" : ["Testno območje ognjemetov", "Testno območje ognjemetov"]
};
texts = {
"cityName" : "Ime mesta",
"currentlyBuilding" : "Se nadgrajuje",
"summary" : "Skupno:",
"hide_settings" : "Skrij nastavitve",
"show_settings" : "Pokaži nastavitve",
"Population" : "Prebivalstvo",
"Research": "Raziskave",
"finishedBuilding" : "Zgradba končana",
"Incomes" : "Prihodki mesta",
"Trading" : "Trgovanje",
"Wood" : "Gradbeni material",
"Wine" : "Vino",
"Marble" : "Marmor",
"Crystal" : "Kristal",
"Sulfur" : "Žveplo"
};
} else if (language == "se") { // thank Dinfur
langtype = ""; // Set "lf" for Rigth-to-Left languages, or leave blank
buildings = {
"townHall" : ["Rådhus", "Rådhus"],
"temple" : ["Temple", "Temple"],
"academy" : ["Akademi", "Akademi"],
"port" : ["Handelshamn", "Hamn"],
"shipyard" : ["Skeppsvarv", "Varv"],
"warehouse" : ["Lagerlokal", "Lager"],
"wall" : ["Stadsmur", "Mur"],
"tavern" : ["Taverna", "Taverna"],
"museum" : ["Museum", "Museum"],
"palace" : ["Palats", "Palats"],
"palaceColony" : ["Guvernörsresidens", "Guvernör"],
"embassy" : ["Ambassad", "Ambassad"],
"branchOffice" : ["Handelsstation", "Handel"],
"safehouse" : ["Gömställe", "Gömställe"],
"barracks" : ["Kasern", "Kasern"],
"workshop" : ["Verkstad", "Verkstad"],
"carpentering" : ["Snickare", "Snickare"],
"forester" : ["Skogsvaktare", "Skog"],
"stonemason" : ["Stenhuggare", "Sten"],
"glassblowing" : ["Glasblåsare", "Glas"],
"winegrower" : ["Vinodlare", "Vin"],
"alchemist" : ["Alkemist", "Alkemist"],
"architect" : ["Arkitekt", "Arkitekt"],
"optician" : ["Optiker", "Optiker"],
"vineyard" : ["Vinpress", "Vin"],
"fireworker" : ["Fyrverkerifabrik", "Fyrverk."]
};
texts = {
"cityName": "Stadsnamn", "currentlyBuilding": "Bygger nu", "summary": "Summering:",
"hide_settings": "Göm inställningar", "show_settings": "Visa inställningar",
"Population": "Befolkning",
"Research": "Research",
"finishedBuilding": "Byggt klart","Incomes":"Inkomster","Trading":"Handlar",
"Wood": "Trä", "Wine": "Vin", "Marble": "Marmor", "Crystal": "Kristall", "Sulfur": "Svavel"
};
} else if (language == "fi") { //Finnish translation by DeFe
langtype = "";
buildings = {
"townHall" : ["Kaupungintalo", "K. Talo"],
"temple" : ["Temple", "Temple"],
"academy" : ["Akatemia", "Akatemia"],
"port" : ["Kauppasatama", "Satama"],
"shipyard" : ["Telakka", "Telakka"],
"warehouse" : ["Varasto", "Varasto"],
"wall" : ["Muuri", "Muuri"],
"tavern" : ["Taverna", "Taverna"],
"museum" : ["Museo", "Museo"],
"palace" : ["Palatsi", "Palatsi"],
"palaceColony" : ["Kuvernöörin asunto", "Kuvernööri"],
"embassy" : ["Lähetystö", "Lähetystö"],
"branchOffice" : ["Kauppapaikka", "Kauppapaikka"],
"safehouse" : ["Piilopaikka", "Piilopaikka"],
"barracks" : ["Kasarmi", "Kasarmi"],
"workshop" : ["Paja", "Paja"],
"carpentering" : ["Puusepän Paja", "Puuseppä"],
"forester" : ["Metsänhoitaja", "Metsänhoitaja"],
"stonemason" : ["Kivenhakkaaja", "Kivenhakkaaja"],
"glassblowing" : ["Lasinpuhaltaja", "Lasinpuhaltaja"],
"winegrower" : ["Viinitarhuri", "Viinitarhuri"],
"alchemist" : ["Alkemistin Torni", "Alkemisti"],
"architect" : ["Arkkitehdin Toimisto", "Arkkitehti"],
"optician" : ["Optikko", "Optikko"],
"vineyard" : ["Viinipaino", "Viinipaino"],
"fireworker" : ["Ilotulite Testialue", "Testialue"]
};
texts = {
"cityName": "Kaupungin nimi", "currentlyBuilding": "Rakentumassa", "summary": "Yhteenveto:",
"hide_settings": "Piilota asetukset", "show_settings": "Näytä asetukset",
"Population": "Populaatio",
"Research": "Research",
"finishedBuilding": "Rakennus valmis","Incomes":"Tulot","Trading":"kaupankäynti",
"Wood": "Puu", "Wine": "Viini", "Marble": "Marmori", "Crystal": "Kristalli", "Sulfur": "Rikki"
};
} else if (language == "tw") { //traditional chinese translation by Whiskers
langtype = "";
buildings = {
"townHall" : ["市政府", "市府"],
"temple" : ["Temple", "Temple"],
"academy" : ["學院", "學院"],
"port" : ["港口", "港口"],
"shipyard" : ["船塢", "船塢"],
"warehouse" : ["倉庫", "倉庫"],
"wall" : ["城牆", "城牆"],
"tavern" : ["酒館", "酒館"],
"museum" : ["博物館", "博物"],
"palace" : ["皇宫", "皇宫"],
"palaceColony" : ["總督府", "總督"],
"embassy" : ["大使館", "使館"],
"branchOffice" : ["市場", "市場"],
"safehouse" : ["間諜小屋", "間諜"],
"barracks" : ["兵營", "兵營"],
"workshop" : ["兵工廠", "兵廠"],
"carpentering" : ["木匠屋", "木-"],
"forester" : ["林務官宅", "木+"],
"stonemason" : ["石匠屋", "石+"],
"glassblowing" : ["玻璃吹制廠", "晶+"],
"winegrower" : ["葡萄樹園", "葡+"],
"alchemist" : ["煉金塔", "硫+"],
"architect" : ["建築公署", "石-"],
"optician" : ["配鏡商館", "晶-"],
"vineyard" : ["藏酒窖", "葡-"],
"fireworker" : ["煙火測試區域", "硫-"]
};
texts = {
"cityName": "城鎮", "currentlyBuilding": "正在建造", "summary": "總計:",
"hide_settings": "隐藏設定", "show_settings": "顯示設定",
"Population": "人口",
"Research": "Research",
"finishedBuilding": "建造完成","Incomes":"收入","Trading":"交易",
"Wood": "木材", "Wine": "葡萄", "Marble": "大理石", "Crystal": "水晶", "Sulfur": "硫磺"
};
} else if (language == "cn") { //chinese translation, thank Alphasong
langtype = "";
buildings = {
"townHall" : ["市政厅", "市政厅"],
"temple" : ["Temple", "Temple"],
"academy" : ["学院", "学院"],
"port" : ["港口", "港口"],
"shipyard" : ["船坞", "船坞"],
"warehouse" : ["仓库", "仓库"],
"wall" : ["城墙", "城墙"],
"tavern" : ["酒馆", "酒馆"],
"museum" : ["博物馆", "博物馆"],
"palace" : ["皇宫", "皇宫"],
"palaceColony" : ["总督府", "总督府"],
"embassy" : ["使馆", "使馆"],
"branchOffice" : ["市场", "市场"],
"safehouse" : ["藏身处", "藏身处"],
"barracks" : ["兵营", "兵营"],
"workshop" : ["兵工厂", "兵工厂"],
"carpentering" : ["木匠所", "木匠所r"],
"forester" : ["林务官宅", "林务官宅"],
"stonemason" : ["石匠屋", "石匠屋"],
"glassblowing" : ["玻璃吹制厂", "玻璃吹制厂"],
"winegrower" : ["葡萄种植园", "葡萄种植园"],
"alchemist" : ["炼金塔", "炼金塔"],
"architect" : ["建筑公署", "建筑公署"],
"optician" : ["配镜商馆", "配镜商馆"],
"vineyard" : ["藏酒窖", "藏酒窖"],
"fireworker" : ["烟火实验场", "烟火实验场"]
};
texts = {
"cityName": "城市", "currentlyBuilding": "正在建造", "summary": "总计:",
"hide_settings": "隐藏设置", "show_settings": "显示设置",
"Population": "人口",
"Research": "Research",
"finishedBuilding": "建造完成","Incomes":"收入","Trading":"交易",
"Wood": "木材", "Wine": "葡萄", "Marble": "大理石", "Crystal": "水晶", "Sulfur": "硫磺"
};
} else if (language == "tr") { //Turkish translation, thanks to NailBey
langtype = "";
buildings = {
"townHall" : ["Belediye Binasi", "Belediye Binasi"],
"temple" : ["Temple", "Temple"],
"academy" : ["Akademi", "Akademi"],
"port" : ["Ticaret Limani", "Ticaret Limani"],
"shipyard" : ["Donanma Tershanesi", "Donanma Tershanesi"],
"warehouse" : ["Depo", "Depo"],
"wall" : ["Sur", "Sur"],
"tavern" : ["Taverna", "Taverna"],
"museum" : ["Muze", "Muze"],
"palace" : ["Saray", "Saray"],
"palaceColony" : ["Vali Konagi", "Vali Konagi"],
"embassy" : ["Buyukelcilik", "Buyukelcilik"],
"branchOffice" : ["Ticaret Merkezi", "Ticaret Merkezi"],
"safehouse" : ["Istihbarat Merkezi", "Istihbarat Merkezi"],
"barracks" : ["Kisla", "Kisla"],
"workshop" : ["Mucit Atolyesi", "Mucit Atolyesi"],
"carpentering" : ["Marangoz Atolyesi", "Marangoz Atolyesi"],
"forester" : ["Ormanci Kulubesi", "Ormanci Kulubesi"],
"stonemason" : ["Mermer Atolyesi", "Mermer Atolyesi"],
"glassblowing" : ["Cam Esya Atolyesi", "Cam Esya Atolyesi"],
"winegrower" : ["Bag Evi", "Bag Evi"],
"alchemist" : ["Simya Kulesi", "Simya Kulesi"],
"architect" : ["Mimarlik Burosu", "Mimarlik Burosu"],
"optician" : ["Optik", "Optik"],
"vineyard" : ["Sarap Mahzeni", "Sarap Mahzeni"],
"fireworker" : ["Fisekci", "Fisekci"]
};
texts = {
"cityName": "Sehir Adi", "currentlyBuilding": "Insaa Ediliyor", "summary": "Toplam:",
"hide_settings": "Ayarlari Gizle", "show_settings": "Ayarlari Goster",
"Research": "Research",
"Population": "Nufus","finishedBuilding": "İnsaa Bitti","Incomes":"Gelir","Trading":"Ticaret",
"Wood": "Odun", "Wine": "Sarap", "Marble": "Mermer", "Crystal": "Kristal", "Sulfur": "Sulfur"
};
} else if (language == "vn") { // Vietnamese translations, thank Gafs
langtype = ""; // Set "lf" for Rigth-to-Left languages, or leave blank
buildings = {
"townHall" : ["Tòa thị chính", "Tòa T.Chính"],
"temple" : ["Temple", "Temple"],
"academy" : ["Học viện", "Học viện"],
"port" : ["Cảng giao dịch", "Cảng GD"],
"shipyard" : ["Xưởng đóng tàu", "Xưởng tàu"],
"warehouse" : ["Kho hàng", "Kho"],
"wall" : ["Tường thành", "Tường"],
"tavern" : ["Quán rượu", "Quán rượu"],
"museum" : ["Viện bảo tàng", "V.B.Tàng"],
"palace" : ["Cung điện", "Cung điện"],
"palaceColony" : ["Phủ thủ hiến", "Phủ"],
"embassy" : ["Tòa đại sứ", "Tòa Đ.Sứ"],
"branchOffice" : ["Trạm giao dịch", "Trạm GD"],
"safehouse" : ["Nơi ẩn náu", "Nơi ẩn náu"],
"barracks" : ["Trại lính", "Trại lính"],
"workshop" : ["Xưởng", "Xưởng"],
"carpentering" : ["Thợ mộc", "Thợ mộc"],
"forester" : ["Nhà kiểm lâm", "Kiểm lâm"],
"stonemason" : ["Thợ xây đá", "Thợ đá"],
"glassblowing" : ["Người thổi thủy tinh", "Thổi TT"],
"winegrower" : ["Máy ép nho", "Ép nho"],
"alchemist" : ["Giả kim", "Giả kim"],
"architect" : ["Tòa kiến trúc", "Kiến trúc"],
"optician" : ["Thợ kính", "Thợ kính"],
"vineyard" : ["Vườn nho", "V.Nho"],
"fireworker" : ["Thử thuốc súng", "Thuốc súng"]
};
texts = {
"cityName": "Thành phố", "currentlyBuilding": "Đang xây dựng", "summary": "Tổng:",
"hide_settings": "Ẩn thiết lập", "show_settings": "Hiển thị thiết lập",
"Population": "Dân số",
"Research": "Research",
"finishedBuilding": "Công trình hoàn tất","Incomes":"Thu nhập","Trading":"Trao đổi",
"Wood": "Gỗ", "Wine": "Rượu", "Marble": "Cẩm thạch", "Crystal": "Pha lê", "Sulfur": "Lưu huỳnh"
};
} else if (language == "es") { //Spanish translation, thanks to dragondeluz, graff86, Crom
langtype = "";
buildings = {
"townHall" : ["Intendencia", "Intendencia"],
"temple" : ["Temple", "Temple"],
"academy" : ["Academia", "Academia"],
"port" : ["Puerto comercial", "Puerto"],
"shipyard" : ["Astillero", "Astillero"],
"warehouse" : ["Depósito", "Depósito"],
"wall" : ["Muralla", "Muralla"],
"tavern" : ["Taberna", "Taberna"],
"museum" : ["Museo", "Museo"],
"palace" : ["Palacio", "Palacio"],
"palaceColony" : ["Residencia del Gobernador", "Residencia"],
"embassy" : ["Embajada", "Embajada"],
"branchOffice" : ["Tienda", "Tienda"],
"safehouse" : ["Escondite", "Escondite"],
"barracks" : ["Cuarteles", "Cuarteles"],
"workshop" : ["Taller de invenciones", "Taller"],
"carpentering" : ["Carpintería", "Carpintería"],
"forester" : ["Cabaña del guardabosques", "Cabaña"],
"stonemason" : ["Cantero", "Cantero"],
"glassblowing" : ["Soplador de vidrio", "Soplador"],
"winegrower" : ["Vinicultor", "Vinicultor"],
"alchemist" : ["Torre del Alquimista", "Alquimista"],
"architect" : ["Oficina del Arquitecto", "Arquitecto"],
"optician" : ["Óptico", "Óptico"],
"vineyard" : ["Prensa de Vino", "Prensa"],
"fireworker" : ["Área de Pruebas Pirotécnicas", "Pirotécnica"]
};
texts = {
"cityName": "Nombre de la ciudad", "currentlyBuilding": "Construyendo", "summary": "Totales",
"hide_settings": "Ocultar opciones", "show_settings": "Mostrar opciones",
"Population": "Población",
"Research": "Research",
"finishedBuilding": "Edificios terminados","Incomes":"Ingresos","Trading":"Comercio",
"Wood": "Madera", "Wine": "Vino", "Marble": "Mármol", "Crystal": "Cristal", "Sulfur": "Azufre"
};
} else if (language == "pl") { // thanks to Syjamek
langtype = "";
buildings = {
"townHall" : ["Ratusz", "Ratusz"],
"temple" : ["Temple", "Temple"],
"academy" : ["Akademia", "Akademia"],
"port" : ["Port", "Port"],
"shipyard" : ["Stocznia", "Stocznia"],
"warehouse" : ["Magazyn", "Magazyn"],
"wall" : ["Mur", "Mur"],
"tavern" : ["Taverne", "Taverne"],
"museum" : ["Muzeum", "Muzeum"],
"palace" : ["Pałac", "Pałac"],
"palaceColony" : ["Rezydencja", "Rezydencja"],
"embassy" : ["Ambasada", "Ambasada"],
"branchOffice" : ["Bazar", "Bazar"],
"safehouse" : ["Kryjówka", "Kryjówka"],
"barracks" : ["Koszary", "Koszary"],
"workshop" : ["Warsztat", "Warsztat"],
"carpentering" : ["Warsztat Cieśli", "Warsztat Cieśli"],
"forester" : ["Leśniczówka", "Leśniczówka"],
"stonemason" : ["Kamieniarz", "Kamieniarz"],
"glassblowing" : ["Huta Szkła", "Huta Szkła"],
"winegrower" : ["Winnica", "Winnica"],
"alchemist" : ["Wieża Alchemika", "Wieża Alchemika"],
"architect" : ["Biuro Architekta", "Biuro Architekta"],
"optician" : ["Optyk", "Optyk"],
"vineyard" : ["Winiarz", "Winiarz"],
"fireworker" : ["Zakład Pirotechnika", "Zakład Pirotechnika"]
};
texts = {
"cityName": "Nazwa", "currentlyBuilding": "W budowie", "summary": "Suma:",
"hide_settings": "Ukryj ustawieni", "show_settings": "Pokaż ustawienia",
"Population": "Populacja",
"Research": "Research",
"finishedBuilding": "Budowa zakończona","Incomes":"Bilans złota","Trading":"Handel",
"Wood": "Drewno", "Wine": "Wino", "Marble": "Marmur", "Crystal": "Kryształ", "Sulfur": "Siarka"
};
} else if (language == "it") { //Italian translation, thanks to Brucee and matteo466
langtype = "";
buildings = {
"townHall" : ["Municipio", "Municipio"],
"temple" : ["Temple", "Temple"],
"academy" : ["Accademia", "Accademia"],
"port" : ["Porto", "Porto"],
"shipyard" : ["Cantiere navale", "Cantiere navale"],
"warehouse" : ["Magazzino", "Magazzino"],
"wall" : ["Muro", "Muro"],
"tavern" : ["Taverna", "Taverna"],
"museum" : ["Museo", "Museo"],
"palace" : ["Palazzo", "Palazzo"],
"palaceColony" : ["Governatore", "Governatore"],
"embassy" : ["Ambasciata", "Ambasciata"],
"branchOffice" : ["Mercato", "Mercato"],
"safehouse" : ["Nascondiglio", "Nascondiglio"],
"barracks" : ["Caserma", "Caserma"],
"workshop" : ["Officina", "Officina"],
"carpentering" : ["Carpentiere", "Carpentiere"],
"forester" : ["Guardaboschi", "Guardaboschi"],
"stonemason" : ["Tagliapietre", "Tagliapietre"],
"glassblowing" : ["Vetraio", "Vetraio"],
"winegrower" : ["Viticoltore", "Viticoltore"],
"alchemist" : ["Alchimista", "Alchimista"],
"architect" : ["Architetto", "Architetto"],
"optician" : ["Ottico", "Ottico"],
"vineyard" : ["Cantina", "Cantina"],
"fireworker" : ["Pirotecnico", "Pirotecnico"]
};
texts = {
"cityName": "Città", "currentlyBuilding": "Costruzione in corso", "summary": "Sommario:",
"hide_settings": "Nascondi opzioni", "show_settings": "Mostra opzioni",
"Population": "Popolazione",
"Research": "Research",
"finishedBuilding": "Costruzione completata","Incomes":"Saldo oro","Trading":"Trading",
"Wood": "Legno", "Wine": "Vino", "Marble": "Marmo", "Crystal": "Cristallo", "Sulfur": "Zolfo"
};
} else if (language == "pt") { //Portuguese translation, thanks to alpha tester & Mr. Burns
langtype = "";
buildings = {
"townHall" : ["Câmara Municipal", "Câmara Municipal"],
"temple" : ["Temple", "Temple"],
"academy" : ["Academia", "Academia"],
"port" : ["Porto Mercantil", "Porto"],
"shipyard" : ["Estaleiro", "Estaleiro"],
"warehouse" : ["Armazém", "Armazém"],
"wall" : ["Muralha", "Muralha"],
"tavern" : ["Taberna", "Taberna"],
"museum" : ["Museu", "Museu"],
"palace" : ["Palácio", "Palácio"],
"palaceColony" : ["Residencia do Governador", "Governador"],
"embassy" : ["Embaixada", "Embaixada"],
"branchOffice" : ["Mercado", "Mercado"],
"safehouse" : ["Espionagem", "Espionagem"],
"barracks" : ["Quartel", "Quartel"],
"workshop" : ["Oficina", "Oficina"],
"carpentering" : ["Carpintaria", "Carpintaria"],
"forester" : ["Guarda Florestal", "Florestal"],
"stonemason" : ["Pedreiro", "Pedreiro"],
"glassblowing" : ["Fábrica de Vidro", "Vidro"],
"winegrower" : ["Viticultor", "Viticultor"],
"alchemist" : ["Torre do Alquimista", "Alquimista"],
"architect" : ["Atelier de Arquitectura", "Arquitectura"],
"optician" : ["Oculista", "Oculista"],
"vineyard" : ["Caves de Vinho", "Caves"],
"fireworker" : ["Fábrica de Pirotecnia", "Pirotecnia"]
};
texts = {
"cityName": "Cidades", "currentlyBuilding": "Em Construçao", "summary": "Sumário:",
"hide_settings": "Ocultar Configuraçoes", "show_settings": "Ver Configuraçoes",
"Population": "População",
"Research": "Research",
"finishedBuilding": "Finished building","Incomes":"Rendimento","Trading":"Trading",
"Wood": "Madeira", "Wine": "Vinho", "Marble": "Mármore", "Crystal": "Cristal", "Sulfur": "Enxofre"
};
} else if (language == "fr") { //French translation, thanks to Chirel
langtype = "";
buildings = {
"townHall" : ["Hôtel de ville", "HdV"],
"temple" : ["Temple", "Temple"],
"academy" : ["Académie", "Ac."],
"port" : ["Port commercial", "Port"],
"shipyard" : ["Chantier naval", "Chtr"],
"warehouse" : ["Entrepôt", "Entp"],
"wall" : ["Mur d'enceinte", "Mur"],
"tavern" : ["Taverne", "Tvrn"],
"museum" : ["Musée", "Msé"],
"palace" : ["Palais", "Plais"],
"palaceColony" : ["Résidence du Gouverneur", "RdG"],
"embassy" : ["Ambassade", "Amb."],
"branchOffice" : ["Comptoir", "Cptr"],
"safehouse" : ["Cachette", "Ccht"],
"barracks" : ["Caserne", "Csrn"],
"workshop" : ["Atelier", "Atlr"],
"carpentering" : ["Menuisier","Men."],
"forester" : ["Maison forestière","Frst"],
"stonemason" : ["Tailleur de pierres","Tail."],
"glassblowing" : ["Verrier","Vrr"],
"winegrower" : ["Pressoir à vin","Prsr"],
"alchemist" : ["Tour des alchimistes","Alch."],
"architect" : ["Bureau de l`architecte","Arch."],
"optician" : ["Opticien","Opt."],
"vineyard" : ["Cave à vin","Cave"],
"fireworker" : ["Zone de test des artificiers","Artf"]
};
texts = {
"cityName": "Villes", "currentlyBuilding": "Construction en cours", "summary": "Total:",
"hide_settings": "Cacher les options", "show_settings": "Voir les options",
"Population": "Population",
"Research": "Recherche",
"finishedBuilding": "Construction terminée","Incomes":"Revenus","Trading":"Commerce",
"Wood": "Bois", "Wine": "Vin", "Marble": "Marbre", "Crystal": "Cristal", "Sulfur": "Soufre"
};
} else if (language == "il") { //hebrew translation, thank Refael Ackermann
langtype = "rf";
buildings = {
"townHall" : ["עיריה", "עיריה"],
"temple" : ["Temple", "Temple"],
"academy" : ["אקדמיה", "אקדמיה"],
"port" : ["נמל מסחר", "נמל"],
"shipyard" : ["מספנה", "מספנה"],
"warehouse" : ["מחסן", "מחסן"],
"wall" : ["חומה", "חומה"],
"tavern" : ["פונדק", "פונדק"],
"museum" : ["מוזאון", "מוזאון"],
"palace" : ["ארמון", "ארמון"],
"palaceColony" : ["מגורי המושל", "מושל"],
"embassy" : ["שגרירות", "שגרירות"],
"branchOffice" : ["תחנת סחר", "סחר"],
"safehouse" : ["מחבוא", "מחבוא"],
"barracks" : ["מגורי חיילים", "חיילים"],
"workshop" : ["סדנא", "סדנא"],
"carpentering" : ["נגר", "נגר"],
"forester" : ["יערן", "יערן"],
"stonemason" : ["חרש אבן", "אבן"],
"glassblowing" : ["נפח זכוכית", "זכוכית"],
"winegrower" : ["יינן", "יינן"],
"alchemist" : ["אלכימאי", "אלכימאי"],
"architect" : ["ארכיטקט", "ארכיטקט"],
"optician" : ["אופטיקאי", "אופטיקאי"],
"vineyard" : ["יקב", "יקב"],
"fireworker" : ["זיקוקים", "זיקוקים"]
};
texts = {
"cityName": "שם עיר", "currentlyBuilding": "בבניה", "summary": "סיכום:",
"hide_settings": "הסתר אפשרויות", "show_settings": "הצג אפשרויות",
"Population": "אוכלוסיה",
"Research": "Research",
"finishedBuilding": "הסתימה בניה","Incomes":"הכנסה","Trading":"סוחר",
"Wood": "עץ", "Wine": "יין", "Marble": "שיש", "Crystal": "קריסטל", "Sulfur": "גופרית"
};
} else if ((language == "ae") || (language == "eg") || (language == "sa")) { //by wa7d beta server - kuwaitv@gmail.com
langtype = "rf";
buildings = {
"townHall" : ["البلدية", "البلدية"],
"temple" : ["Temple", "Temple"],
"academy" : ["الاكاديمية", "الاكاديمية"],
"port" : ["المرفأ", "المرفأ"],
"shipyard" : ["حوض السفن", "حوض السفن"],
"warehouse" : ["المخزن", "المخزن"],
"wall" : ["السور", "السور"],
"tavern" : ["الاستراحة", "الاستراحة"],
"museum" : ["المتحف", "المتحف"],
"palace" : ["القصر", "القصر"],
"palaceColony" : ["قائم مقام", "قائم مقام"],
"embassy" : ["السفارة", "السفارة"],
"branchOffice" : ["السوق", "السوق"],
"safehouse" : ["المخبأ", "المخبأ"],
"barracks" : ["الثكنة", "الثكنة"],
"workshop" : ["المختبر", "المختبر"],
"carpentering" : ["الحطاب", "الحطاب"],
"forester" : ["حارس الغابات", "حارس الغابات"],
"stonemason" : ["الحجار", "الحجار"],
"glassblowing" : ["نافخ الزجاج", "نافخ الزجاج"],
"winegrower" : ["مزارع العنب", "مزارع العنب"],
"alchemist" : ["الكيمائي", "الكيمائي"],
"architect" : ["المعماري", "المعماري"],
"optician" : ["صانع العدسات", "صانع العدسات"],
"vineyard" : ["مزرعة العنب", "مزرعة العنب"],
"fireworker" : ["عامل النار", "عامل النار"]
};
texts = {
"cityName": "المدينة", "currentlyBuilding": "أعمال بناء", "summary": "الإجمالي:",
"hide_settings": "إخفاء الخيارات", "show_settings": "إظهار الخيارات",
"Population": "السكان",
"Research": "Research",
"finishedBuilding": "Finished building","Incomes":"Incomes","Trading":"Trading",
"Wood": "الخشب", "Wine": "العنب", "Marble": "الرخام", "Crystal": "البلور", "Sulfur": "الكبريت"
};
} else if (language == 'hu') { // Thank Luzer
langtype = ""; // Set "lf" for Rigth-to-Left languages, or leave blank
buildings = {
"townHall" : ["Városháza", "Városháza"],
"temple" : ["Temple", "Temple"],
"academy" : ["Akadémia", "Akadémia"],
"port" : ["Kikötő", "Kikötő"],
"shipyard" : ["Hajógyár", "Hajógyár"],
"warehouse" : ["Raktár", "Raktár"],
"wall" : ["Városfal", "Fal"],
"tavern" : ["Fogadó", "Fogadó"],
"museum" : ["Múzeum", "Múzeum"],
"palace" : ["Palota", "Palota"],
"palaceColony" : ["Helytartó", "Helytartó"],
"embassy" : ["Nagykövetség", "Nagykövetség"],
"branchOffice" : ["Kereskedő", "Kereskedő"],
"safehouse" : ["Rejtekhely", "Rejtekhely"],
"barracks" : ["Barakk", "Barakk"],
"workshop" : ["Műhely", "Műhely"],
"carpentering" : ["Ácsmester", "Ácsmester"],
"forester" : ["Erdész", "Erdész"],
"stonemason" : ["Kőműves", "Kőműves"],
"glassblowing" : ["Üvegfúvó", "Üvegfúvó"],
"winegrower" : ["Bortermelő", "Bortermelő"],
"alchemist" : ["Alkimista", "Alkimista"],
"architect" : ["Építész", "Építész"],
"optician" : ["Optikus", "Optikus"],
"vineyard" : ["Szőlőprés", "Szőlőprés"],
"fireworker" : ["Tűzszerész", "Tűzszerész"]
};
texts = {
"cityName": "Város neve", "currentlyBuilding": "Építés alatt", "summary": "Összesen:",
"hide_settings": "Beállítások elrejtése", "show_settings": "Beállítások megtekintése",
"Population": "Lakosság",
"Research": "Research",
"finishedBuilding": "Finished building","Incomes":"Incomes","Trading":"Trading",
"Wood": "Építőanyag", "Wine": "Bor", "Marble": "Márvány", "Crystal": "Kristály", "Sulfur": "Kénpor"
};
} else if (language == "ro") { //Romanian translation, thanks to Peta
langtype = "";
buildings = {
"townHall" : ["Primarie", "Primarie"],
"temple" : ["Temple", "Temple"],
"academy" : ["Academie", "Academie"],
"port" : ["Port comercial", "Port"],
"shipyard" : ["Santier Naval", "S.Naval"],
"warehouse" : ["Depozit", "Depozit"],
"wall" : ["Zid", "Zid"],
"tavern" : ["Taverna", "Taverna"],
"museum" : ["Muzeu", "Muzeu"],
"palace" : ["Palat", "Palat"],
"palaceColony" : ["Resedinta Guvernatorului", "R.Guv."],
"embassy" : ["Ambasada", "Ambasada"],
"branchOffice" : ["Punct de negot", "Piata"],
"safehouse" : ["Ascunzatoare", "Ascunzatoare"],
"barracks" : ["Cazarma", "Cazarma"],
"workshop" : ["Atelier", "Atelier"],
"carpentering" : ["Dulgher", "Dulgher"],
"forester" : ["Casa Padurarului", "Padurar"],
"stonemason" : ["Cariera", "Cariera"],
"glassblowing" : ["Sticlarie", "Sticlarie"],
"winegrower" : ["Vinificator", "Vinificator"],
"alchemist" : ["Turnul Alchimistului", "Alchimist"],
"architect" : ["Biroul Arhitectului", "Architect"],
"optician" : ["Optician", "Optician"],
"vineyard" : ["Presa de Vin", "Presa Vin"],
"fireworker" : ["Zona Pirotehnica de Test", "Poligon"]
};
texts = {
"cityName": "Nume Oras", "currentlyBuilding": "In constructie", "summary": "Total:",
"hide_settings": "Ascunde Setari", "show_settings": "Arata Setari",
"Population": "Populatie",
"Research": "Research",
"finishedBuilding": "Constructie Finalizata","Incomes":"Economii","Trading":"Comert",
"Wood": "Lemn", "Wine": "Vin", "Marble": "Marmura", "Crystal": "Cristal", "Sulfur": "Sulf"
};
} else if (language == "cz") { //Czech translation , thank Tetraedron, Assassin
langtype = "";
buildings = {
"townHall" : ["Městská radnice", "Radnice"],
"temple" : ["Temple", "Temple"],
"academy" : ["Akademie", "Akademie"],
"port" : ["Obchodní přístav", "Přístav"],
"shipyard" : ["Loděnice", "Loděnice"],
"warehouse" : ["Sklad", "Sklad"],
"wall" : ["Městská zeď", "Zeď"],
"tavern" : ["Hostinec", "Hostinec"],
"museum" : ["Muzeum", "Muzeum"],
"palace" : ["Palác", "Palác"],
"palaceColony" : ["Guvernérova rezidence", "Guvernér"],
"embassy" : ["Ambasáda", "Ambasáda"],
"branchOffice" : ["Tržiště", "Tržiště"],
"safehouse" : ["Úkryt", "Úkryt"],
"barracks" : ["Kasárna", "Kasárna"],
"workshop" : ["Dílna", "Dílna"],
"carpentering" : ["Truhlárna", "Truhlárna"],
"forester" : ["Hájovna", "Hájovna"],
"stonemason" : ["Kameník", "Kameník"],
"glassblowing" : ["Sklárna", "Sklárna"],
"winegrower" : ["Vinařství", "Vinařství"],
"alchemist" : ["Věž alchymisty", "Věž alchymisty"],
"architect" : ["Pracovna architekta", "Architekt"],
"optician" : ["Optik", "Optik"],
"vineyard" : ["Vinný sklep", "Vinný sklep"],
"fireworker" : ["Zkušebna ohňostroje", "Zkušebna ohňostroje"]
};
texts = {
"cityName" : "Město",
"currentlyBuilding" : "Staví se",
"summary" : "Celkem:",
"hide_settings" : "Skrýt nastavení",
"show_settings" : "Ukázat nastavení",
"Population" : "Populace",
"Research": "Research",
"finishedBuilding" : "Dokončené stavby",
"Incomes" : "Příjmy",
"Trading" : "Obchod",
"Wood" : "Dřevo",
"Wine" : "Víno",
"Marble" : "Mramor",
"Crystal" : "Sklo",
"Sulfur" : "Síra"
};
} else if (language == "ru") { //russian translation by Mugivara, GrAndAG
langtype = "";
buildings = {
"townHall" : ["Ратуша", "Ратуша"],
"temple" : ["Храм", "Храм"],
"academy" : ["Академия", "Академия"],
"port" : ["Торговый порт", "Порт"],
"shipyard" : ["Верфь", "Верфь"],
"warehouse" : ["Склад", "Склад"],
"wall" : ["Стена", "Стена"],
"tavern" : ["Таверна", "Таверна"],
"museum" : ["Музей", "Музей"],
"palace" : ["Дворец", "Дворец"],
"palaceColony" : ["Резиденция губернатора", "Резиденция"],
"embassy" : ["Посольство", "Посольство"],
"branchOffice" : ["Торговый пост", "Пост"],
"safehouse" : ["Укрытие", "Укрытие"],
"barracks" : ["Казарма", "Казарма"],
"workshop" : ["Мастерская", "Мастерская"],
"carpentering" : ["Плотницкая мастерская", "Плотник"],
"forester" : ["Хижина леничего", "Лесничий"],
"stonemason" : ["Каменоломня", "Каменоломня"],
"glassblowing" : ["Стеклодувная мастерская", "Стеклодув"],
"winegrower" : ["Винодельня", "Винодельня"],
"alchemist" : ["Башня алхимика", "Алхимик"],
"architect" : ["Бюро архитектора", "Архитектор"],
"optician" : ["Оптика", "Оптика"],
"vineyard" : ["Винный погреб", "Погреб"],
"fireworker" : ["Полигон пиротехника", "Полигон"]
};
texts = {
"cityName": "Название города", "currentlyBuilding": "Текущее строительство", "summary": "Итого:",
"hide_settings": "Скрыть настройки", "show_settings": "Показать настройки",
"Population": "Население",
"Research": "Учёные",
"finishedBuilding": "Строительство завершено", "Incomes":"Золото", "Trading":"Торговля",
"Wood": "Стройматериалы", "Wine": "Виноград", "Marble": "Мрамор",
"Crystal": "Хрусталь", "Sulfur": "Сера"
};
} else if (language == "nl") { //Dutch translation, thanks to cremers
langtype = "";
buildings = {
"townHall" : ["Stadhuis", "Stadhuis"],
"temple" : ["Temple", "Temple"],
"academy" : ["Academie", "Academie"],
"port" : ["Handelshaven", "Haven"],
"shipyard" : ["Scheepswerf", "Werf"],
"warehouse" : ["Opslagplaats", "Opslagplaats"],
"wall" : ["Stadsmuur", "Muur"],
"tavern" : ["Taverne", "Taverne"],
"museum" : ["Museum", "Museum"],
"palace" : ["Paleis", "Paleis"],
"palaceColony" : ["Gouverneurswoning", "Gouverneurswoning"],
"embassy" : ["Ambassade", "Ambassade"],
"branchOffice" : ["Handelspost", "Handelspost"],
"safehouse" : ["Schuilplaats", "Schuilplaats"],
"barracks" : ["Barakken", "Barakken"],
"workshop" : ["Werkplaats", "Werkplaats"],
"carpentering" : ["Timmerman", "Timmerman"],
"forester" : ["Houthakkers Loge", "Houthakkers Loge"],
"stonemason" : ["Steenhouwer", "Steenhouwer"],
"glassblowing" : ["Glasblazer", "Glasblazer"],
"winegrower" : ["Wijnboer", "Wijnboer"],
"alchemist" : ["De Alchemie Toren", "De Alchemie Toren"],
"architect" : ["Architectenbureau", "Architectenburea"],
"optician" : ["Opticien", "Opticien"],
"vineyard" : ["Wijnpers", "Wijnpers"],
"fireworker" : ["Vuurwerk Opslag", "Vuurwerk Opslag"]
};
texts = {
"cityName": "Stadsnaam", "currentlyBuilding": "Huidige constructie", "summary": "Opgeteld:",
"hide_settings": "Verberg instellingen", "show_settings": "Instellingen",
"Research": "Research",
"Population": "Inwoners", "finishedBuilding": "Klaar","Incomes":"Inkomsten","Trading":"Handel",
"Wood": "Hout", "Wine": "Wijn", "Marble": "Marmer", "Crystal": "Glas", "Sulfur": "Zwavel"
};
} else if (language == "gr") { //greek translation, thanks to panospap
langtype = "";
buildings = {
"townHall" : ["Δημαρχείο", "Δημαρχείο"],
"temple" : ["Temple", "Temple"],
"academy" : ["Ακαδημία", "Ακαδημία"],
"port" : ["Εμπορικός λιμένας", "Εμπορικός λιμένας"],
"shipyard" : ["Ναυπηγείο", "Ναυπηγείο"],
"warehouse" : ["Αποθήκη εμπορευμάτων", "Αποθήκη"],
"wall" : ["Τείχη της πόλης", "Τείχος"],
"tavern" : ["Ταβέρνα", "Ταβέρνα"],
"museum" : ["Μουσείο", "Μουσείο"],
"palace" : ["Παλάτι", "Παλάτι"],
"palaceColony" : ["Η Κατοικία του Κυβερνήτη", "Κυβερνήτης"],
"embassy" : ["Πρεσβεία", "Πρεσβεία"],
"branchOffice" : ["Θέση εμπορικών συναλλαγών", "Εμπορικές συναλλαγές"],
"safehouse" : ["Κρησφύγετο", "Κρησφύγετο"],
"barracks" : ["Στρατώνες", "Στρατώνες"],
"workshop" : ["Εργαστήριο", "Εργαστήριο"],
"carpentering" : ["Ξυλουργός", "Ξυλουργός"],
"forester" : ["Σπίτι Ξυλοκόπου", "Ξυλοκόπος"],
"stonemason" : ["Κτίριο Λατομείου", "Κτίριο Λατομείου"],
"glassblowing" : ["Υαλουργείο", "Υαλουργείο"],
"winegrower" : ["Αποστακτήριο", "Αποστακτήριο"],
"alchemist" : ["Πύργος Αλχημιστή", "Πύργος Αλχημιστή"],
"architect" : ["Αρχιτεκτονικό Γραφείο", "Αρχιτέκτονας"],
"optician" : ["Οπτικός", "Οπτικός"],
"vineyard" : ["Πιεστήριο Σταφυλιού", "Πιεστήριο Σταφυλιού"],
"fireworker" : ["Περιοχή Δοκιμών Πυροτεχνημάτων", "Δοκιμή Πυροτεχνημάτων"]
};
texts = {
"cityName": "Όνομα πόλης", "currentlyBuilding": "Αυτήν την περίοδο χτίζετε", "summary": "Σύνολο:",
"hide_settings": "Κρύψε ρυθμίσεις", "show_settings": "Εμφάνισε ρυθμίσεις",
"Population": "Πληθυσμός",
"Research": "Research",
"finishedBuilding": "Τελειωμένο κτίριο","Incomes":"Εισοδήματα","Trading":"Εμπόριο",
"Wood": "Ξύλα", "Wine": "Κρασί", "Marble": "Μάρμαρο", "Crystal": "Κρύσταλλο", "Sulfur": "Θείο"
};
} else if (language == "sk") { //Slovak translation by RxR
langtype = "";
buildings = {
"townHall" : ["Radnica", "Radnica"],
"temple" : ["Kostol", "Kostol"],
"academy" : ["Akadémia", "Akadémia"],
"port" : ["Obchodný prístav", "Prístav"],
"shipyard" : ["Lodenica", "Lodenica"],
"warehouse" : ["Sklad", "Sklad"],
"wall" : ["Mestský múr", "Múr"],
"tavern" : ["Vináreň", "Vináreň"],
"museum" : ["Múzeum", "Múzeum"],
"palace" : ["Palác", "Palác"],
"palaceColony" : ["Rezidencia guvernéra", "Guvernér"],
"embassy" : ["Ambasáda", "Ambasáda"],
"branchOffice" : ["Trhovisko", "Trh"],
"safehouse" : ["Úkryt", "Úkryt"],
"barracks" : ["Kasárne", "Kasárne"],
"workshop" : ["Dielňa", "Dielňa"],
"carpentering" : ["Tesár", "Tesár"],
"forester" : ["Dom lesníka", "Lesník"],
"stonemason" : ["Kameňolom", "Kamenár"],
"glassblowing" : ["Fúkač skla", "Sklár"],
"winegrower" : ["Vinár", "Vinár"],
"alchemist" : ["Veža alchymistov", "Alchymista"],
"architect" : ["Úrad architekta", "Architekt"],
"optician" : ["Optik", "Optik"],
"vineyard" : ["Vinica", "Vinica"],
"fireworker" : ["Testovanie ohňostrojov", "Ohňostroje"]
};
texts = {
"cityName" : "Mesto",
"currentlyBuilding" : "Stavia sa",
"summary" : "Spolu:",
"hide_settings" : "Skryť nastavenia",
"show_settings" : "Zobraziť nastavenia",
"Population" : "Obyvateľstvo",
"Research": "Research",
"finishedBuilding" : "Dokončené stavby",
"Incomes" : "Príjmy",
"Trading" : "Obchod",
"Wood" : "Drevo",
"Wine" : "Víno",
"Marble" : "Mramor",
"Crystal" : "Sklo",
"Sulfur" : "Síra"
};
} else if (language == "bg") { //Bulgarian translation by dsimeonov
langtype = "";
buildings = {
"townHall" : ["Кметство", "Кметство"],
"temple" : ["Храм", "Храм"],
"academy" : ["Академия", "Академия"],
"port" : ["Пристанище", "Пристанище"],
"shipyard" : ["Корабостроителница", "Корабостроителница"],
"warehouse" : ["Склад", "Склад"],
"wall" : ["Градска стена", "Градска стена"],
"tavern" : ["Кръчма", "Кръчма"],
"museum" : ["Музей", "Музей"],
"palace" : ["Дворец", "Дворец"],
"palaceColony" : ["Губернаторска резиденция", "Губернаторска резиденция"],
"embassy" : ["Посолство", "Посолство"],
"branchOffice" : ["Пазар", "Пазар"],
"safehouse" : ["Скривалище", "Скривалище"],
"barracks" : ["Казарма", "Казарма"],
"workshop" : ["Работилница", "Работилница"],
"carpentering" : ["Дърводелец", "Дърводелец"],
"forester" : ["Горска къща", "Горска къща"],
"stonemason" : ["Каменоделна", "Каменоделна"],
"glassblowing" : ["Стъклодув", "Стъклодув"],
"winegrower" : ["Винар", "Винар"],
"alchemist" : ["Кула на Алхимика", "Кула на Алхимика"],
"architect" : ["Офис на Архитекта", "Офис на Архитекта"],
"optician" : ["Оптика", "Оптика"],
"vineyard" : ["Винена преса", "Винена преса"],
"fireworker" : ["Тестова зона за фойерверки", "Тестова зона за фойерверки"]
};
texts = {
"cityName" : "Град",
"currentlyBuilding" : "В процес на разширение",
"summary" : "Общо:",
"hide_settings" : "Скрий",
"show_settings" : "Покажи",
"Population" : "Популация",
"Research": "Research",
"finishedBuilding" : "Завършена",
"Incomes" : "Доходи",
"Trading" : "Търговия",
"Wood" : "Дърво",
"Wine" : "Вино",
"Marble" : "Мрамор",
"Crystal" : "Кристал",
"Sulfur" : "Сяра"
};
} else {
langtype = ""; // Set "lf" for Rigth-to-Left languages, or leave blank
buildings = {
"townHall" : ["Town Hall", "T. Hall"],
"temple" : ["Temple", "Temple"],
"academy" : ["Academy", "Academy"],
"port" : ["Trading Port", "Port"],
"shipyard" : ["Shipyard", "Shipyard"],
"warehouse" : ["Warehouse", "Warehouse"],
"wall" : ["Wall", "Wall"],
"tavern" : ["Tavern", "Tavern"],
"museum" : ["Museum", "Museum"],
"palace" : ["Palace", "Palace"],
"palaceColony" : ["Governor's Residence", "Governor"],
"embassy" : ["Embassy", "Embassy"],
"branchOffice" : ["Trading Post", "Trading"],
"safehouse" : ["Hideout", "Hideout"],
"barracks" : ["Barracks", "Barracks"],
"workshop" : ["Workshop", "Workshop"],
"carpentering" : ["Carpenter", "Carpenter"],
"forester" : ["Forester", "Forester"],
"stonemason" : ["Stone Mason", "Mason"],
"glassblowing" : ["Glass Blowing", "Blowing"],
"winegrower" : ["Wine Grower", "Grower"],
"alchemist" : ["Alchemist", "Alchemist"],
"architect" : ["Architect", "Architect"],
"optician" : ["Optician", "Optician"],
"vineyard" : ["Vine Yard", "Yard"],
"fireworker" : ["Fireworker", "Fireworker"]
};
texts = {
"cityName": "Cities", "currentlyBuilding": "Currently building", "summary": "Summary:",
"hide_settings": "Hide settings", "show_settings": "Show settings",
"Population": "Population",
"Research": "Research",
"finishedBuilding": "Finished building","Incomes":"Incomes","Trading":"Trading",
"Wood": "Wood", "Wine": "Wine", "Marble": "Marble", "Crystal": "Crystal", "Sulfur": "Sulfur"
};
}
}
getLocalizedTexts();
//lots of code to get the city id. The code trys to find the city id no matter which "city dropdown view" the user has chosen.
// Fix for v3.1
var city_id = getIntValue(EmpireBoard.DOM.Get_Last_Node_Value("//select[@id='citySelect']/option[@selected='selected']"), 0);
var current_city_id = city_id;
EmpireBoard.Log.Add('current_city_id = '+current_city_id);
var city_name = EmpireBoard.DOM.Get_First_Node_TextContent("id('breadcrumbs')/*[@class='city']");
EmpireBoard.Log.Add('Main view city_name = "'+city_name+'"');
if (city_name != undefined)
{
var island_id = EmpireBoard.DOM.Get_First_Node_TextContent("id('breadcrumbs')//a[@class='island']");
if ( island_id == undefined || island_id == 0 )
island_id = /\[[0-9:]+\]/.exec(EmpireBoard.DOM.Get_First_Node("id('breadcrumbs')//a[contains(@href,'view=island')]").innerHTML)[0];
var city_idmainView = 0;
// Fix for v3.1
if (city_idmainView == 0)
{
city_idmainView = EmpireBoard.DOM.Get_First_Node_Value("//select[@id='citySelect']/option[text()='"+TrimIsland100(island_id)+" "+city_name+"']", 0);
}
if (city_idmainView == 0)
{
city_idmainView = EmpireBoard.DOM.Get_First_Node_Value("//select[@id='citySelect']/option[text()='"+city_name+"']", 0);
}
// Fix for v3.2
if (city_idmainView == 0)
{
city_idmainView = EmpireBoard.DOM.Get_First_Node_Value("//select[@id='citySelect']/option[contains(text(),'"+TrimIsland100(island_id)+"') and contains(text(),'"+city_name+"')]", 0);
}
if (city_idmainView == 0)
{
city_idmainView = EmpireBoard.DOM.Get_First_Node_Value("//select[@id='citySelect']/option[contains(text(),'"+city_name+"')]", 0);
}
EmpireBoard.Log.Add('city_idmainView['+TrimIsland100(island_id)+' '+city_name+'] = '+city_idmainView);
var city_positionmainView = -1;
var a = EmpireBoard.DOM.Get_First_Node("//div[@id='breadcrumbs']/*[@class='island' and contains(text(), '[')]", "");
if (a == null) {
a = EmpireBoard.DOM.Get_First_Node("//a[contains(@href, '?view=island')]/span[contains(text(), '[')]", "");
if (a != null) {
a = a.parentNode;
}
}
var city_coord = "";
var island_id = "";
if (a != null) {
if (/(\[[0-9:]+\])/.exec(a.innerHTML)) {
city_coord = RegExp.$1;
if (/[?&]id=([0-9]+)/.exec(a.href) != null) {
island_id = RegExp.$1;
}
}
}
if (island_id == "" && (/view=island&id=([0-9]+)/.exec(document.URL) != null)) {
island_id = RegExp.$1;
}
}
else
{
city_idmainView = 0;
city_name = '';
city_coord = '';
island_id = '';
}
function getVar(varname, vardefault) {
var res = GM_getValue(server+varname);
if (res == undefined) {
return vardefault;
}
return res;
}
function setVar(varname, varvalue) {
GM_setValue(server+varname, varvalue);
}
function getCity(city_id) {
city_id = "city_"+city_id;
if (config[city_id] == undefined) {
config[city_id] = new Resource();
}
return config[city_id];
}
function getCityTime(city_id)
{
var city = getCity(city_id);
if (city.prodtime == undefined)
{
return 0;
}
else
{
return city.prodtime;
}
}
//get node's title attribute
function getNodeTitle(path, defaultValue) {
var value = EmpireBoard.DOM.Get_First_Node(path);
// Fix for v3
if ((value != null) && (value.title != '')) {
return value.title;
} else return defaultValue;
}
//support negative value
function getIntValue(str, defaultValue) {
var temp = ""+str;
temp = temp.replace(/[^-0-9]+/g, "");
temp = parseInt(temp);
if (defaultValue != undefined && (temp == undefined || (""+temp == "NaN"))) {
return defaultValue;
}
return temp;
}
function mynumberformat(num, alwaysShowSign) {
var s = ""+num;
if (num == undefined || s == "NaN") {
return "-";
}
if (num == "?") {
return num;
}
var negative = "";
if (s.substring(0, 1) == "-") {
negative = "-";
s = s.substring(1);
} else if (alwaysShowSign == true) {
negative = "+";
}
var i = s.length-3;
while (i > 0) {
s = s.substring(0, i) + "." + s.substring(i);
i -= 3;
}
return negative + s;
}
var _cachedDecimalPoint = undefined;
function getDecimalPoint() { //hack
if (_cachedDecimalPoint == undefined) {
_cachedDecimalPoint = new Number(1.5).toLocaleString().substring(1, 2);
if (_cachedDecimalPoint == undefined || _cachedDecimalPoint == "") {
_cachedDecimalPoint = ",";
}
}
return _cachedDecimalPoint;
}
function floatFormat(num, fracdigits, alwaysShowSign) {
var s = ""+num;
if (num == "?") {
return num;
}
var negative = "";
if (s.substring(0, 1) == "-") {
negative = "-";
s = s.substring(1);
} else if (alwaysShowSign == true) {
negative = "+";
}
var p = s.indexOf(".");
if (p >= 0) {
var i = s.substring(0, p);
var frac = s.substring(p + 1, p + 1 + fracdigits);
while (frac.length < fracdigits) {
frac += "0";
}
s = i + getDecimalPoint() + frac;
}
return negative + s;
}
function digProducedResources(res) {
var scripts = document.getElementsByTagName("script");
var found = false;
for (var j = scripts.length-1; j >= 0; j--)
{
var nScript = scripts[j];
var sCode = nScript.innerHTML;
if (sCode.indexOf('getResourceCounter') > 0)
{
found = true;
break;
}
}
if (found == false)
{
return;
}
var aCodeLines = sCode.split(';');
if (aCodeLines.length < 24)
{
return;
}
var sWood = aCodeLines[24].substring(aCodeLines[24].indexOf('(')+2,aCodeLines[24].indexOf(')')-1);
var startResourcesDelta = /production: *([0-9.]+)/.exec(sWood);
if (startResourcesDelta != null) {
startResourcesDelta = Math.floor(parseFloat(RegExp.$1) * 3600);
} else {
startResourcesDelta = 0;
}
var sTradeGood = aCodeLines[27].substring(aCodeLines[27].indexOf('(')+2,aCodeLines[27].indexOf(')')-1);
var startTradegoodDelta = /production: *([0-9.]+)/.exec(sTradeGood);
if (startTradegoodDelta != null) {
startTradegoodDelta = Math.floor(parseFloat(RegExp.$1) * 3600);
} else {
startTradegoodDelta = 0;
}
var sName = /valueElem: *\"(.*)\"/.exec(sTradeGood);
var sTradeGoodName = sName[1];
res.prodwood = startResourcesDelta;
res.prodwine = 0;
res.prodmarble = 0;
res.prodglass = 0;
res.prodsulfur = 0;
res.prodtime = EmpireBoard.StartTime;
if (sTradeGoodName == "value_wine") {
res.prodwine = startTradegoodDelta;
res.prodgood = 'wine';
} else if (sTradeGoodName == "value_marble") {
res.prodmarble = startTradegoodDelta;
res.prodgood = 'marble';
} else if (sTradeGoodName == "value_crystal") {
res.prodglass = startTradegoodDelta;
res.prodgood = 'glass';
} else if (sTradeGoodName == "value_sulfur") {
res.prodsulfur = startTradegoodDelta;
res.prodgood = 'sulfur';
}
}
function getCurrentResourceAmount(currenttime, startTime, startAmount, factPerHour) {
var elapsedhours = (currenttime - startTime) / 1000.0 / 3600.0;
return Math.max(0, Math.floor(startAmount + elapsedhours * factPerHour));
/*
spendings: [{amount: 197, tickInterval: 1200}], valueElem: "value_wine"
this.currentRes=this.startRes+this.production*Math.floor((this.currenttime-this.startdate)/1000);
this.currentRes=this.currentRes-this.spendings[i]['amount']*Math.floor((this.currenttime-this.startdate)/1000/this.spendings[i]['tickInterval'])*this.spendings[i]['tickInterval']/3600;}
197*floor(3600/1200)*1200/3600
*/
}
function realtimeFactDisplayF() {
var currenttime = new Date().getTime();
var counters = EmpireBoard.DOM.Get_Nodes("//font[contains(@id, 'myresourcecounter')]");
for(var i=0; i < counters.snapshotLength; i++) {
var c = counters.snapshotItem(i);
if (c.color != "#ff0000") {
var arr = c.getAttribute('counter').split(",");
var startTime = arr[0];
var startAmount = parseFloat(arr[1]);
var factPerHour = parseFloat(arr[2]);
var maxAmount = arr[3];
var currAmount = getCurrentResourceAmount(currenttime, startTime, startAmount, factPerHour);
if ((maxAmount != '-') && (currAmount >= maxAmount))
{
c.innerHTML = mynumberformat(maxAmount);
c.color = "#ff0000";
}
else
{
c.innerHTML = mynumberformat(currAmount);
//+' ('+Math.floor((currenttime-startTime)/1000)+' s)'
}
}
}
return (counters.snapshotLength > 0);
}
function createTooltipAttribute(tooltip, title, isFct) {
if (tooltip == undefined || tooltip == "") {
return "";
}
if (isFct == true)
{
html = tooltip;
}
else
{
if (title == undefined || title == "") {
title = "";
}
else title = "<div class=TTTitle>"+title+"</div>";
if (langtype == "rf")
{
var html = "<div dir=rtl class='TTContent RtoL'>"+title+tooltip+"</div>";
}
else
{
var html = "<div class=TTContent>"+title+tooltip+"</div>";
}
html = "'"+html.replace(/'/g, "\\'")+"'";
}
return "onmouseover=\"Tip("+html+", ABOVE, true, BORDERWIDTH, 0, SHADOW, false, BGCOLOR, '');\"";
}
function createTooltip(content, tooltip, title) {
if (tooltip == undefined || tooltip == "") {
return content;
}
return "<font "+createTooltipAttribute(tooltip, title)+">"+content+"</font>";
}
function createResCounter(startTime, startAmount, factPerHour, showTooltip, maxAmount, tradeAmount, secureAmount, arrAmount)
{
if (tradeAmount == undefined) tradeAmount = 0;
if (arrAmount == undefined) arrAmount = 0;
if ((maxAmount == undefined) || (maxAmount == '-'))
{
maxAmount = '-';
}
else
{
maxAmount = maxAmount - tradeAmount;
}
var currAmount = startAmount;
var tooltip = "";
var res;
if ((startAmount == undefined) || (startAmount+"" == "NaN"))
{
res = '?';
}
else if ((factPerHour != undefined) && (factPerHour+"" != "NaN") && (factPerHour != 0))
{
var counterClass = '';
var intfactPerHour = Math.round(factPerHour);
var dailyFact = Math.round(24 * factPerHour);
if (startTime != undefined)
{
currAmount = getCurrentResourceAmount(EmpireBoard.StartTime, startTime, startAmount, intfactPerHour);
if (intfactPerHour > 0)
{
counterClass = 'Bold';
}
else if (intfactPerHour < 0)
{
if (currAmount+(6*intfactPerHour) <= 0)
{
counterClass = 'Red';
}
else if (currAmount+(24*intfactPerHour) <= 0)
{
counterClass = 'DarkRed';
}
}
res = "<font id='myresourcecounter' counter='"+startTime+","+startAmount+","+intfactPerHour+","+maxAmount+"' class='"+counterClass+"'>"+mynumberformat(currAmount)+"</font>";
}
if (showTooltip == true)
{
tooltip = mynumberformat(intfactPerHour, true)+" / "+unsafeWindow.LocalizationStrings['timeunits']['short']['hour']+"<br> "+mynumberformat(dailyFact, true)+" / "+unsafeWindow.LocalizationStrings['timeunits']['short']['day'];
//if (intfactPerHour < 0) tooltip += "<br> " + floatFormat(-1 * (currAmount+arrAmount) / intfactPerHour, 1) + "h to empty";
if (intfactPerHour < 0) tooltip += "<br> " + getTimestring(-1 * (currAmount+arrAmount) / intfactPerHour * 60 * 60 * 1000) + " to empty";
}
}
else
{
res = mynumberformat(currAmount);
}
// Safety goods ?
if ((secureAmount > 0) && (secureAmount >= (currAmount+tradeAmount)))
{
res = '<img src="skin/layout/icon-wall.gif" class="Safe" title="Safety resources"/> '+res;
}
if (tooltip != '') res = createTooltip(res, tooltip);
return res + " ";
}
function createResProgressBar(startTime, startAmount, factPerHour, maxCapacity, secureCapacity)
{
var res = '';
if ((PROGRESS_BAR_MODE != "off") && (maxCapacity > 0) && (startTime != undefined))
{
var curres = getCurrentResourceAmount(new Date().getTime(), startTime, startAmount, factPerHour);
var perc = Math.min(100, Math.round(curres / maxCapacity * 100.0));
var remaining = "";
var remhour = 100000000;
if (curres >= maxCapacity)
{
// no more
}
else if (factPerHour > 0) {
remhour = (maxCapacity - curres) / factPerHour;
//remaining = "<br>"+floatFormat(remhour, 1) + "h to full";
remaining = "<br>"+getTimestring(remhour*60*60*1000)+" to full";
} else if (factPerHour < 0) {
//remaining = "<br>"+floatFormat(curres / -factPerHour, 1) + "h to empty";
remaining = "<br>"+getTimestring((curres / -factPerHour)*60*60*1000) + " to empty";
}
var cl = "Normal";
var vperc = perc;
if ((curres > 0) && (vperc < 4)) vperc = 4;
if ((PROGRESS_BAR_MODE == "time") && (factPerHour != 0))
{
if (remhour <= 1)
{
cl = "Full";
}
else if (remhour < 24)
{
cl = "AlmostFull";
}
else if (remhour < 72)
{
cl = "Warning";
}
}
else
{
if (perc >= 99) {
cl = "Full";
} else if (perc >= 90) {
cl = "AlmostFull";
} else if (perc >= 80) {
cl = "Warning";
}
}
res += "<table class='myPercent' "+createTooltipAttribute(mynumberformat(maxCapacity) + " total capacity<br>"+mynumberformat(secureCapacity)+" safety capacity<br>" + perc+"% full" + remaining)+">"+
"<tr>"+
"<td width='"+vperc+"%' class='"+cl+"'></td>"+
"<td width='"+(100-vperc)+"%'></td>"+
"</tr>"+
"</table>";
}
else if (PROGRESS_BAR_MODE != "off")
{
res += "<table class='myPercent'>"+
"<tr>"+
"<td></td>"+
"</tr>"+
"</table>";
}
return res;
}
function createCounter(startTime, startAmount, factPerHour, showTooltip, maxCapacity, plusText) {
intfactPerHour = Math.round(factPerHour);
var dailyFact = Math.round(24 * factPerHour);
var tooltip = "";
if ((showTooltip == true) && (dailyFact != 0)) {
tooltip = mynumberformat(intfactPerHour, true)+" / h, "+mynumberformat(dailyFact, true)+" / d";
}
var res;
if (factPerHour != 0) {
res = "<font id='myresourcecounter' counter='"+startTime+","+startAmount+","+factPerHour+"'>x</font>";
if (intfactPerHour > 0) {
res = "<b>"+res+"</b>";
}
} else {
res = mynumberformat(startAmount);
}
if (plusText != undefined) {
res += '<br>' + plusText;
}
res = createTooltip(res, tooltip);
//progress bar :)
if ((PROGRESS_BAR_MODE != "off") && (maxCapacity > 0)) {
var curres = getCurrentResourceAmount(new Date().getTime(), startTime, startAmount, factPerHour);
var perc = Math.min(100, Math.round(curres / maxCapacity * 100.0));
var remaining = "";
var remhour = 100000000;
if (factPerHour > 0) {
remhour = (maxCapacity - curres) / factPerHour;
remaining = "<br>"+floatFormat(remhour, 1) + " h to full";
} else if (factPerHour < 0) {
remaining = "<br>"+floatFormat(curres / -factPerHour, 1) + " h to empty";
}
var cl = "myPercentNormal";
if (PROGRESS_BAR_MODE == "percent") {
if (perc == 100) {
cl = "myPercentFull";
} else if (perc > 95) {
cl = "myPercentAlmostFull";
} else if (perc > 80) {
cl = "myPercentWarning";
}
} else if (PROGRESS_BAR_MODE == "time") {
if (remhour == 0) {
cl = "myPercentFull";
} else if (remhour < 8) {
cl = "myPercentAlmostFull";
} else if (remhour < 16) {
cl = "myPercentWarning";
}
}
res += "<table class='myPercent'>"+
"<tr class='myPercent' "+createTooltipAttribute(mynumberformat(maxCapacity) + " total capacity<br>" + perc+"% full" + remaining)+">"+
"<td width='"+perc+"%' class='"+cl+"'></td>"+
"<td width='"+(100-perc)+"%' class='myPercentRemaining'></td>"+
"</tr>"+
"</table>";
}
return res;
}
function myTimeCounterF() {
var currenttime = new Date().getTime();
var cs = EmpireBoard.DOM.Get_Nodes("//font[contains(@id, 'mytimecounter')]");
for (var i = 0; i < cs.snapshotLength; i++) {
var c = cs.snapshotItem(i);
var abstime = Math.round(c.getAttribute('counter'));
hdata = (abstime - currenttime) / 1000;
if (hdata > 0) {
var s = "";
/*
var hday = Math.floor(hdata / 86400);
var hhor = Math.floor((hdata - (hday * 86400)) / 3600);
var hmin = Math.floor((hdata - (hday * 86400) - (hhor * 3600)) / 60);
var hsec = Math.floor(hdata - (hday * 86400) - (hhor * 3600) - (hmin * 60));
var b = false;
if (b || hday > 0) { s += hday+"d "; b = true; }
b = true;
if (b || hhor > 0) { s += hhor+":"; b = true; }
if (b || hmin > 0) { s += EmpireBoard.Str.TwoDigit(hmin)+":"; b = true; }
if (b || hsec > 0) { s += EmpireBoard.Str.TwoDigit(hsec)+""; b = true; }
*/
s = getTimestring(hdata*1000);
c.innerHTML = s;
} else {
c.innerHTML = "-";
}
}
//var found = realtimeFactDisplayF();
}
function createTimeCounter(enddate) {
if (enddate != undefined && enddate != "") {
var s = smartDateFormat(enddate);
return createTooltip("<font id='mytimecounter' counter='"+enddate+"'></font>", s);
}
return "";
}
function createProd(prodPerHour, extraTooltip) {
if (prodPerHour == "-" || prodPerHour == "?") {
return prodPerHour;
}
if (""+prodPerHour == "NaN" || ""+prodPerHour == "" || ""+prodPerHour == "0" || prodPerHour == undefined || ""+prodPerHour == "???") {
return "";
}
var tooltip = mynumberformat(Math.round(24 * prodPerHour), true)+" / "+unsafeWindow.LocalizationStrings['timeunits']['short']['day'];
if (extraTooltip != undefined) {
tooltip += ", "+extraTooltip;
}
return createTooltip(mynumberformat(Math.round(prodPerHour), true), tooltip);
}
function createResearch(prodPerHour, extraTooltip) {
if (prodPerHour == "-" || prodPerHour == "?") {
return prodPerHour;
}
if (""+prodPerHour == "0") {
return '+0';
}
if (""+prodPerHour == "NaN" || ""+prodPerHour == "" || prodPerHour == undefined || ""+prodPerHour == "???") {
return "";
}
var tooltip = mynumberformat(Math.round(24 * prodPerHour), true)+" / "+unsafeWindow.LocalizationStrings['timeunits']['short']['day'];
if (extraTooltip != undefined) {
tooltip += ", "+extraTooltip;
}
return createTooltip(mynumberformat(Math.round(prodPerHour), true), tooltip);
}
function createSimpleProd(prodPerHour) {
if (""+prodPerHour == "NaN" || ""+prodPerHour == "" || ""+prodPerHour == "0" || prodPerHour == undefined || ""+prodPerHour == "???") {
return "";
}
return mynumberformat(Math.round(prodPerHour), true);
}
function createIncome(prodPerHour, extraTooltip, classname)
{
if (classname == undefined) classname = '';
if (""+prodPerHour == "NaN" || ""+prodPerHour == "" || ""+prodPerHour == "?" || prodPerHour == undefined || ""+prodPerHour == "???")
{
return "?";
}
else if (""+prodPerHour == "0")
{
return "0";
}
else
{
var tooltip = mynumberformat(Math.round(24 * prodPerHour), true)+" / "+unsafeWindow.LocalizationStrings['timeunits']['short']['day'];
if ((extraTooltip != undefined) && (extraTooltip != ''))
{
tooltip += "<br> "+extraTooltip;
}
return createTooltip('<span class="'+classname+'">'+mynumberformat(Math.round(prodPerHour), true)+'</span>', tooltip);
}
}
function createMoreGoods(sum)
{
var output = '';
if (sum > 0)
{
output = '<font class="More">'+mynumberformat(sum, true)+' </font>';
}
return output;
}
function createReservedGold(sum)
{
var output = '';
if (sum == '?')
{
output = '<font class="More">?</font>';
}
else if (sum === 0)
{
output = '<font class="More">-</font>';
}
else if ((sum != undefined) && (sum != ''))
{
output = '<font class="More" title="Reserved gold">'+mynumberformat(sum, false)+'</font>';
}
return output;
}
function getArrValue(arr, key, defaultValue) {
if (arr == undefined || arr[key] == undefined) {
return defaultValue;
}
return arr[key];
}
function createLink(text, href, attrs) {
return "<a href=\""+href+"\" "+attrs+">"+text+"</a>";
}
// From kChen script with some fixes
function changeCity(city_id) {
var postdata = getFormInput("//form[@id='changeCityForm']//input");
postdata = postdata + "&cityId="+city_id+"&view=city";
var xmlhttp;
if(window.XMLHttpRequest){
xmlhttp = new XMLHttpRequest();
}
xmlhttp.open('POST','http://' + location.host + '/index.php',false);
xmlhttp.setRequestHeader('User-agent',window.navigator.userAgent);
xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
xmlhttp.setRequestHeader('Accept','application/atom+xml,application/xml,text/xml');
xmlhttp.setRequestHeader('Referer','http://' + location.host + '/index.php');
xmlhttp.setRequestHeader('Cookie',document.cookie);
xmlhttp.overrideMimeType('text/javascript; charset='+document.characterSet);
xmlhttp.send(postdata);
var node = getDocument(xmlhttp.responseText);
return node.getElementsByTagName("input")[2].value;
}
function getDocument(responseText) {
var html = document.createElement("html");
html.innerHTML = responseText;
var response = document.implementation.createDocument("", "", null);
response.appendChild(html);
return response;
}
function getFormInput(path, root, isaction) {
isaction = (isaction == undefined) ? false : true;
var nodes = $x(path, root);
if (nodes.length<=0) return null;
var postdata = nodes[0].name+"="+nodes[0].value;
for(var i = 1; i < nodes.length; i++) {
if (nodes[i].name == "actionRequest" && !isaction) nodes[i].value = EmpireBoard.Ikariam.ActionRequest();
postdata = postdata +"&" + nodes[i].name+"="+nodes[i].value;
}
return postdata;
}
function $X( xpath, root ) {
var got = $x( xpath, root );
return got instanceof Array ? got[0] : got;
}
function $x( xpath, root ) {
var doc = root ? root.evaluate ? root : root.ownerDocument : document, next;
var got = doc.evaluate( xpath, root||doc, null, 0, null ), result = [];
switch (got.resultType) {
case got.STRING_TYPE:
return got.stringValue;
case got.NUMBER_TYPE:
return got.numberValue;
case got.BOOLEAN_TYPE:
return got.booleanValue;
default:
while (next = got.iterateNext())
result.push( next );
return result;
}
}
function applyChangeCityEvents()
{
var nodes = $x("//table//a[contains(@class,'changeCity')]");
for(var i=0; i<nodes.length; i++)
{
if (current_city_id != nodes[i].getAttribute("cityid"))
nodes[i].addEventListener('click', changeCityEvent, false);
}
}
function changeCityEvent(e)
{
var obj = e.srcElement ? e.srcElement:e.target;
obj.style.cursor="wait";
document.getElementsByTagName("body")[0].style.cursor="wait";
while (obj.tagName != 'A')
{
obj = obj.parentNode;
}
var city_id = obj.getAttribute("cityid");
EmpireBoard.Ikariam._ActionRequest = changeCity(city_id);
}
function createLinkToMap(city_id) {
var res = getCity(city_id);
var rHTML = '';
if (res.city_coord != undefined)
{
cCoord = res.city_coord.split(":");
rHTML += '<a href="?view=worldmap_iso&islandX='+getIntValue(cCoord[0],'')+'&islandY='+getIntValue(cCoord[1],'')+'" title="' + res.city_coord + ' View world map"><img align="absmiddle" src="skin/layout/icon-world.gif" /></a>';
}
if ((res.island_id != undefined) && (res.city_coord != undefined))
{
rHTML += '<a href="?view=island&id=' + res.island_id + '&selectCity='+city_id+'" title="' + res.city_coord + ' View island"><img align="absmiddle" src="skin/layout/icon-island.gif" /></a>';
}
else if (res.island_id != undefined)
{
rHTML += '<a href="?view=island&id=' + res.island_id + '&selectCity='+city_id+'" title="View island"><img align="absmiddle" src="skin/layout/icon-island.gif" /></a>';
}
return rHTML;
}
function createLinkToTransportGoods(city_id)
{
var res = getCity(city_id);
var rHTML = '';
if (current_city_id == city_id)
{
rHTML += '<img hspace="4" height="12" src="skin/actions/transport_disabled.gif" align="absmiddle" />';
}
else
{
rHTML += '<a href="?view=transport&destinationCityId='+city_id+'" title="Transports goods"><img hspace="4" height="12" src="skin/actions/transport.gif" align="absmiddle" /></a>';
}
return rHTML;
}
function createLinkToAgora(city_id)
{
var rHTML = '';
if (EmpireBoard.Ikariam.Is_Version_032x() == true)
{
var res = getCity(city_id);
if (res.island_id != undefined)
{
rHTML += '<a href="?view=islandBoard&id='+res.island_id+'" title="Island Agora"><img hspace="5" height="12" src="skin/board/schriftrolle_offen2.gif" align="absmiddle" /></a>';
}
}
return rHTML;
}
function createLinkToChangeCity(text, city_id, city_index, sup_text, sup_class, sup_title) {
var res = getCity(city_id);
var rHTML = '';
if (res.city_name != undefined)
{
cName = res.city_name;
}
else
{
cName = Trim(text);
}
if (current_city_id == city_id)
{
rHTML += '<b>'+cName+'</b>';
}
else
{
rHTML += createLink(cName, "?cityId="+city_id, "title=\"Change current city\" onclick=\"var s = document.getElementById('citySelect'); s.selectedIndex = "+city_index+"; s.form.submit(); return false;\"");
}
if ((sup_text != undefined) && (sup_text != '') && (sup_text != 0))
{
if (sup_class == undefined) sup_class = '';
if (sup_title == undefined) sup_title = '';
rHTML += '<sup class="'+sup_class+'" title="'+sup_title+'">'+sup_text+'</sup>';
}
return rHTML;
}
function setViewRqTime(view, city_id, newTime, force)
{
if (view == undefined) view = '';
if (newTime == undefined) newTime = EmpireBoard.StartTime;
if (force == undefined) force = false;
if ((city_id == undefined) || (city_id <= 0))
{
if (view == 'merchantNavy')
{
if (config.merchantNavyrqtime == undefined)
{
config.merchantNavyrqtime = newTime;
}
else if (EmpireBoard.StartTime > config.merchantNavyrqtime)
{
config.merchantNavyrqtime = newTime;
}
else if (newTime < config.merchantNavyrqtime)
{
config.merchantNavyrqtime = newTime;
}
else if (force == true)
{
config.merchantNavyrqtime = newTime;
}
}
else if (view == 'finances')
{
if (config.financesrqtime == undefined)
{
config.financesrqtime = newTime;
}
else if (EmpireBoard.StartTime > config.financesrqtime)
{
config.financesrqtime = newTime;
}
else if (newTime < config.financesrqtime)
{
config.financesrqtime = newTime;
}
}
else if (view == 'militaryAdvisorMilitaryMovements')
{
if (config.mAMMrqtime == undefined)
{
config.mAMMrqtime = newTime;
}
else if (EmpireBoard.StartTime > config.mAMMrqtime)
{
config.mAMMrqtime = newTime;
}
else if (newTime < config.mAMMrqtime)
{
config.mAMMrqtime = newTime;
}
}
}
else
{
var city = getCity(city_id);
if (view == '')
{
if (city.rqtime == undefined)
{
city.rqtime = newTime;
}
else if (EmpireBoard.StartTime > city.rqtime)
{
city.rqtime = newTime;
}
else if (newTime < city.rqtime)
{
city.rqtime = newTime;
}
}
else if (view == 'cityMilitary-army')
{
if (city.cityMilitaryarmyrqtime == undefined)
{
city.cityMilitaryarmyrqtime = newTime;
}
else if (EmpireBoard.StartTime > city.cityMilitaryarmyrqtime)
{
city.cityMilitaryarmyrqtime = newTime;
}
else if (newTime < city.cityMilitaryarmyrqtime)
{
city.cityMilitaryarmyrqtime = newTime;
}
}
else if (view == 'cityMilitary-fleet')
{
if (city.cityMilitaryfleetrqtime == undefined)
{
city.cityMilitaryfleetrqtime = newTime;
}
else if (EmpireBoard.StartTime > city.cityMilitaryfleetrqtime)
{
city.cityMilitaryfleetrqtime = newTime;
}
else if (newTime < city.cityMilitaryfleetrqtime)
{
city.cityMilitaryfleetrqtime = newTime;
}
}
else if (city.buildings[view] != undefined)
{
if (city.buildings[view].rqtime == undefined)
{
city.buildings[view].rqtime = newTime;
}
else if (EmpireBoard.StartTime > city.buildings[view].rqtime)
{
city.buildings[view].rqtime = newTime;
}
else if (newTime < city.buildings[view].rqtime)
{
city.buildings[view].rqtime = newTime;
}
else if (force == true)
{
city.buildings[view].rqtime = newTime;
}
}
}
}
function reportViewToSurvey(view, city_id)
{
if (view == undefined) view = '';
var report = false;
if ((city_id == undefined) || (city_id <= 0))
{
if (view == 'finances')
{
if (config.financestime == undefined)
{
report = true;
}
else if (config.financestime == 0)
{
report = true;
}
else if ((config.financesrqtime != undefined) && (config.financesrqtime <= EmpireBoard.StartTime) && (config.financesrqtime > config.financestime))
{
report = true;
}
else if (config.financestime <= (EmpireBoard.StartTime - 1000*60*60*24*7))
{
report = true;
}
}
else if (view == 'merchantNavy')
{
if (config.merchantNavytime == undefined)
{
report = true;
}
else if (config.merchantNavytime == 0)
{
report = true;
}
else if ((config.merchantNavyrqtime != undefined) && (config.merchantNavyrqtime <= EmpireBoard.StartTime) && (config.merchantNavyrqtime > config.merchantNavytime))
{
report = true;
}
else if (config.merchantNavytime <= (EmpireBoard.StartTime - 1000*60*60*24*7))
{
report = true;
}
}
else if (view == 'militaryAdvisorMilitaryMovements')
{
if (config.mAMMtime == undefined)
{
report = true;
}
else if (config.mAMMtime == 0)
{
report = true;
}
else if ((config.mAMMrqtime != undefined) && (config.mAMMrqtime <= EmpireBoard.StartTime) && (config.mAMMrqtime > config.mAMMtime))
{
report = true;
}
else if (config.mAMMtime <= (EmpireBoard.StartTime - 1000*60*60*24*7))
{
report = true;
}
}
}
else
{
var city = getCity(city_id);
if (view == '')
{
if (city.prodtime == undefined)
{
report = true;
}
else if (city.prodtime == 0)
{
report = true;
}
else if ((city.rqtime != undefined) && (city.rqtime <= EmpireBoard.StartTime) && (city.rqtime > city.prodtime))
{
report = true;
}
else if (city.prodtime <= (EmpireBoard.StartTime - 1000*60*60*24*7))
{
report = true;
}
}
else if (view == 'city')
{
if (city.citytime == undefined)
{
report = true;
}
else if (city.citytime == 0)
{
report = true;
}
/*
else if ((city.underConstructionName != '') && (city.underConstructionTime <= EmpireBoard.StartTime))
{
report = true;
}
else if (city.citytime <= (EmpireBoard.StartTime - 1000*60*60*24*7))
{
report = true;
}
*/
}
else if ((view == 'cityMilitary-army') || (view == 'barracks'))
{
var recentTime = 0;
if (city.cityMilitaryarmytime != undefined) recentTime = city.cityMilitaryarmytime;
if ((city.buildings['barracks'] != undefined) && (city.buildings['barracks'].uptime > recentTime)) recentTime = city.buildings['barracks'].uptime;
if (recentTime == undefined)
{
report = true;
}
else if (recentTime == 0)
{
report = true;
}
else if ((city.buildings['barracks'] != undefined) && (city.buildings['barracks'].rqtime != undefined) && (city.buildings['barracks'].rqtime <= EmpireBoard.StartTime) && (city.buildings['barracks'].rqtime > city.buildings['barracks'].uptime))
{
// Besoin d'aller dans la caserne
report = false;
}
else if ((city.cityMilitaryarmyrqtime != undefined) && (city.cityMilitaryarmyrqtime <= EmpireBoard.StartTime) && (city.cityMilitaryarmyrqtime > recentTime))
{
report = true;
}
else if (recentTime <= (EmpireBoard.StartTime - 1000*60*60*24*7))
{
report = true;
}
}
else if ((view == 'cityMilitary-fleet') || (view == 'shipyard'))
{
var recentTime = 0;
if (city.cityMilitaryfleettime != undefined) recentTime = city.cityMilitaryfleettime;
if ((city.buildings['shipyard'] != undefined) && (city.buildings['shipyard'].uptime > recentTime)) recentTime = city.buildings['shipyard'].uptime;
if (recentTime == undefined)
{
report = true;
}
else if (recentTime == 0)
{
report = true;
}
else if ((city.buildings['shipyard'] != undefined) && (city.buildings['shipyard'].rqtime != undefined) && (city.buildings['shipyard'].rqtime <= EmpireBoard.StartTime) && (city.buildings['shipyard'].rqtime > city.buildings['shipyard'].uptime))
{
// Besoin d'aller dans le chantier
report = false;
}
else if ((city.cityMilitaryfleetrqtime != undefined) && (city.cityMilitaryfleetrqtime <= EmpireBoard.StartTime) && (city.cityMilitaryfleetrqtime > recentTime))
{
report = true;
}
else if (recentTime <= (EmpireBoard.StartTime - 1000*60*60*24*7))
{
report = true;
}
/*
if ((view == 'cityMilitary-fleet') && (city.cityMilitaryfleetrqtime != undefined) && (city.cityMilitaryfleetrqtime > EmpireBoard.StartTime))
{
EmpireBoard.Log.Add("Will request attention at cityMilitary-fleet of city["+city_id+"] remaining "+((city.cityMilitaryfleetrqtime-EmpireBoard.StartTime)/1000)+"s");
}
*/
}
// Any buildings
if (buildings[view] != undefined)
{
if (city.buildings[view] != undefined)
{
if (view == 'townHall')
{
if (city.buildings[view].uptime == undefined)
{
report = true;
}
else if (city.buildings[view].uptime == 0)
{
report = true;
}
else if ((city.buildings[view].rqtime != undefined) && (city.buildings[view].rqtime <= EmpireBoard.StartTime) && (city.buildings[view].rqtime > city.buildings[view].uptime))
{
report = true;
}
else if (city.buildings[view].uptime <= (EmpireBoard.StartTime - 1000*60*60*24*7))
{
report = true;
}
}
else if (view == 'tavern')
{
if (city.buildings[view].uptime == undefined)
{
report = true;
}
else if (city.buildings[view].uptime == 0)
{
report = true;
}
}
else if (view == 'branchOffice')
{
if (city.buildings[view].uptime == undefined)
{
report = true;
}
else if (city.buildings[view].uptime == 0)
{
report = true;
}
else if ((city.buildings[view].rqtime != undefined) && (city.buildings[view].rqtime <= EmpireBoard.StartTime) && (city.buildings[view].rqtime > city.buildings[view].uptime))
{
report = true;
}
}
else
{
if (city.buildings[view].uptime == undefined)
{
}
else if (city.buildings[view].uptime == 0)
{
}
else if ((city.buildings[view].rqtime != undefined) && (city.buildings[view].rqtime <= EmpireBoard.StartTime) && (city.buildings[view].rqtime > city.buildings[view].uptime))
{
report = true;
}
}
}
}
}
return (report == true ? '!' : '');
}
function createLinkToCityView(city_id) {
var rHTML = '';
rHTML += '<a href="?view=city&cityId='+city_id+'" class="changeCity" cityid="'+city_id+'" title="View city"><img align="absmiddle" src="skin/layout/icon-city2.gif" /></a>';
if (reportViewToSurvey('city', city_id) == '!')
{
rHTML += '<sup class=Red title="Require attention">!</sup>';
}
else
{
rHTML += ' ';
}
return rHTML;
}
function createLinkToMilitaryView(city_id) {
var rHTML = '';
rHTML += '<a href="?view=cityMilitary-army&id='+city_id+'" class="changeCity" cityid="'+city_id+'" title="View army overview"><img align="absmiddle" src="skin/img/city/building_barracks.gif" /></a>';
if (reportViewToSurvey('cityMilitary-army', city_id) == '!')
{
rHTML += '<sup class=Red title="Require attention">!</sup>';
}
else
{
rHTML += ' ';
}
rHTML += '<a href="?view=cityMilitary-fleet&id='+city_id+'" class="changeCity" cityid="'+city_id+'" title="View fleet overview"><img align="absmiddle" src="skin/img/city/building_shipyard.gif" /></a>';
if (reportViewToSurvey('cityMilitary-fleet', city_id) == '!')
{
rHTML += '<sup class=Red title="Require attention">!</sup>';
}
else
{
rHTML += ' ';
}
return rHTML;
}
function createLinkToDeploy(city_id)
{
var res = getCity(city_id);
var rHTML = '';
if (current_city_id == city_id)
{
rHTML += '<img hspace="5" height="12" src="skin/actions/move_army_disabled.gif" align="absmiddle" />';
rHTML += '<img hspace="4" height="12" src="skin/actions/move_fleet_disabled.gif" align="absmiddle" />';
}
else
{
rHTML += '<a href="?view=deployment&deploymentType=army&destinationCityId='+city_id+'" title="Deploy troops"><img hspace="5" height="12" src="skin/actions/move_army.gif" align="absmiddle" /></a>';
rHTML += '<a href="?view=deployment&deploymentType=fleet&destinationCityId='+city_id+'" title="Station fleets"><img hspace="4" height="12" src="skin/actions/move_fleet.gif" align="absmiddle" /></a>';
}
return rHTML;
}
function createLinkToFinanceNavyViews() {
var rHTML = '';
rHTML += '<a href="?view=merchantNavy" title="View merchant navy"><img align="absmiddle" src="skin/img/city/building_port.gif" /></a>';
if (reportViewToSurvey('merchantNavy') == '!')
{
rHTML += '<sup class=Red title="Require attention">!</sup>';
}
else
{
rHTML += ' ';
}
rHTML += '<a href="?view=finances" title="View finances"><img align="absmiddle" src="skin/img/city/building_townhall.gif" /></a>';
if (reportViewToSurvey('finances') == '!')
{
rHTML += '<sup class=Red title="Require attention">!</sup>';
}
else
{
rHTML += ' ';
}
return rHTML;
}
function createLinkToMilitaryAdvisorView() {
var rHTML = '';
rHTML += '<a href="?view=militaryAdvisorMilitaryMovements" title="View military advisor"><img align="absmiddle" src="skin/relatedCities/general.gif" hspace="2"/></a>';
// skin/layout/icon-helmet.gif
if (reportViewToSurvey('militaryAdvisorMilitaryMovements') == '!')
{
rHTML += '<sup class=Red title="Require attention">!</sup>';
}
else
{
rHTML += ' ';
}
return rHTML;
}
// késako ?
function createLinkToForeignCity(text, city_id) {
return createLink(text, "?view=island&id="+city_id);
}
function createLinkToResource(text, island_id, city_id, city_index) {
if (island_id != undefined && island_id != "") {
return createLink(text, "?action=header&function=changeCurrentCity&oldView=tradegood&view=resource&type=resource&id="+island_id+"&cityId="+city_id, "");
}
return text;
}
function createLinkToResourceCond(condition, text, island_id, city_id, city_index) {
if (condition == true && island_id != undefined && island_id != "") {
return createLink(text, "?view=resource&type=resource&id="+island_id, "class=changeCity cityid="+city_id);
}
return text;
}
function createLinkToTradegoodCond(condition, text, island_id, city_id, city_index) {
if (condition == true && island_id != undefined && island_id != "") {
return createLink(text, "?view=tradegood&type=tradegood&id="+island_id, "class=changeCity cityid="+city_id);
}
return text;
}
function strToDatetime(str) {
var d;
if (/([0-9][0-9][0-9][0-9])\.([0-9][0-9])\.([0-9][0-9])[^0-9]*([0-9]+)\:([0-9]+)\:([0-9]+)/.exec(str) != null) {
d = new Date(RegExp.$1, RegExp.$2, RegExp.$3, RegExp.$4, RegExp.$5, RegExp.$6);
} else if (/([0-9][0-9])\.([0-9][0-9])\.([0-9][0-9][0-9][0-9])[^0-9]*([0-9]+)\:([0-9]+)\:([0-9]+)/.exec(str) != null) {
d = new Date(RegExp.$3, RegExp.$2, RegExp.$1, RegExp.$4, RegExp.$5, RegExp.$6);
}
if (d != undefined) {
return d.getTime();
}
return undefined;
}
function dropUndeliveredLoadingGoods()
{
var arrivinggoods = getArrValue(config, 'arrivinggoods', []);
var city_id;
var i = 0;
for (city_id in arrivinggoods)
{
var rows = getArrValue(arrivinggoods, city_id, []);
var city = getCity(city_id);
var key;
for (key in rows)
{
var row = rows[key];
var quest = getArrValue(row, "quest", "");
if (quest == 'loading')
{
if (delete config.arrivinggoods[city_id][key]) i++;
continue;
}
var arrivetime = parseInt(getArrValue(row, "arrivetime", 0));
if (EmpireBoard.StartTime < arrivetime)
{
if (delete config.arrivinggoods[city_id][key]) i++;
continue;
}
}
}
//if (i > 0) window.status = 'Removed '+i+' undelivered/loading transports';
}
function dropDeliveredGoods(city_id)
{
var rows = getArrValue(config.arrivinggoods, city_id, []);
var city = getCity(city_id);
var key;
var i = 0;
for (key in rows)
{
var row = rows[key];
var arrivetime = parseInt(getArrValue(row, "arrivetime", 0));
if (arrivetime <= city.prodtime)
{
if (delete config.arrivinggoods[city_id][key]) i++;
}
}
//if (i > 0) window.status = 'Removed '+i+' delivered transports';
}
function getArrivingGoodsEvent(e)
{
if (!e) { e = window.event; }
var obj = e.srcElement ? e.srcElement : e.target;
//var targetObj = obj;
while (obj.hasAttribute('resource') == false)
{
obj = obj.parentNode;
}
var resName = obj.getAttribute('resource');
while (obj.hasAttribute('cityid') == false)
{
obj = obj.parentNode;
}
var city_id = parseInt(obj.getAttribute('cityid'));
//window.status = 'Resource: '+resName+' City ID: '+city_id;
var tooltipHTML = EmpireBoard.Tooltip.innerHTML(getArrivingGoodsTTC(city_id, resName));
EmpireBoard.Tooltip.show(tooltipHTML);
}
function applyArrivingGoodEvents()
{
var nodes = $x("//div[@id='EmpireBoard']//*[contains(@class,'MoreGoods')]");
for(var i=0; i<nodes.length; i++)
{
nodes[i].addEventListener('mouseover', function(e) { getArrivingGoodsEvent(e); }, false);
nodes[i].addEventListener('mousemove', function(e) { EmpireBoard.Tooltip.mouseMove(e); }, false);
nodes[i].addEventListener('mouseout', function(e) { EmpireBoard.Tooltip.hide(e); }, false);
}
}
function getArrivingGoodsTTC(city_id, resName)
{
var _nowTime = new Date().getTime();
var tooltip = "<table>";
var sum = 0;
var city = getCity(city_id);
var rows = getArrValue(config.arrivinggoods, city_id, []);
var key;
var higherTime = 0;
for (key in rows)
{
var row = rows[key];
var res = row["res"];
var a = parseInt(getArrValue(res, resName, 0));
var arrivetime = parseInt(getArrValue(row, "arrivetime", ""));
if ((a > 0) && (arrivetime > city.prodtime))
{
sum += a;
var startcity = getArrValue(row, "startcity", "");
var quest = getArrValue(row, "quest", "");
if (_nowTime >= arrivetime)
{
var counter = "(delivered)";
var smartDate = '';
}
else if (quest == 'loading')
{
var counter = "(loading)";
var smartDate = '';
}
else
{
if (arrivetime > higherTime) higherTime = arrivetime;
var counter = "(<font id='mytimecounter' counter='"+Math.round(arrivetime)+"' class='time_counter'>__:__:__</font>)";
var smartDate = smartDateFormat(arrivetime,false);
}
var fromLocation = "« <i>" + startcity + "</i>";
tooltip += "<tbody><tr>"+
"<td valign=top>+</td>"+
"<td align=right valign=top><b>"+mynumberformat(a, false) + "</b> </td>"+
"<td align=left>"+fromLocation+"</td>"+
"</tr><tr class=Small>"+
"<td align=right colspan=3> " + smartDate + " "+counter+"</td>"+
"</tr></tbody>";
}
}
var tradinggoods = 0;
var hourlyprod = 0;
var resAmount = parseInt(getArrValue(city, resName, 0));
if (resName == 'wood')
{
tradinggoods = city.tradewood;
hourlyprod = city.prodwood;
resAmount = getCurrentResourceAmount(_nowTime, city.prodtime, city.wood, city.prodwood);
}
else if (resName == 'wine')
{
tradinggoods = city.tradewine;
var wineUsage = 0;
var cellarLevel = getBuildingLevel(city_id, "vineyard", "-");
if (city.wineUsageId != undefined)
{
wineUsage = tavernWineUsage[city.wineUsageId];
if (cellarLevel != '-')
{
wineSave = wineUsage * cellarLevel;
wineSave = Math.round(wineSave / 100);
wineUsage = wineUsage - wineSave;
}
}
hourlyprod = city.prodwine - wineUsage;
resAmount = getCurrentResourceAmount(_nowTime, city.prodtime, city.wine, city.prodwine - wineUsage);
}
else if (resName == 'marble')
{
tradinggoods = city.trademarble;
hourlyprod = city.prodmarble;
resAmount = getCurrentResourceAmount(_nowTime, city.prodtime, city.marble, city.prodmarble);
}
else if (resName == 'glass')
{
tradinggoods = city.tradeglass;
hourlyprod = city.prodglass;
resAmount = getCurrentResourceAmount(_nowTime, city.prodtime, city.glass, city.prodglass);
}
else if (resName == 'sulfur')
{
tradinggoods = city.tradesulfur;
hourlyprod = city.prodsulfur;
resAmount = getCurrentResourceAmount(_nowTime, city.prodtime, city.sulfur, city.prodsulfur);
}
if ((tradinggoods != undefined) && (parseInt(tradinggoods) > 0))
{
sum += parseInt(tradinggoods);
tooltip += "<tbody><tr>"+
"<td>+</td>"+
"<td align=right><b>"+mynumberformat(parseInt(tradinggoods), false) + "</b> </td>"+
"<td align=left>« <i>" + buildings['branchOffice'][0] + "</i></td>"+
"</tr></tbody>";
}
if (resAmount > 0)
{
tooltip += "<tbody><tr>"+
"<td>+</td>"+
"<td align=right><b>"+mynumberformat(resAmount, false) + "</b> </td>"+
"<td align=left>« <i>" + buildings['warehouse'][0] + "</i></td>"+
"</tr></tbody>";
}
if (sum > 0)
{
tooltip += "<tfoot><tr>"+
"<td>=</td>"+
"<td align=right><b>"+mynumberformat(sum+resAmount, false) + "</b> </td>"+
"<td></td>"+
"</tr>";
if ((hourlyprod != 0) && (higherTime > _nowTime + (1000 * 60 * 20)))
{
var restHours = (higherTime - _nowTime) / (1000 * 60 * 60);
var prodSign = '+';
if (hourlyprod < 0) prodSign = '-';
tooltip += "<tr class=Small>"+
"<td>"+prodSign+"</td>"+
"<td align=right>"+mynumberformat(Math.abs(hourlyprod), false) + " </td>"+
"<td align=left>x " + floatFormat(restHours, 1) + unsafeWindow.LocalizationStrings['timeunits']['short']['hour']+"</td>"+
"</tr>";
tooltip += "<tr class=Small>"+
"<td>=</td>"+
"<td align=right>"+mynumberformat(sum+resAmount+Math.floor(restHours*hourlyprod), false) + " </td>"+
"<td align=left>» " + smartDateFormat(higherTime,false)+"</td>"+
"</tr>";
}
tooltip += "</tfoot>";
}
tooltip += "</table>";
return tooltip;
}
function getArrivingGoodsSum(city_id, resName)
{
var sum = 0;
var city = getCity(city_id);
var rows = getArrValue(config.arrivinggoods, city_id, []);
var key;
for (key in rows)
{
var row = rows[key];
var res = row["res"];
var a = getArrValue(res, resName, 0);
var arrivetime = parseInt(getArrValue(row, "arrivetime", ""));
if ((a > 0) && (arrivetime > city.prodtime)) sum += a;
}
return sum;
}
function getDeliveredGoodsTransports(city_id, resName)
{
var sum = 0;
var city = getCity(city_id);
var rows = getArrValue(config.arrivinggoods, city_id, []);
var key;
for (key in rows)
{
var row = rows[key];
var res = row["res"];
var a = getArrValue(res, resName, 0);
var arrivetime = parseInt(getArrValue(row, "arrivetime", ""));
if ((a > 0) && (arrivetime > city.prodtime) && (EmpireBoard.StartTime >= arrivetime)) sum++;
}
return sum;
}
function getArrivingGoods(city_id, resName, tradinggoods, resAmount, ArrivingGoodsSum) {
var sum = 0;
var found = false;
if (ArrivingGoodsSum == undefined) ArrivingGoodsSum = getArrivingGoodsSum(city_id, resName);
if (ArrivingGoodsSum > 0)
{
sum += ArrivingGoodsSum;
found = true;
}
if ((tradinggoods != undefined) && (parseInt(tradinggoods) > 0))
{
sum += parseInt(tradinggoods);
}
var s = "<font class='More'>- </font>";
if (found == true) {
//s = "<font class='More Green' "+createTooltipAttribute(tooltip)+">"+mynumberformat(sum, true)+"</font>";
s = "<font class='More MoreGoods Green'>"+mynumberformat(sum, true);
if (getDeliveredGoodsTransports(city_id, resName) > 0)
{
s += "<sup>*</sup>";
}
else s += " ";
s += "</font>";
}
else if (sum > 0) {
//s = "<font class='More' "+createTooltipAttribute(tooltip)+">"+mynumberformat(sum, true)+"</font>";
s = "<font class='More MoreGoods'>"+mynumberformat(sum, true)+" </font>";
}
return s;
}
function createTransports(cityID)
{
var res = "<font class='More'></font>";
var numTransports = 0;
if (config["transports"] == undefined)
{
}
else if (config["transports"][cityID] != undefined)
{
for (key in config["transports"][cityID])
{
if (config["transports"][cityID][key].endTime >= EmpireBoard.StartTime) numTransports++;
}
if (numTransports > 0) res = "<font class='More'>"+numTransports+" transport(s) on way</font>";
}
return res;
}
function createMovements(cityID)
{
var res = "<font class='More'></font>";
var numMovements = 0;
if (config["movements"] == undefined)
{
}
else if (config["movements"][cityID] != undefined)
{
for (key in config["movements"][cityID])
{
if (config["movements"][cityID][key].endTime >= EmpireBoard.StartTime) numMovements++;
}
if (numMovements > 0) res = "<font class='More'>"+numMovements+" movement(s) on way</font>";
}
return res;
}
function getNextNode(node) {
var n = node.nextSibling;
while (n != undefined && n != null && n.nodeName == "#text") {
n = n.nextSibling;
}
return n;
}
function getPreviousNode(node) {
var n = node.previousSibling;
while (n != undefined && n != null && n.nodeName == "#text") {
n = n.previousSibling;
}
return n;
}
function getBuildingLink(city_id, name, defaultValue, position)
{
if (defaultValue == undefined) defaultValue = '';
if (position == undefined)
{
position = -1;
if (name == 'townHall') position = 0;
}
var link = '';
if (position == -1)
{
// will deprecated
var city = getCity(city_id);
link = getArrValue(city.buildings[name], "link", defaultValue);
}
else
{
link = '?view='+name+'&id='+city_id+'&position='+position;
}
if (link == '') link = defaultValue;
return link;
}
// deprecated
function getBuildingPosition(city_id, name, defaultValue)
{
if (defaultValue == undefined) defaultValue = -1;
var position = -1;
var city = getCity(city_id);
if ((city.buildings == undefined) || (city.buildings[name] == undefined))
{
if (name == 'townHall') position = 0;
}
else if ((city.buildings[name].link != undefined) && (city.buildings[name].link != ''))
{
// will deprecated
var link = city.buildings[name].link;
position = parseInt(/position=([0-9]+)/.exec(link)[1]);
}
else if (city.buildings[name].position != undefined)
{
position = city.buildings[name].position;
}
else if (name == 'townHall') position = 0;
if (position == -1) position = defaultValue;
return position;
}
function getCityBuildingsCount(city_id, defaultValue)
{
if (defaultValue == undefined) defaultValue = 0;
var count = 0;
var city = getCity(city_id);
if (city.citytime != undefined)
{
for (name in city.buildings)
{
if (city.buildings[name].levels != undefined)
{
var p;
for (p in city.buildings[name].levels)
{
count++;
}
}
else if (city.buildings[name].level != undefined)
{
count++;
}
}
}
if (count == 0) count = defaultValue;
return count;
}
function getBuildingCount(city_id, name, defaultValue)
{
if (defaultValue == undefined) defaultValue = 0;
var count = 0;
var city = getCity(city_id);
if ((city.buildings == undefined) || (city.buildings[name] == undefined))
{
if (name == 'townHall') count = 1;
}
else if (city.buildings[name].levels != undefined)
{
var p;
for (p in city.buildings[name].levels)
{
count++;
}
}
else if (city.underConstructionName == name)
{
count = 1;
}
if (count == 0) count = defaultValue;
return count;
}
// Get level instead building upgrading is finished
function getBuildingLevel(city_id, name, defaultValue, position)
{
if (defaultValue == undefined) defaultValue = 0;
if (position == undefined) position = -1;
var level = 0;
var city = getCity(city_id);
if ((city.buildings == undefined) || (city.buildings[name] == undefined))
{
if (name == 'townHall') level = 1;
if (city.underConstructionName == name)
{
if (city.underConstructionTime <= EmpireBoard.StartTime) level++;
}
}
else if (position == -1)
{
if (city.buildings[name].levels != undefined)
{
var p;
for (p in city.buildings[name].levels)
{
level += city.buildings[name].levels[p];
}
}
else
{
// deprecated
level = getArrValue(city.buildings[name], "level", 0);
}
if (city.underConstructionName == name)
{
if (city.underConstructionTime <= EmpireBoard.StartTime) level++;
}
}
else if (city.buildings[name].levels != undefined)
{
level = city.buildings[name].levels[position];
// deprecated
if (level == undefined) level = getArrValue(city.buildings[name], "level", 0);
if ((city.underConstructionName == name) && (city.underConstructionPosition == position))
{
if (city.underConstructionTime <= EmpireBoard.StartTime) level++;
}
}
if (level == 0) level = defaultValue;
return level;
}
function getOnePeopleGrowthTime(happiness) {
if (happiness != 0) {
return Math.abs(3600/0.02/happiness*1000);
}
return "NaN";
}
function getEstimatedPopulationOld(population, startTime, currenttime, startHappiness) {
var thappiness = startHappiness;
startTime = Number(startTime);
while (thappiness > 0) {
var t = getOnePeopleGrowthTime(thappiness);
if (t == "NaN" || startTime + t > currenttime) {
break;
}
population++;
thappiness--;
startTime += t;
}
return population;
}
function getEstimatedPopulation(population, startTime, currenttime, startHappiness) {
var thappiness = startHappiness;
startTime = Number(startTime);
if (thappiness != 0)
{
var t = getOnePeopleGrowthTime(thappiness);
while (startTime + t < currenttime)
{
if (thappiness == 0)
{
break;
}
else if (thappiness > 0)
{
population++;
thappiness--;
startTime += t;
}
else
{
population--;
thappiness++;
startTime += t;
}
t = getOnePeopleGrowthTime(thappiness);
}
}
return population;
}
function getGrowthRemainingHours(population, maxPopulation, startTime, happiness) {
if (maxPopulation - population > happiness) {
return "∞"+unsafeWindow.LocalizationStrings['timeunits']['short']['hour'];
}
var time = Number(startTime);
while (population < maxPopulation) {
var t = getOnePeopleGrowthTime(happiness);
if (t == "NaN") {
return "∞"+unsafeWindow.LocalizationStrings['timeunits']['short']['hour'];
}
time += t;
population++;
happiness--;
}
//return floatFormat((time - Number(startTime)) / 1000 / 3600, 1) + "h";
return getTimestring(time - Number(startTime));
}
function smartDateFormat(time, showElapsedTime, elapsedTimeSeparator) {
if (showElapsedTime != true) {
showElapsedTime = false;
}
if (elapsedTimeSeparator == undefined) {
elapsedTimeSeparator = ",";
}
var s = new Date();
s.setTime(time);
var now = new Date();
var t = "";
if ((1+now.getDate()) == s.getDate() && now.getYear() == s.getYear() && now.getMonth() == s.getMonth()) {
t = 'tomorrow ' + EmpireBoard.Str.TwoDigit(s.getHours())+":"+EmpireBoard.Str.TwoDigit(s.getMinutes());
} else if (now.getYear() != s.getYear() || now.getMonth() != s.getMonth() || now.getDate() != s.getDate()) {
t = s.toLocaleString();
} else {
t = EmpireBoard.Str.TwoDigit(s.getHours())+":"+EmpireBoard.Str.TwoDigit(s.getMinutes());
}
if (showElapsedTime) {
t += elapsedTimeSeparator;
var d = (now.getTime() - s.getTime()) / 1000;
if (d < 3600) {
t += " " + Math.floor(d / 60) + "m";
} else {
if (d >= 86400) {
t += " " + Math.floor(d / 86400) + "d";
}
t += " " + floatFormat((d % 86400) / 3600, 1) + "h";
}
}
return t;
}
function getTimestring(timestamp,maxDigits,delimiter,approx,showunits,zerofill)
{
if(typeof timestamp=="undefined"){timestamp=0;}
if(typeof maxDigits=="undefined"){maxDigits=2;}
if(typeof delimiter=="undefined"){delimiter=" ";}
if(typeof approx=="undefined"){approx="";}
if(typeof showunits=="undefined"){showunits=true;}
if(typeof zerofill=="undefined"){zerofill=false;}
var timeunits=[];
timeunits['day']=60*60*24;
timeunits['hour']=60*60;
timeunits['minute']=60;
timeunits['second']=1;
var loca=[];
loca['day']=(showunits)?unsafeWindow.LocalizationStrings['timeunits']['short']['day']:"";
loca['hour']=(showunits)?unsafeWindow.LocalizationStrings['timeunits']['short']['hour']:"";
loca['minute']=(showunits)?unsafeWindow.LocalizationStrings['timeunits']['short']['minute']:"";
loca['second']=(showunits)?unsafeWindow.LocalizationStrings['timeunits']['short']['second']:"";
timestamp=Math.floor(timestamp/1000);
var timestring="";
for(var k in timeunits)
{
var nv=Math.floor(timestamp/timeunits[k]);
if(maxDigits>0&&(nv>0||(zerofill&×tring!="")))
{
timestamp=timestamp-nv*timeunits[k];
if(timestring!="")
{
timestring+=delimiter;
if(nv<10&&nv>0&&zerofill){nv="0"+nv;}
if(nv==0){nv="00";}
}
timestring+=nv+loca[k];
maxDigits--;
}
}
if(timestamp>0){timestring=approx+timestring;}
return timestring;
}
function Resource() {
this.wood = 0;
this.wine = 0;
this.marble = 0;
this.glass = 0;
this.sulfur = 0;
this.underConstruction = "-";
this.population = 0;
this.buildings = {};
this.units = {};
}
// Fetch gold
var GoldTitle = getNodeTitle("//div[@id='globalResources']//li[@class='gold']",'?');
if (GoldTitle != '?') config.gold = getIntValue(GoldTitle, undefined);
// Current selected city
if (current_city_id > 0)
{
var res = getCity(current_city_id);
// Stored resources
/*
res.wood = getIntValue(EmpireBoard.DOM.Get_First_Node_TextContent("id('value_wood')"));
res.wine = getIntValue(EmpireBoard.DOM.Get_First_Node_TextContent("id('value_wine')"));
res.marble = getIntValue(EmpireBoard.DOM.Get_First_Node_TextContent("id('value_marble')"));
res.glass = getIntValue(EmpireBoard.DOM.Get_First_Node_TextContent("id('value_crystal')"));
res.sulfur = getIntValue(EmpireBoard.DOM.Get_First_Node_TextContent("id('value_sulfur')"));
*/
res.wood = EmpireBoard.Ikariam.currentCity('wood','resources');
res.wine = EmpireBoard.Ikariam.currentCity('wine','resources');
res.marble = EmpireBoard.Ikariam.currentCity('marble','resources');
res.glass = EmpireBoard.Ikariam.currentCity('crystal','resources');
res.sulfur = EmpireBoard.Ikariam.currentCity('sulfur','resources');
// Resources to sold
var wareNode = EmpireBoard.DOM.Get_First_Node_TextContent("//div[@id='cityResources']//li[@class='wood']/div[@class='tooltip']");
if (/: [0-9,.]+[^0-9]+: ([0-9,.]+)/.exec(wareNode) != null)
{
res.tradewood = parseInt((RegExp.$1).replace(/[^0-9]/g, ""));
}
else
{
res.tradewood = 0;
}
var wareNode = EmpireBoard.DOM.Get_First_Node_TextContent("//div[@id='cityResources']//li[@class='wine']/div[@class='tooltip']");
if (/: [0-9,.]+[^0-9]+: ([0-9,.]+)/.exec(wareNode) != null)
{
res.tradewine = parseInt((RegExp.$1).replace(/[^0-9]/g, ""));
}
else
{
res.tradewine = 0;
}
var wareNode = EmpireBoard.DOM.Get_First_Node_TextContent("//div[@id='cityResources']//li[@class='marble']/div[@class='tooltip']");
if (/: [0-9,.]+[^0-9]+: ([0-9,.]+)/.exec(wareNode) != null)
{
res.trademarble = parseInt((RegExp.$1).replace(/[^0-9]/g, ""));
}
else
{
res.trademarble = 0;
}
var wareNode = EmpireBoard.DOM.Get_First_Node_TextContent("//div[@id='cityResources']//li[@class='glass']/div[@class='tooltip']");
if (/: [0-9,.]+[^0-9]+: ([0-9,.]+)/.exec(wareNode) != null)
{
res.tradeglass = parseInt((RegExp.$1).replace(/[^0-9]/g, ""));
}
else
{
res.tradeglass = 0;
}
var wareNode = EmpireBoard.DOM.Get_First_Node_TextContent("//div[@id='cityResources']//li[@class='sulfur']/div[@class='tooltip']");
if (/: [0-9,.]+[^0-9]+: ([0-9,.]+)/.exec(wareNode) != null)
{
res.tradesulfur = parseInt((RegExp.$1).replace(/[^0-9]/g, ""));
}
else
{
res.tradesulfur = 0;
}
digProducedResources(res);
var inhabitantsNode = EmpireBoard.DOM.Get_First_Node_TextContent("//span[@id='value_inhabitants']");
if (/([0-9,.]+) \(([0-9,.]+)\)/.exec(inhabitantsNode) != null) {
cizReg = RegExp.$1;
popReg = RegExp.$2;
res.population = getIntValue(popReg);
res.citizens = getIntValue(cizReg);
} else {
res.population = 0;
res.citizens = 0;
}
res.actions = EmpireBoard.DOM.Get_First_Node_TextContent("//span[@id='value_maxActionPoints']");
dropDeliveredGoods(current_city_id);
if (EmpireBoard.Ikariam.View() == "plunder")
{
function reportPlunder()
{
//setViewRqTime('merchantNavy');
setViewRqTime('finances');
setViewRqTime('militaryAdvisorMilitaryMovements');
EmpireBoard.DB.Save();
}
var n = document.getElementById("plunderbutton");
n.addEventListener("click", reportPlunder, false);
}
if (EmpireBoard.Ikariam.View() == "transport")
{
function reportTransport()
{
setViewRqTime('merchantNavy');
EmpireBoard.DB.Save();
}
var n = document.getElementById("submit");
n.addEventListener("click", reportTransport, false);
}
if (EmpireBoard.Ikariam.View() == 'deployment')
{
function reportDeployment()
{
var dType = EmpireBoard.DOM.Get_First_Node_Value("//form[@id='deploymentForm']/input[@name='function']", '');
if (dType == 'deployFleet')
{
dType = 'cityMilitary-fleet';
}
else
{
dType = 'cityMilitary-army';
}
var destinationCityId = EmpireBoard.DOM.Get_First_Node_Value("//form[@id='deploymentForm']/input[@name='destinationCityId']", '');
setViewRqTime(dType, current_city_id);
setViewRqTime('finances');
setViewRqTime('militaryAdvisorMilitaryMovements');
EmpireBoard.DB.Save();
}
var dSubmit = EmpireBoard.DOM.Get_First_Node("//form[@id='deploymentForm']//input[@type='submit']");
dSubmit.addEventListener("click", reportDeployment, false);
}
if (EmpireBoard.Ikariam.View() == 'resource')
{
function reportResource()
{
setViewRqTime('finances');
EmpireBoard.DB.Save();
}
var n = document.getElementById("inputWorkersSubmit");
n.addEventListener("click", reportResource, false);
}
if (EmpireBoard.Ikariam.View() == 'tradegood')
{
function reportTradegood()
{
setViewRqTime('finances');
EmpireBoard.DB.Save();
}
var n = document.getElementById("inputWorkersSubmit");
n.addEventListener("click", reportTradegood, false);
}
}
// If main view is a city
if (city_idmainView > 0) {
var res = getCity(city_idmainView);
if (city_name != "") {
res.city_name = city_name;
}
if (city_coord != "") {
res.city_coord = city_coord;
}
if (island_id != "") {
res.island_id = island_id;
}
// Vue ville
if (EmpireBoard.Ikariam.View() == 'city')
{
// Add new buildings
var nodes = EmpireBoard.DOM.Get_Nodes("//li[contains(@id, 'position')]/a[contains(@href, 'view=')]");
for(var i = 0; i < nodes.snapshotLength; i++) {
var node = nodes.snapshotItem(i);
var li = node.parentNode;
var name = li.getAttribute("class");
if (buildings[name] != undefined)
{
if (res.buildings[name] == undefined) {
res.buildings[name] = {};
}
}
else
{
if (res.buildings[name] != undefined) {
// fix if not building
try
{
delete config[city_idmainView].buildings[name];
}
catch (e)
{
}
}
}
}
var res = getCity(city_idmainView);
// Reset levels, links, and positions
for (name in res.buildings)
{
try
{
delete config[city_idmainView].buildings[name].levels;
}
catch (e)
{
}
}
var res = getCity(city_idmainView);
for (name in res.buildings)
{
res.buildings[name].position = -1;
res.buildings[name].level = 0;
res.buildings[name].levels = {};
res.buildings[name].link = '';
}
// Fetch levels & positions
var nodes = EmpireBoard.DOM.Get_Nodes("//li[contains(@id, 'position')]/a[contains(@href, 'view=')]");
for(var i = 0; i < nodes.snapshotLength; i++) {
var node = nodes.snapshotItem(i);
var li = node.parentNode;
// name
var name = li.getAttribute("class");
if (buildings[name] != undefined)
{
var position = parseInt(/position=([0-9]+)/.exec(node.href)[1]);
// deprecated
res.buildings[name].position = position;
// level
var level = "-";
if (/([0-9]+)/.exec(node.title) != null) {
level = RegExp.$1;
}
// deprecated
res.buildings[name].level = res.buildings[name].level + parseInt(level);
res.buildings[name].levels[position] = parseInt(level);
// link, will deprecated
res.buildings[name].link = node.href;
}
}
// Nouvelle construction
var node = EmpireBoard.DOM.Get_Nodes("//div[@class='constructionSite']/following-sibling::a[contains(@href, 'view=')]");
if (node.snapshotLength >= 1) {
res.underConstruction = node.snapshotItem(0).title;
res.underConstructionName = node.snapshotItem(0).parentNode.getAttribute("class");
res.underConstructionPosition = /position=([0-9]+)/.exec(node.snapshotItem(0).href)[1];
// Search cityCountdown
var scripts = document.getElementsByTagName("script");
var found = false;
var sCode = '';
for (var j = 0; j < scripts.length; j++)
{
var nScript = scripts[j];
sCode = nScript.innerHTML;
if (sCode.indexOf('cityCountdown') >= 0)
{
found = true;
break;
}
}
if (found == true)
{
var enddate = 0;
var currentdate = 0;
if (/enddate[^0-9]*([0-9]+)/.exec(sCode) != null) {
enddate = parseFloat(RegExp.$1) * 1000;
}
if (/currentdate[^0-9]*([0-9]+)/.exec(sCode) != null) {
currentdate = parseFloat(RegExp.$1) * 1000;
}
if (enddate != 0 && currentdate != 0) {
res.underConstructionTime = enddate - currentdate + new Date().getTime();
}
}
} else {
res.underConstruction = "-";
res.underConstructionName = "";
res.underConstructionPosition = -1;
res.underConstructionTime = 0;
}
res.citytime = EmpireBoard.StartTime;
}
//military-army and fleet unit counts
if ((EmpireBoard.Ikariam.View() == "cityMilitary-army") || (EmpireBoard.Ikariam.View() == "cityMilitary-fleet"))
{
/*
if (EmpireBoard.Ikariam.View() == "cityMilitary-fleet")
{
var idx = 13;
}
else
{
var idx = 0;
}
*/
if (config["unitnames"] == undefined) { config["unitnames"] = {}; }
if (res.units == undefined) { res.units = {}; }
var names = EmpireBoard.DOM.Get_Nodes("//table/tbody/tr/th");
var counts = EmpireBoard.DOM.Get_Nodes("//table/tbody/tr[@class='count']/td");
if (names.snapshotLength >= counts.snapshotLength)
{
for(var i = 0; i < counts.snapshotLength; i++)
{
var n = names.snapshotItem(i).title;
var unit_id = '';
//unit_id = unitsAndShipsIndexesR[i + idx];
if (EmpireBoard.Ikariam.View() == "cityMilitary-fleet")
{
var url_unit = /([a-z]+_[a-z]+)_faceright/.exec(names.snapshotItem(i).firstChild.src);
if (url_unit != null)
{
unit_id = 'unit ' + RegExp.$1;
}
}
else
{
var url_unit = /y60_([a-z]+)_/.exec(names.snapshotItem(i).firstChild.src);
if (url_unit != null)
{
unit_id = 'unit ' + RegExp.$1;
}
}
config["unitnames"][unit_id] = n;
var c = counts.snapshotItem(i);
var cnt = getIntValue(c.innerHTML, 0);
if (res.units[unit_id] == undefined)
{
res.units[unit_id] = {};
}
res.units[unit_id].count = cnt;
}
}
if (EmpireBoard.Ikariam.View() == "cityMilitary-army")
{
res.cityMilitaryarmytime = EmpireBoard.StartTime;
}
else if (EmpireBoard.Ikariam.View() == "cityMilitary-fleet")
{
res.cityMilitaryfleettime = EmpireBoard.StartTime;
}
}
// view is building
if ((buildings[EmpireBoard.Ikariam.View()] != undefined) && (EmpireBoard.Ikariam.Tab() == ''))
{
if (res.buildings[EmpireBoard.Ikariam.View()] == undefined) {
res.buildings[EmpireBoard.Ikariam.View()] = {};
}
// Fetch position
var position = -1;
var node = EmpireBoard.DOM.Get_Nodes("//*[@id='buildingUpgrade']//ul[@class='actions']//a[contains(@href, 'position=')]");
if (node.snapshotLength == 0)
{
node = EmpireBoard.DOM.Get_Nodes("//*[@id='buildingUpgrade']//a[@class='cancelUpgrade']");
}
if (node.snapshotLength >= 1)
{
var url_position = /position=([0-9]+)/.exec(node.snapshotItem(0).href);
if (url_position != null) position = parseInt(RegExp.$1);
}
else if ((res.buildings[EmpireBoard.Ikariam.View()].position != undefined) && (res.buildings[EmpireBoard.Ikariam.View()].position != -1))
{
position = res.buildings[EmpireBoard.Ikariam.View()].position;
}
else
{
var url_position = /[\?&]position=([0-9]+)/.exec(document.URL);
if (url_position != null) position = parseInt(RegExp.$1);
}
city_positionmainView = position;
// deprecated
res.buildings[EmpireBoard.Ikariam.View()].position = position;
// Fetch level & detect upgrading
var n = EmpireBoard.DOM.Get_First_Node("//*[@id='buildingUpgrade']//*[@class='buildingLevel']");
if (n != null)
{
if (position != -1)
{
// Fetch level
if (res.buildings[EmpireBoard.Ikariam.View()].levels == undefined) res.buildings[EmpireBoard.Ikariam.View()].levels = {};
res.buildings[EmpireBoard.Ikariam.View()].levels[position] = getIntValue(n.innerHTML,0);
}
EmpireBoard.Log.Add('View '+EmpireBoard.Ikariam.View()+' building level '+getIntValue(n.innerHTML,0)+' at position '+position);
// Ignorer ancien upgrade du batiment
if (res.underConstructionPosition == undefined) res.underConstructionPosition = -1; // Deprecated
if ((res.underConstructionName == EmpireBoard.Ikariam.View()) && (res.underConstructionPosition == position))
{
res.underConstruction = '';
res.underConstructionName = '';
res.underConstructionTime = 0;
res.underConstructionPosition = -1;
}
// Search getCountdown()
var scripts = document.getElementsByTagName("script");
var found = false;
var sCode = '';
for (var j = 0; j < scripts.length; j++)
{
// search upgradeCountDown
var nScript = scripts[j];
sCode = nScript.innerHTML;
if (sCode.indexOf('upgradeCountDown') >= 0)
{
found = true;
break;
}
}
if (found == true)
{
// buildings under upgrading
var enddate = 0;
var currentdate = 0;
if (/enddate[^0-9]*([0-9]+)/.exec(sCode) != null)
{
enddate = parseFloat(RegExp.$1) * 1000;
}
if (/currentdate[^0-9]*([0-9]+)/.exec(sCode) != null)
{
currentdate = parseFloat(RegExp.$1) * 1000;
}
if (enddate != 0 && currentdate != 0)
{
// First, apply previous upgrading of other building
if (res.underConstructionName != '')
{
if ((res.buildings[res.underConstructionName].uptime != undefined) && (res.buildings[res.underConstructionName].uptime > res.underConstructionTime))
{
// Ignore
}
else if ((res.citytime != undefined) && (res.citytime > res.underConstructionTime))
{
// Ignore
}
else if ((res.buildings[res.underConstructionName].uptime != undefined) && (res.citytime != undefined))
{
if ((res.underConstructionPosition != undefined) && (res.underConstructionPosition != -1))
{
if (res.buildings[res.underConstructionName].levels == undefined) res.buildings[res.underConstructionName].levels = {};
res.buildings[res.underConstructionName].levels[res.underConstructionPosition] = parseInt(res.buildings[res.underConstructionName].levels[res.underConstructionPosition])+1;
}
else
{
// deprecated
res.buildings[res.underConstructionName].level = parseInt(res.buildings[res.underConstructionName].level)+1;
}
}
}
// Define new upgrading
res.underConstruction = buildings[EmpireBoard.Ikariam.View()][0] + " level " + getIntValue(n.innerHTML,0);
//res.underConstruction += ","+(enddate - currentdate + new Date().getTime());
res.underConstructionName = EmpireBoard.Ikariam.View();
res.underConstructionPosition = position;
res.underConstructionTime = enddate - currentdate + new Date().getTime();
}
}
else
{
// Not upgrading
}
}
res.buildings[EmpireBoard.Ikariam.View()].uptime = EmpireBoard.StartTime;
}
//townhall population total and growth
if (EmpireBoard.Ikariam.View() == 'townHall')
{
res.buildings["townHall"].population = Number(EmpireBoard.DOM.Get_First_Node_TextContent("//li[contains(@class, 'space')]/span[contains(@class, 'occupied')]", "0"));
res.population = res.buildings["townHall"].population;
res.buildings["townHall"].growth = EmpireBoard.Str.To_Float(EmpireBoard.DOM.Get_First_Node_TextContent("//li[contains(@class, 'growth')]/span[@class='value']", "0"),'?','.');
//EmpireBoard.Log.Add('Growth (from TownHall)='+res.buildings["townHall"].growth);
res.buildings["townHall"].bonusspace = Number(EmpireBoard.DOM.Get_First_Node_TextContent("//li[contains(@class, 'space')]/span[contains(@class, 'total')]", "0")) - townHallSpaces[getBuildingLevel(city_idmainView, 'townHall', 1, 0)];
res.buildings["townHall"].happiness = Number(EmpireBoard.DOM.Get_First_Node_TextContent("//div[contains(@class, 'happiness')]/div[@class='value']", "0")) + res.buildings["townHall"].population;
res.buildings["townHall"].incomegold = Number(EmpireBoard.DOM.Get_First_Node_TextContent("//li[contains(@class, 'incomegold')]/span[@class='value']", "0"));
//var raw_income = getIntValue(EmpireBoard.DOM.Get_First_Node_TextContent("//div[@class='citizens']/span[@class='production']", "0"),0);
}
if (EmpireBoard.Ikariam.View() == 'branchOffice')
{
var reservedGold = document.getElementById("reservedGold");
if (reservedGold != null)
{
res.buildings["branchOffice"].reservedGold = getIntValue(reservedGold.innerHTML, 0);
}
else
{
res.buildings["branchOffice"].reservedGold = 0;
}
}
//military-army unit counts
if ((EmpireBoard.Ikariam.View() == "barracks") || (EmpireBoard.Ikariam.View() == "shipyard"))
{
var idx = 0;
if (EmpireBoard.Ikariam.View() == "shipyard") { idx = 13; }
if (config["unitnames"] == undefined) { config["unitnames"] = {}; }
if (res.units == undefined) { res.units = {}; }
// Fetch units counters
var names = EmpireBoard.DOM.Get_Nodes("//ul[@id='units']/li[contains(@class, 'unit')]/div[@class='unitinfo']/h4");
var counts = EmpireBoard.DOM.Get_Nodes("//ul[@id='units']/li[contains(@class, 'unit')]/div[@class='unitinfo']/div[@class='unitcount']");
if (names.snapshotLength == counts.snapshotLength)
{
for (var i = 0; i < names.snapshotLength; i++)
{
var node = names.snapshotItem(i);
var n = node.innerHTML;
var unit_id;
try
{ unit_id = node.parentNode.parentNode.getAttribute("class"); }
catch(e) { }
config["unitnames"][unit_id] = n;
var c = counts.snapshotItem(i);
var cnt = getIntValue(c.innerHTML.replace(/<.+>/g, ""), 0);
if (res.units[unit_id] == undefined)
{
res.units[unit_id] = {};
}
res.units[unit_id].count = cnt;
// Init units under construction
res.units[unit_id].construction = 0;
}
}
// Search units under construction
var currentUnit = EmpireBoard.DOM.Get_First_Node("//div[@id='unitConstructionList']//div[contains(@class, 'currentUnit')]");
if (currentUnit != null)
{
var currentUnit_id = 'unit '+TrimUnitID(currentUnit.className);
res.units[currentUnit_id].construction = 1;
// Fetch queue
var simUnits = 0;
var Amounts = EmpireBoard.DOM.Get_Nodes("//div[@id='unitConstructionList']//li/div[@class='amount']");
if (Amounts.snapshotLength >= 1)
{
for (var i = 0; i < Amounts.snapshotLength; i++)
{
var Amount = Amounts.snapshotItem(i);
var AmountInt = getIntValue(Amount.textContent, 1);
var unit_id = 'unit '+TrimUnitID(Amount.parentNode.className);
res.units[unit_id].construction = res.units[unit_id].construction + AmountInt;
if (unit_id == currentUnit_id)
{
simUnits = simUnits + AmountInt;
}
}
}
var scripts = document.getElementsByTagName("script");
var found = false;
for (var j = scripts.length-1; j >= 0; j--)
{
// search getCountdown
var nScript = scripts[j];
var sCode = nScript.innerHTML;
if (sCode.indexOf('buildProgress') > 0)
{
found = true;
break;
}
}
if (found == true)
{
var enddate = 0;
if (/enddate[^0-9]*([0-9]+)/.exec(sCode) != null) {
enddate = parseFloat(RegExp.$1) * 1000;
}
var currentdate = 0;
if (/currentdate[^0-9]*([0-9]+)/.exec(sCode) != null) {
currentdate = parseFloat(RegExp.$1) * 1000;
}
var startdate = 0;
if (/startdate[^0-9]*([0-9]+)/.exec(sCode) != null) {
startdate = parseFloat(RegExp.$1) * 1000;
}
setViewRqTime(EmpireBoard.Ikariam.View(), city_idmainView, EmpireBoard.StartTime + (enddate - currentdate) + simUnits * (enddate - startdate), true);
}
}
}
if (EmpireBoard.Ikariam.View() == "tavern")
{
function storeWineUsage()
{
try
{
var city_id = EmpireBoard.DOM.Get_First_Node_Value("//form[@id='wineAssignForm']/input[@type='hidden' and @name='id']");
var city = getCity(city_id);
var n = document.getElementById("wineAmount");
if (city.wineUsageId != n.selectedIndex)
{
setViewRqTime('townHall', city_id);
}
city.wineUsageId = n.selectedIndex;
city.wineUsage = tavernWineUsage[n.selectedIndex] - getSavedWine();
EmpireBoard.DB.Save();
}
catch (e)
{
}
}
// Fix for v3
function getSavedWine() {
try {
var n = document.getElementById("savedWine");
if ((n.innerHTML != ' ') && (Trim(n.innerHTML) != ''))
{
return Math.round(parseFloat(n.innerHTML));
}
else return 0;
} catch (e) {
return 0;
}
}
var n = EmpireBoard.DOM.Get_First_Node("//form[@id='wineAssignForm']//*[@type='submit']");
n.addEventListener("click", storeWineUsage, false);
var n = document.getElementById("wineAmount");
res.wineUsageId = n.selectedIndex;
res.wineUsage = tavernWineUsage[n.selectedIndex] - getSavedWine();
}
if (EmpireBoard.Ikariam.View() == 'academy')
{
function reportAcademy()
{
setViewRqTime('finances');
EmpireBoard.DB.Save();
}
var n = document.getElementById("inputWorkersSubmit");
n.addEventListener("click", reportAcademy, false);
var n = document.getElementById("valueResearch");
res.buildings["academy"].Research = EmpireBoard.Str.To_Integer(n.textContent);
EmpireBoard.Log.Add('valueResearch = '+res.buildings["academy"].Research);
}
if (EmpireBoard.Ikariam.View() == 'temple')
{
EmpireBoard.ViewIsBuildingTemple();
}
if (EmpireBoard.Ikariam.View() == 'workshop')
{
EmpireBoard.ViewIsBuildingWorkshop();
}
} else {
if (EmpireBoard.Ikariam.View() == "finances")
{
var citiesIDs = {};
var res = EmpireBoard.DOM.Get_Nodes("//select[@id='citySelect']/option");
for(var i = 0; i < res.snapshotLength; i++)
{
var n = res.snapshotItem(i);
var cName = Trim(n.innerHTML);
citiesIDs[cName] = parseInt(n.value);
}
var nodes = EmpireBoard.DOM.Get_Nodes("//table[@id='balance']//td[@class='city']");
for (var i = 0; i < nodes.snapshotLength; i++)
{
var node = nodes.snapshotItem(i);
var cName = Trim(node.innerHTML);
var cID = citiesIDs[cName];
var tr = node.parentNode;
var tds = tr.getElementsByTagName("td");
var incomegold = getIntValue(tds[3].innerHTML);
var city = getCity(cID);
if (city.buildings["townHall"] == undefined) city.buildings["townHall"] = {};
city.buildings["townHall"].incomegold = incomegold;
}
config.financestime = EmpireBoard.StartTime;
}
if (EmpireBoard.Ikariam.View() == "militaryAdvisorMilitaryMovements")
{
EmpireBoard.ViewIsMilitaryMovements();
}
if (EmpireBoard.Ikariam.View() == "merchantNavy")
{
if (config["arrivinggoods"] == undefined) config["arrivinggoods"] = {};
dropUndeliveredLoadingGoods();
config["transports"] = {};
function addTransport(cityID, transportID, endTime, subject, tCityName)
{
if (config["transports"][cityID] == undefined) config["transports"][cityID] = {};
if (config["transports"][cityID][transportID] == undefined) config["transports"][cityID][transportID] = {};
config["transports"][cityID][transportID].endTime = endTime;
}
var foundLoading = false;
var takeSomething = false;
var resMi = EmpireBoard.DOM.Get_Nodes("//div[@id='mainview']//td[contains(@class, 'mission')]");
if (resMi.snapshotLength > 0)
{
// Villes du joueur
var citiesIDs = {};
var citiesNames = {};
var res = EmpireBoard.DOM.Get_Nodes("//select[@id='citySelect']/option");
for(var i = 0; i < res.snapshotLength; i++)
{
var n = res.snapshotItem(i);
var cName = Trim(n.textContent, true);
var cID = parseInt(n.value);
citiesIDs[cName] = cID;
citiesNames[cID] = cName;
}
// heures
var mTimers = {};
var scripts = document.getElementsByTagName("script");
for (var j = 0; j < scripts.length; j++)
{
// search getCountdown
var nScript = scripts[j];
var sCode = nScript.innerHTML;
if (sCode.indexOf('getCountdown') > 0)
{
var aCodeLines = sCode.split(';');
for (var i=0; i < aCodeLines.length-1; i++)
{
var sValues = aCodeLines[i].substring(aCodeLines[i].indexOf('{')+1,aCodeLines[i].indexOf('}'));
var sParts = sValues.split(',');
var sPart0 = sParts[0].split(':');
var enddate = 1000*parseInt(Trim(sPart0[1]));
var sPart1 = sParts[1].split(':');
var currentdate = 1000*parseInt(Trim(sPart1[1]));
var sID = sParts[2].substring(sParts[2].indexOf('"')+1,sParts[2].indexOf('"',sParts[2].indexOf('"')+2));
mTimers[sID] = EmpireBoard.StartTime + Math.abs(enddate - currentdate);
EmpireBoard.Log.Add("mTimers["+sID+"] = "+(enddate - currentdate));
}
}
}
// infos
for (var i = 0; i < resMi.snapshotLength; i++)
{
var nMi = resMi.snapshotItem(i);
var tr = nMi.parentNode;
var tds = tr.getElementsByTagName("td");
var nSource = tds[1];
var nTarget = tds[3];
var nETA = tds[4];
var nRET = tds[5];
var nAc = tds[6];
if (nETA.id == '') continue;
if (nRET.id == '') continue;
EmpireBoard.Log.Add('nETA.id = '+nETA.id);
var trPayload = tr.nextSibling;
var payload = trPayload.getElementsByTagName("img");
var foundGoods = false;
var foundArmy = false;
var PayloadGoods = {};
if (payload.length > 0)
{
var rKey = '';
for (var j = 0; j < payload.length; j++)
{
if (payload[j].src.indexOf('wood') > 0)
{
if (rKey == 'wood') continue;
rKey = 'wood';
foundGoods = true;
}
else if (payload[j].src.indexOf('wine') > 0)
{
if (rKey == 'wine') continue;
rKey = 'wine';
foundGoods = true;
}
else if (payload[j].src.indexOf('marble') > 0)
{
if (rKey == 'marble') continue;
rKey = 'marble';
foundGoods = true;
}
else if (payload[j].src.indexOf('glass') > 0)
{
if (rKey == 'glass') continue;
rKey = 'glass';
foundGoods = true;
}
else if (payload[j].src.indexOf('sulfur') > 0)
{
if (rKey == 'sulfur') continue;
rKey = 'sulfur';
foundGoods = true;
}
else if (payload[j].src.indexOf('slinger') > 0)
{
rKey = '';
foundArmy = true;
continue;
}
else if (payload[j].src.indexOf('swordsman') > 0)
{
rKey = '';
foundArmy = true;
continue;
}
else if (payload[j].src.indexOf('phalanx') > 0)
{
rKey = '';
foundArmy = true;
continue;
}
else if (payload[j].src.indexOf('spearman') > 0)
{
// v 3.2 unit
rKey = '';
foundArmy = true;
continue;
}
else if (payload[j].src.indexOf('archer') > 0)
{
rKey = '';
foundArmy = true;
continue;
}
else if (payload[j].src.indexOf('marksman') > 0)
{
rKey = '';
foundArmy = true;
continue;
}
else if (payload[j].src.indexOf('gyrocopter') > 0)
{
rKey = '';
foundArmy = true;
continue;
}
else if (payload[j].src.indexOf('steamgiant') > 0)
{
rKey = '';
foundArmy = true;
continue;
}
else if (payload[j].src.indexOf('bombardier') > 0)
{
rKey = '';
foundArmy = true;
continue;
}
else if (payload[j].src.indexOf('ram') > 0)
{
rKey = '';
foundArmy = true;
continue;
}
else if (payload[j].src.indexOf('catapult') > 0)
{
rKey = '';
foundArmy = true;
continue;
}
else if (payload[j].src.indexOf('mortar') > 0)
{
rKey = '';
foundArmy = true;
continue;
}
else if (payload[j].src.indexOf('medic') > 0)
{
rKey = '';
foundArmy = true;
continue;
}
else if (payload[j].src.indexOf('cook') > 0)
{
rKey = '';
foundArmy = true;
continue;
}
else
{
rKey = '';
continue;
}
if ((PayloadGoods[rKey] == undefined) && ((rKey == 'wood') || (rKey == 'wine') || (rKey == 'marble') || (rKey == 'glass') || (rKey == 'sulfur')))
{
var rAmnt = getIntValue(payload[j].title);
PayloadGoods[rKey] = rAmnt;
}
}
}
var citySource;
var cityTarget;
var quest;
if (nMi.className.indexOf('gotoown') > 0)
{
if (foundArmy == true)
{
continue;
}
else
{
citySource = Trim(nSource.textContent, true);
cityTarget = citiesIDs[Trim(nTarget.textContent, true)];
quest = 'gotoown';
if (mTimers[nETA.id] == undefined)
{
mTimers[nETA.id] = EmpireBoard.StartTime + (1 * 20 * 60 * 1000);
quest = 'loading';
}
else if (nAc.innerHTML == '')
{
citySource = Trim(nTarget.textContent, true);
cityTarget = citiesIDs[Trim(nSource.textContent, true)];
quest = 'halfturn';
}
addTransport(citiesIDs[Trim(nSource.textContent, true)], nETA.id, mTimers[nETA.id]);
if (foundGoods == false) continue;
}
}
else if (nMi.className.indexOf('returning') > 0)
{
quest = 'returning';
if (tr.parentNode.parentNode.parentNode.parentNode.id == 'plunderingTransports')
{
if (foundGoods == true)
{
citySource = Trim(nTarget.textContent, false);
cityTarget = citiesIDs[Trim(nSource.textContent, true)];
if (cityTarget == undefined)
{
citySource = Trim(nSource.textContent, true);
cityTarget = citiesIDs[Trim(nTarget.textContent, true)];
}
}
else continue;
}
else if ((foundArmy == true) && (foundGoods == false))
{
continue;
}
else
{
if (mTimers[nETA.id] == undefined)
{
mTimers[nETA.id] = EmpireBoard.StartTime + (1 * 20 * 60 * 1000);
quest = 'loading';
}
citySource = Trim(nTarget.textContent, false);
cityTarget = citiesIDs[Trim(nSource.textContent, true)];
if (foundArmy == false) addTransport(citiesIDs[Trim(nSource.textContent, true)], nETA.id, mTimers[nETA.id]);
if (foundGoods == false) continue;
}
}
else if (nMi.className.indexOf('gotoforeign') > 0)
{
quest = 'gotoforeign';
if (tr.parentNode.parentNode.parentNode.parentNode.id == 'plunderingTransports')
{
quest = 'plundering';
if ((mTimers[nETA.id] != undefined) && (mTimers[nETA.id] > EmpireBoard.StartTime))
{
takeSomething = true;
setViewRqTime('merchantNavy', 0, parseInt(mTimers[nETA.id]) + (1000*60*15));
}
else if ((mTimers[nRET.id] != undefined) && (mTimers[nRET.id] > EmpireBoard.StartTime))
{
takeSomething = true;
setViewRqTime('merchantNavy', 0, EmpireBoard.StartTime + (1000*60*15));
}
continue;
}
else if (foundArmy == true)
{
continue;
}
else
{
if (mTimers[nRET.id] != undefined)
{
addTransport(citiesIDs[Trim(nSource.textContent, true)], nETA.id, mTimers[nRET.id]);
}
else if (mTimers[nETA.id] != undefined)
{
addTransport(citiesIDs[Trim(nSource.textContent, true)], nETA.id, mTimers[nETA.id]);
}
else
{
addTransport(citiesIDs[Trim(nSource.textContent, true)], nETA.id, EmpireBoard.StartTime + (1000*60*15));
}
if ((foundGoods == true) && (nAc.innerHTML != ''))
{
continue;
}
else if ((foundGoods == true) && (nAc.innerHTML == '') && (mTimers[nETA.id] == undefined))
{
citySource = Trim(nTarget.textContent, false);
cityTarget = citiesIDs[Trim(nSource.textContent, true)];
if (mTimers[nRET.id] != undefined)
{
mTimers[nETA.id] = mTimers[nRET.id];
}
else
{
mTimers[nETA.id] = EmpireBoard.StartTime + (1 * 20 * 60 * 1000);
}
quest = 'loading';
}
else if ((foundGoods == false) && (nAc.innerHTML != ''))
{
if (mTimers[nETA.id] != undefined)
{
takeSomething = true;
setViewRqTime('merchantNavy', 0, parseInt(mTimers[nETA.id]));
}
}
if (foundGoods == false) continue;
}
}
else continue;
if ((foundGoods == true) && (cityTarget != undefined) && (mTimers[nETA.id] != undefined))
{
if (config["arrivinggoods"][cityTarget] == undefined) config["arrivinggoods"][cityTarget] = {};
var idx = nETA.id;
if (config["arrivinggoods"][cityTarget][idx] == undefined) config["arrivinggoods"][cityTarget][idx] = {};
config["arrivinggoods"][cityTarget][idx]["startcity"] = citySource;
if (config["arrivinggoods"][cityTarget][idx]["res"] == undefined) config["arrivinggoods"][cityTarget][idx]["res"] = PayloadGoods;
config["arrivinggoods"][cityTarget][idx]["quest"] = quest;
config["arrivinggoods"][cityTarget][idx]["arrivetime"] = parseInt(mTimers[nETA.id]);
if (quest != 'loading')
{
setViewRqTime('', cityTarget, parseInt(mTimers[nETA.id]));
}
else
{
foundLoading = true;
setViewRqTime('merchantNavy', 0, EmpireBoard.StartTime + (1000*60*10));
}
}
}
}
// disable attention
if ((foundLoading != true) && (takeSomething != true))
{
setViewRqTime('merchantNavy', 0);
}
config.merchantNavytime = EmpireBoard.StartTime;
EmpireBoard.Log.Add("Registered merchant transports");
}
}
/**************************************************************************************************
* Render tables
*************************************************************************************************/
function renderTables() {
setLanguage();
getLocalizedTexts();
var TABLE_RESOURCES = getCfgValue("TABLE_RESOURCES", true); //overview table for resources
var TABLE_BUILDINGS = getCfgValue("TABLE_BUILDINGS", true); //overview table for buildings
var TABLE_ARMYFLEET = getCfgValue("TABLE_ARMYFLEET", true); //overview table for army and fleet
PROGRESS_BAR_MODE = getCfgValue("PROGRESS_BAR_MODE", "time"); //progress bar mode for resource counters
EmpireBoard.Set_Common_Styles();
// Fix for v3.1
var Cities = {};
EmpireBoard.Ikariam.Fetch_CitiesSelect(Cities, false);
var s = "";
if (TABLE_BUILDINGS)
{
var orderedBuildings = {}; // And usage topic
orderedBuildings['townHall'] = 'growth';
orderedBuildings['palace'] = 'growth';
orderedBuildings['palaceColony'] = 'growth';
orderedBuildings['tavern'] = 'growth';
orderedBuildings['museum'] = 'growth';
orderedBuildings['academy'] = 'research';
orderedBuildings['workshop'] = 'research';
orderedBuildings['temple'] = 'research';
orderedBuildings['embassy'] = 'diplomacy';
orderedBuildings['warehouse'] = 'trading';
orderedBuildings['port'] = 'trading';
orderedBuildings['branchOffice'] = 'trading';
orderedBuildings['wall'] = 'military';
orderedBuildings['safehouse'] = 'military';
orderedBuildings['barracks'] = 'military';
orderedBuildings['shipyard'] = 'military';
orderedBuildings['forester'] = 'wood';
orderedBuildings['carpentering'] = 'wood';
orderedBuildings['winegrower'] = 'wine';
orderedBuildings['vineyard'] = 'wine';
orderedBuildings['stonemason'] = 'marble';
orderedBuildings['architect'] = 'marble';
orderedBuildings['glassblowing'] = 'crystal';
orderedBuildings['optician'] = 'crystal';
orderedBuildings['alchemist'] = 'sulfur';
orderedBuildings['fireworker'] = 'sulfur';
var CityId;
var buildingsCount = [];
var i = 0;
for (CityId in Cities)
{
for (key in buildings)
{
var count = getBuildingCount(CityId, key, 0);
if (buildingsCount[key] == undefined || buildingsCount[key] < count)
{
buildingsCount[key] = count;
}
}
i++;
}
s += "<div id='EmpireBoardBuildings' class='Table'><table class='Overview Buildings'>";
s += "<thead><tr><th class='city_name' nowrap>"+texts["cityName"]+"</th>";
s += "<th class='actions' nowrap></th>";
var firstStyle = "";
var buildsNum = 0;
var lastTopic = '';
for (key in orderedBuildings)
{
if (buildingsCount[key] > 0)
{
// Fix for v3
var colspan = (buildingsCount[key] > 1) ? ' colspan='+buildingsCount[key] : '';
if (lastTopic != orderedBuildings[key]) { firstStyle = "lf"; } else { firstStyle = ""; }
s += "<th"+colspan+" building='"+key+"' class='"+firstStyle+" build_name"+buildingsCount[key]+" "+key+"' nowrap "+createTooltipAttribute(buildings[key][0])+">"+buildings[key][1]+"</th>";
lastTopic = orderedBuildings[key];
buildsNum++;
}
}
if (buildsNum <= 1) s += "<th class='lf'></th><th></th><th></th><th></th><th></th><th></th>";
s += "</tr></thead>";
s += "<tbody>";
var CityId;
var i = 0;
for (CityId in Cities)
{
var res = getCity(CityId);
var trclass = (parseInt(current_city_id) == parseInt(CityId)) ? "current" : "";
s += "<tr class='"+trclass+"'>";
var usedspaces = getCityBuildingsCount(CityId, 0);
s += "<td class='city_name' nowrap>"+createLinkToChangeCity(Cities[CityId].name, CityId, i, (usedspaces > 0) ? 15-usedspaces : '', 'Green', 'Available free spaces')+"</td>";
s += "<td class='actions' nowrap>"+createLinkToCityView(CityId)+"</td>";
var firstStyle = "";
var lastTopic = '';
for (key in orderedBuildings)
{
if (buildingsCount[key] > 0)
{
if (lastTopic != orderedBuildings[key]) { firstStyle = "lf"; } else { firstStyle = ""; }
var buildingCount = 0;
if (res.buildings[key] != undefined)
{
if (res.buildings[key].levels == undefined)
{
res.buildings[key].levels = {};
// deprecated
var position = getBuildingPosition(parseInt(CityId), key, -1);
var level = getBuildingLevel(parseInt(CityId), key, 0, position);
res.buildings[key].levels[position] = level;
}
var position;
for (position in res.buildings[key].levels)
{
//var position = getArrValue(res.buildings[key], "position", -1);
//var position = getBuildingPosition(parseInt(CityId), key, -1);
var currentBuildingStyle = "";
if ((key == EmpireBoard.Ikariam.View()) && (parseInt(CityId) == city_idmainView) && (position == city_positionmainView))
{
currentBuildingStyle = " Bold";
}
//var level = getArrValue(res.buildings[key], "level", "-");
var level = getBuildingLevel(parseInt(CityId), key, '-', position);
if (level == undefined || level == "" || level == 0)
{
level = "-";
}
var link = getBuildingLink(parseInt(CityId), key, '-', position);
if ((res.underConstructionName == key) && (res.underConstructionPosition == position))
{
if (level == "-") { level = 0; }
var underConstructionTime = res.underConstructionTime;
// deprecated
if (underConstructionTime == undefined)
underConstructionTime = res.underConstruction.split(",")[1];
var sdate = smartDateFormat(underConstructionTime);
if (underConstructionTime <= EmpireBoard.StartTime)
{
var levellink = level;
if (link != "-")
levellink = "<a href='" + link + "' class=\"changeCity Green Bold\" cityid="+CityId+">"+level+"</a>";
levellink += '<sup class=Red title="Require attention">!</sup>';
levelUpgrading = createTooltip(levellink, sdate, texts["finishedBuilding"]+':' );
}
else
{
var counter = "<font id='mytimecounter' counter='"+Math.round(underConstructionTime)+"' class='time_counter'>__:__:__</font>";
var levellink =level+"»"+(level+1);
if (link != "-")
levellink = "<a href='" + link + "' class=\"changeCity Green Bold\" cityid="+CityId+">"+level+"»"+(level+1)+"</a>";
if ((level > 0) && (reportViewToSurvey(key, CityId) == '!'))
{
levellink += '<sup class=Red title="Require attention">!</sup>';
}
else
{
levellink += ' ';
}
levelUpgrading = createTooltip(levellink, sdate +' ('+ counter+')', texts["currentlyBuilding"]+':');
}
s += "<td class='"+firstStyle+currentBuildingStyle+"'>"+levelUpgrading+"</td>";
}
else
{
var levellink =level;
if (level != "-")
{
levellink = "<a href='" + link + "' class=changeCity cityid="+CityId+">"+level+"</a>";
if (reportViewToSurvey(key, CityId) == '!')
{
levellink += '<sup class=Red title="Require attention">!</sup>';
}
else
{
levellink += ' ';
}
}
else
{
levellink += ' ';
}
s += "<td class='"+firstStyle+currentBuildingStyle+"'>"+levellink+"</td>";
}
buildingCount++;
firstStyle = '';
}
}
else
{
s += "<td class='"+firstStyle+"'>- </td>";
buildingCount++;
firstStyle = '';
}
if (buildingCount < buildingsCount[key])
{
for (var j = buildingCount; j < buildingsCount[key]; j++)
{
s += "<td class='"+firstStyle+"'>- </td>";
firstStyle = '';
}
}
lastTopic = orderedBuildings[key];
}
}
if (buildsNum <= 1) s += "<td class='lf'></td><td></td><td></td><td></td><td></td><td></td>";
s += "</tr>";
i++;
}
s += "</tbody>";
s += "<tfoot></tfoot></table>";
s += "<p class='Caption'>(<span class=Green>1-14</span>) available free spaces for new buildings. (<span class=Red>!</span>) require your attention to update overview's data.</p>";
s += "</div>";
}
if (TABLE_RESOURCES) {
s += "<div id='EmpireBoardResources' class='Table'><table class='Overview Resources'>";
s += "<thead><tr>";
s += "<th class='city_name' nowrap>"+texts["cityName"]+"</th>"+
"<th class='actions' nowrap>"+createLinkToFinanceNavyViews()+"</th>"+
"<th colspan=3 class='lf population'>"+texts["Population"]+"</th>"+
"<th colspan=1 class='lf research'>"+texts["Research"]+"</th>"+
"<th colspan=1 class='lf incomes'>"+texts["Incomes"]+"</th>"+
"<th colspan=2 class='lf wood'>"+texts["Wood"]+"</th>"+
"<th colspan=3 class='lf wine'>"+texts["Wine"]+"</th>"+
"<th colspan=2 class='lf marble'>"+texts["Marble"]+"</th>"+
"<th colspan=2 class='lf crystal'>"+texts["Crystal"]+"</th>"+
"<th colspan=2 class='lf sulfur'>"+texts["Sulfur"]+"</th>";
s += "</tr></thead>";
s += "<tbody>";
var sumres = new Resource("");
sumres.spacetotal = 0;
sumres.growth = 0;
sumres.Income = 0;
sumres.reservedGold = '';
sumres.Research = 0;
var sumProd = new Resource("");
sumProd.wineUsage = 0;
var sumArTr = new Resource("");
var CityId;
var i = 0;
for (CityId in Cities)
{
var res = getCity(CityId);
var curres = new Resource("");
var arrres = new Resource('');
var wineUsage;
var cellarLevel = getBuildingLevel(CityId, "vineyard", "-");
if (res.wineUsageId != undefined)
{
wineUsage = tavernWineUsage[res.wineUsageId];
if (cellarLevel != '-') {
wineSave = wineUsage * cellarLevel;
wineSave = Math.round(wineSave / 100);
wineUsage = wineUsage - wineSave;
//res.wineUsage = wineUsage ;
}
}
else if (res.wineUsage != undefined) {
wineUsage = res.wineUsage;
} else {
// on devrait laisser vide, à verifier...
var tavernLevel = getBuildingLevel(CityId, "tavern", "-");
wineUsage = (tavernLevel != '-' ? tavernWineUsage[tavernLevel] : 0);
if (cellarLevel != '-') {
wineSave = wineUsage * cellarLevel;
wineSave = Math.round(wineSave / 100);
wineUsage = wineUsage - wineSave;
//res.wineUsage = wineUsage ;
}
}
curres.wood = getCurrentResourceAmount(EmpireBoard.StartTime, res.prodtime, res.wood, res.prodwood);
curres.wine = getCurrentResourceAmount(EmpireBoard.StartTime, res.prodtime, res.wine, res.prodwine - wineUsage);
curres.marble = getCurrentResourceAmount(EmpireBoard.StartTime, res.prodtime, res.marble, res.prodmarble);
curres.glass = getCurrentResourceAmount(EmpireBoard.StartTime, res.prodtime, res.glass, res.prodglass);
curres.sulfur = getCurrentResourceAmount(EmpireBoard.StartTime, res.prodtime, res.sulfur, res.prodsulfur);
if (res.tradewood == undefined) res.tradewood = 0;
if (res.tradewine == undefined) res.tradewine = 0;
if (res.trademarble == undefined) res.trademarble = 0;
if (res.tradeglass == undefined) res.tradeglass = 0;
if (res.tradesulfur == undefined) res.tradesulfur = 0;
arrres.wood = getArrivingGoodsSum(CityId, 'wood');
arrres.wine = getArrivingGoodsSum(CityId, 'wine');
arrres.marble = getArrivingGoodsSum(CityId, 'marble');
arrres.glass = getArrivingGoodsSum(CityId, 'glass');
arrres.sulfur = getArrivingGoodsSum(CityId, 'sulfur');
sumres.wood += curres.wood;
sumres.wine += curres.wine;
sumres.marble += curres.marble;
sumres.glass += curres.glass;
sumres.sulfur += curres.sulfur;
sumProd.wood += res.prodwood;
sumProd.wine += res.prodwine;
sumProd.wineUsage += wineUsage;
sumProd.marble += res.prodmarble;
sumProd.glass += res.prodglass;
sumProd.sulfur += res.prodsulfur;
sumArTr.wood += res.tradewood + arrres.wood;
sumArTr.wine += res.tradewine + arrres.wine;
sumArTr.marble += res.trademarble + arrres.marble;
sumArTr.glass += res.tradeglass + arrres.glass;
sumArTr.sulfur += res.tradesulfur + arrres.sulfur;
var Income = getArrValue(res.buildings["townHall"],"incomegold","?");
if (Income != "?")
{
sumres.Income += Income;
}
var reservedGold = '';
if (res.buildings["branchOffice"] != undefined)
{
if (res.buildings["branchOffice"].reservedGold == undefined)
{
reservedGold = '?';
}
else
{
reservedGold = res.buildings["branchOffice"].reservedGold;
if (reservedGold > 0)
{
if (sumres.reservedGold == '')
{
sumres.reservedGold = reservedGold;
}
else
{
sumres.reservedGold += reservedGold;
}
}
}
}
var Research = '-';
if (getBuildingLevel(CityId, "academy", 0) > 0)
{
Research = getArrValue(res.buildings["academy"],"Research","?");
if (Research != '?')
{
sumres.Research += Research;
}
}
//var wineRemainingHours = undefined;
var wineUsageHtml = ''+wineUsage;
if (wineUsage > 0)
{
//wineRemainingHours = floatFormat(curres.wine / wineUsage, 1) + " h";
wineUsageHtml = createSimpleProd(-1 * wineUsage);
}
var townHallLevel = getBuildingLevel(CityId, "townHall", "?", 0);
var happiness = getArrValue(res.buildings["townHall"], "happiness", "?");
var population = res.population;
var bonusspace = getArrValue(res.buildings["townHall"], "bonusspace", "?");
var spacetotal = townHallSpaces[townHallLevel];
var growth = 0;
//EmpireBoard.Log.Add('Happy['+CityId+']='+happiness);
if (happiness != "?")
{
//EmpireBoard.Log.Add('Pop['+CityId+']='+population);
population = getEstimatedPopulation(population, res.prodtime, EmpireBoard.StartTime, happiness - population);
//EmpireBoard.Log.Add('Estimate pop['+CityId+']='+population);
if (parseInt(population) > parseInt(spacetotal) + parseInt(bonusspace))
{
population = parseInt(spacetotal) + parseInt(bonusspace);
}
happiness -= population;
if (happiness != 0) growth = (0.02 * happiness) + 0.01;
}
else
{
growth = getArrValue(res.buildings["townHall"], "growth", "?");
}
//EmpireBoard.Log.Add('Growth['+CityId+']='+growth);
sumres.population += population;
var growthRemainingHours = undefined;
if (happiness != "?" && happiness > 0 && bonusspace != "?" && growth >= 0.20) {
growthRemainingHours = getGrowthRemainingHours(population, parseInt(spacetotal) + parseInt(bonusspace), EmpireBoard.StartTime, happiness);
}
if ((growth != '?') && (sumres.growth != '?'))
{
if (parseInt(population) < parseInt(spacetotal) + parseInt(bonusspace)) sumres.growth += growth;
}
else
{
sumres.growth = '?';
}
var trclass = "";
if (parseInt(current_city_id) == parseInt(CityId)) {
trclass = "current";
}
var townHallStyle = "";
var growthStyle = "";
if (parseInt(population) >= parseInt(spacetotal) + parseInt(bonusspace))
{
growthRemainingHours = '';
if (growth >= 1.20)
{
townHallStyle = " DarkRed";
}
else if (growth >= 0.20)
{
townHallStyle = " Brown";
}
else
{
townHallStyle = " Bold";
}
}
else if (growth >= 0.20)
{
growthStyle = " Green";
}
else if (growth >= 0)
{
growthStyle = "";
}
else if (growth <= -1)
{
growthStyle = " Red";
}
else if (growth <= -0.20)
{
growthStyle = " DarkRed";
}
if (bonusspace != "?") {
if (sumres.spacetotal != '?') sumres.spacetotal += parseInt(spacetotal) + parseInt(bonusspace);
//spacetotal = createTooltip(mynumberformat(parseInt(spacetotal) + parseInt(bonusspace)), mynumberformat(spacetotal) + " + " + mynumberformat(bonusspace));
spacetotal = mynumberformat(parseInt(spacetotal) + parseInt(bonusspace));
} else {
sumres.spacetotal = '?';
spacetotal = mynumberformat(spacetotal) + " + ?";
}
var warehouseLevel = getBuildingLevel(CityId,"warehouse", 0, -1);
var maxcwood = EmpireBoard.Ikariam.Resource_Capacity('wood',warehouseLevel);
var maxcother = EmpireBoard.Ikariam.Resource_Capacity('wine',warehouseLevel);
var maxsafewood = EmpireBoard.Ikariam.Resource_SafeCapacity('wood',warehouseLevel);
var maxsafeother = EmpireBoard.Ikariam.Resource_SafeCapacity('wine',warehouseLevel);
var cityLink = '';
if (reportViewToSurvey('',CityId) == '!')
{
cityLink = createLinkToChangeCity(Cities[CityId].name, CityId, i, reportViewToSurvey('',CityId),'Red', 'Require attention');
}
else
{
cityLink = createLinkToChangeCity(Cities[CityId].name, CityId, i , res.actions, 'Green', 'Available action points');
}
s += "<tr class='"+trclass+"' cityid='"+CityId+"'>";
s += "<td class='city_name' nowrap>"+cityLink+createTransports(CityId)+"</td>"+
"<td class='actions' nowrap>"+createLinkToMap(CityId)+"<br />"+createLinkToAgora(CityId)+createLinkToTransportGoods(CityId)+"</td>"+
"<td class='lf"+townHallStyle+"'>"+
(population > 0 ? mynumberformat(population) : '?')+
"</td>"+
"<td>"+spacetotal+"</td>"+
"<td class='"+growthStyle+"'>"+(growth != '?' ? '<img src="'+EmpireBoard.Ikariam.Get_Happiness_ImgSrc(growth)+'" align=left height=18 hspace=2 vspace=0>' : '')+createTooltip(floatFormat(growth,2,true), growthRemainingHours)+"</td>"+
"<td class='lf'>"+createResearch(Research)+"</td>"+
"<td class='lf'>"+
createIncome(Income)+
createReservedGold(reservedGold)+
"</td>"+
"<td class='lf' resource='wood'>"+
createLinkToResourceCond(true, createResCounter(res.prodtime, res.wood, res.prodwood, false, maxcwood, res.tradewood, maxsafewood), res.island_id, CityId, i)+
getArrivingGoods(CityId, "wood", res.tradewood, curres.wood, arrres.wood)+
createResProgressBar(res.prodtime, res.wood + arrres.wood, res.prodwood, maxcwood - res.tradewood, maxsafewood)+
"</td>"+
"<td>"+createProd(res.prodwood)+"</td>"+
"<td class='lf' resource='wine'>"+
createLinkToTradegoodCond((res.prodwine > 0) || (res.prodgood == 'wine'), createResCounter(res.prodtime, res.wine, res.prodwine - wineUsage, true, maxcother, res.tradewine, maxsafeother, arrres.wine), res.island_id, CityId, i)+
getArrivingGoods(CityId, "wine", res.tradewine, curres.wine, arrres.wine)+
createResProgressBar(res.prodtime, res.wine + arrres.wine, res.prodwine - wineUsage, maxcother - res.tradewine, maxsafeother)+
"</td>"+
"<td>"+createSimpleProd(res.prodwine)+"</td>"+
"<td>"+wineUsageHtml+"</td>"+
"<td class='lf' resource='marble'>"+
createLinkToTradegoodCond((res.prodmarble > 0) || (res.prodgood == 'marble'), createResCounter(res.prodtime, res.marble, res.prodmarble, false, maxcother, res.trademarble, maxsafeother), res.island_id, CityId, i)+
getArrivingGoods(CityId, "marble", res.trademarble, curres.marble, arrres.marble)+
createResProgressBar(res.prodtime, res.marble + arrres.marble, res.prodmarble, maxcother - res.trademarble, maxsafeother)+
"</td>"+
"<td>"+createProd(res.prodmarble)+"</td>"+
"<td class='lf' resource='glass'>"+
createLinkToTradegoodCond((res.prodglass > 0) || (res.prodgood == 'glass'), createResCounter(res.prodtime, res.glass, res.prodglass, false, maxcother, res.tradeglass, maxsafeother), res.island_id, CityId, i)+
getArrivingGoods(CityId, "glass", res.tradeglass, curres.glass, arrres.glass)+
createResProgressBar(res.prodtime, res.glass + arrres.glass, res.prodglass, maxcother - res.tradeglass, maxsafeother)+
"</td>"+
"<td>"+createProd(res.prodglass)+"</td>"+
"<td class='lf' resource='sulfur'>"+
createLinkToTradegoodCond((res.prodsulfur > 0) || (res.prodgood == 'sulfur'), createResCounter(res.prodtime, res.sulfur, res.prodsulfur, false, maxcother, res.tradesulfur, maxsafeother), res.island_id, CityId, i)+
getArrivingGoods(CityId, "sulfur", res.tradesulfur, curres.sulfur, arrres.sulfur)+
createResProgressBar(res.prodtime, res.sulfur + arrres.sulfur, res.prodsulfur, maxcother - res.tradesulfur, maxsafeother)+
"</td>"+
"<td>"+createProd(res.prodsulfur)+"</td>";
s += "</tr>";
i++;
}
s += "</tbody>";
var goldRemainingHours = '';
var goldStyle = '';
if (sumres.Income < 0)
{
var RemainingHours = -1 * config.gold / sumres.Income;
if (RemainingHours <= 6)
{
goldStyle = 'Red';
}
else if (RemainingHours <= 72)
{
goldStyle = 'DarkRed';
}
//goldRemainingHours = floatFormat(RemainingHours, 1) + " h";
goldRemainingHours = getTimestring(RemainingHours*60*60*1000)+" to expense";
}
s += "<tfoot><tr>";
s += "<td nowrap colspan=2><img vspace=2 hspace=5 src='skin/layout/sigma.gif'></td>"+
"<td class='lf'>"+mynumberformat(sumres.population)+"</td>"+
"<td>"+mynumberformat(sumres.spacetotal)+"</td>"+
"<td>"+floatFormat(sumres.growth,2,true)+"</td>"+
"<td class='lf'>"+createResearch(sumres.Research)+"</td>"+
"<td class='lf'>"+
createIncome(sumres.Income, goldRemainingHours, goldStyle)+
createReservedGold(sumres.reservedGold)+
"</td>"+
"<td class='lf'>"+
createResCounter(EmpireBoard.StartTime, sumres.wood, sumProd.wood)+
createMoreGoods(sumArTr.wood)+
"</td>"+
"<td>"+createProd(sumProd.wood)+"</td>"+
"<td class='lf'>"+
createResCounter(EmpireBoard.StartTime, sumres.wine, sumProd.wine - sumProd.wineUsage, true)+
createMoreGoods(sumArTr.wine)+
"</td>"+
"<td>"+createSimpleProd(sumProd.wine)+"</td>"+
"<td>"+createSimpleProd(-1 * sumProd.wineUsage)+"</td>"+
"<td class='lf'>"+
createResCounter(EmpireBoard.StartTime, sumres.marble, sumProd.marble)+
createMoreGoods(sumArTr.marble)+
"</td>"+
"<td>"+createProd(sumProd.marble)+"</td>"+
"<td class='lf'>"+
createResCounter(EmpireBoard.StartTime, sumres.glass, sumProd.glass)+
createMoreGoods(sumArTr.glass)+
"</td>"+
"<td>"+createProd(sumProd.glass)+"</td>"+
"<td class='lf'>"+
createResCounter(EmpireBoard.StartTime, sumres.sulfur, sumProd.sulfur)+
createMoreGoods(sumArTr.sulfur)+
"</td>"+
"<td>"+createProd(sumProd.sulfur)+"</td>";
s += "</tr></tfoot>";
s += "</table>";
s += "<p class='Caption'>(<span class=Green>1-9</span>) available action points. (<span class=Red>!</span>) require your attention to update overview's data. (<img src='skin/layout/icon-wall.gif' class='Safe' />) resources safe against pillaging. (<span class=Green>*</span>) some resources delivered.</p>";
s += "</div>";
}
if (TABLE_ARMYFLEET)
{
var usedIndexes = [];
var usedIndexesCount = 0;
if (config["unitnames"] != undefined)
{
var names = config["unitnames"];
var orderedUnits = {}; // And type value
orderedUnits['unit phalanx'] = 'army line1';
orderedUnits['unit steamgiant'] = 'army line1';
orderedUnits['unit spearman'] = 'army flank';
orderedUnits['unit swordsman'] = 'army flank';
orderedUnits['unit slinger'] = 'army line2';
orderedUnits['unit archer'] = 'army line2';
orderedUnits['unit marksman'] = 'army line2';
orderedUnits['unit ram'] = 'army artillery';
orderedUnits['unit catapult'] = 'army artillery';
orderedUnits['unit mortar'] = 'army artillery';
orderedUnits['unit gyrocopter'] = 'army air';
orderedUnits['unit bombardier'] = 'army air';
orderedUnits['unit cook'] = 'army support';
orderedUnits['unit medic'] = 'army support';
orderedUnits['unit ship_ram'] = 'fleet line1';
orderedUnits['unit ship_flamethrower'] = 'fleet line1';
orderedUnits['unit ship_steamboat'] = 'fleet line1';
orderedUnits['unit ship_ballista'] = 'fleet line2';
orderedUnits['unit ship_catapult'] = 'fleet line2';
orderedUnits['unit ship_mortar'] = 'fleet line2';
orderedUnits['unit ship_submarine'] = 'fleet submarine';
var CityId;
var i = 0;
for (CityId in Cities)
{
var res = getCity(CityId);
for(key in orderedUnits)
{
if (parseInt(getArrValue(getArrValue(res.units, key), "count", 0)) > 0)
{
usedIndexes[key] = 1;
usedIndexesCount++;
}
else if (parseInt(getArrValue(getArrValue(res.units, key), "construction", 0)) > 0)
{
usedIndexes[key] = 1;
usedIndexesCount++;
}
}
i++;
}
}
s += "<div id='EmpireBoardArmy' class='Table'><table class='Overview Army'>";
s += "<thead><tr><th class='city_name' nowrap>"+texts["cityName"]+"</th>";
s += "<th class='actions' nowrap>"+createLinkToMilitaryAdvisorView()+"</th>";
if (usedIndexesCount > 0)
{
var firstStyle = "";
var lastTopic = '';
for(key in orderedUnits)
{
var name = names[key];
if (usedIndexes[key] == 1)
{
if (lastTopic != orderedUnits[key]) { firstStyle = "lf"; } else { firstStyle = ""; }
s += "<th class='"+firstStyle+" unit_name "+TrimUnitID(key)+"' nowrap "+createTooltipAttribute(name)+">"+Trim(name)+"</th>";
firstStyle = "";
lastTopic = orderedUnits[key];
}
}
}
else s += "<th class='lf'></th><th></th><th></th><th></th><th></th><th></th><th></th>";
s += "</tr></thead>";
s += "<tbody>";
var sum = [];
var sumConstruction = [];
var CityId;
var i = 0;
for (CityId in Cities)
{
var res = getCity(CityId);
var trclass = (parseInt(current_city_id) == parseInt(CityId)) ? "current" : "";
s += "<tr class='"+trclass+"'>";
s += "<td class='city_name' nowrap>"+
createLinkToChangeCity(Cities[CityId].name, CityId, i, res.actions, 'Green', 'Available action points')+
createMovements(CityId)+
"</td>";
s += "<td class='actions' nowrap>"+createLinkToMilitaryView(CityId)+"<br />"+createLinkToDeploy(CityId)+"</td>";
if (usedIndexesCount > 0)
{
var firstStyle = "";
var lastTopic = '';
for(key in orderedUnits)
{
if (usedIndexes[key] == 1)
{
if (lastTopic != orderedUnits[key]) { firstStyle = "lf"; } else { firstStyle = ""; }
var unitCount = getIntValue(getArrValue(getArrValue(res.units, key), "count", "0"), 0);
if (unitCount == 0)
{
unitCount = "-";
}
else
{
sum[key] = (sum[key] == undefined) ? unitCount : sum[key] + unitCount;
}
var unitConstructionHTML = '<font class="More">-</font>';
var unitConstruction = getIntValue(getArrValue(getArrValue(res.units, key), "construction", "0"), 0);
if (unitConstruction > 0)
{
unitConstructionHTML = '<font class="More" title="'+texts["currentlyBuilding"]+'">'+mynumberformat(unitConstruction, true)+'</font>';
sumConstruction[key] = (sumConstruction[key] == undefined) ? unitConstruction : sumConstruction[key] + unitConstruction;
}
s += "<td class='"+firstStyle+"'>"+
mynumberformat(unitCount)+
unitConstructionHTML+
"</td>";
lastTopic = orderedUnits[key];
}
}
}
else s += "<td class='lf'></td><td></td><td></td><td></td><td></td><td></td><td></td>";
s += "</tr>";
i++;
}
s += "</tbody>";
s += "<tfoot><tr>";
s += "<td colspan=2><img vspace=2 hspace=5 src='skin/layout/sigma.gif'></td>";
if (usedIndexesCount > 0)
{
var firstStyle = "";
var lastTopic = '';
for(key in orderedUnits)
{
if (usedIndexes[key] == 1)
{
if (lastTopic != orderedUnits[key]) { firstStyle = "lf"; } else { firstStyle = ""; }
var unitConstructionHTML = '<font class="More">-</font>';
if (sumConstruction[key] > 0)
{
unitConstructionHTML = '<font class="More">'+mynumberformat(sumConstruction[key], true)+'</font>';
}
s += "<td class='"+firstStyle+"'>"+
mynumberformat(sum[key])+
unitConstructionHTML+
"</td>";
lastTopic = orderedUnits[key];
}
}
}
else s += "<td class='lf'></td><td></td><td></td><td></td><td></td><td></td><td></td>";
s += "</tr></tfoot>";
s += "</table>";
s += "<p class='Caption'>(<span class=Green>1-9</span>) available action points. (<span class=Red>!</span>) require your attention to update overview's data.</p>";
s + "</div>";
}
var body = EmpireBoard.DOM.Get_First_Node("//body");
var table_mode = "new_table";
var span = document.getElementById("EmpireBoard");
if (span == null) {
span = document.createElement('div');
span.id = "EmpireBoard";
span.setAttribute("version", EmpireBoard.Version);
//span.align = "center";
if (langtype == "rf")
{
span.setAttribute("dir", "rtl");
span.setAttribute("class", "RtoL");
}
span.innerHTML = s;
body.appendChild(span);
} else {
//span.align = "center";
if (langtype == "rf")
{
span.setAttribute("dir", "rtl");
span.setAttribute("class", "RtoL");
}
span.innerHTML = s;
table_mode = "new_table";
}
//settings table
function reset_all_data() {
var answer = confirm("Are you sure you want to delete ALL stored data ?");
if (answer) {
setVar("config", "");
window.location.href = window.location.href;
}
}
function myChkEventHandler() {
this.value = (this.value == '1' ? '0' : '1');
config.cfg[this.lang] = (this.value == '1');
EmpireBoard.DB.Save();
}
function myChgEventHandler() {
config.cfg[this.lang] = this.value;
EmpireBoard.DB.Save();
}
function createChk(propertyName, propertyValue) {
var btn = document.createElement('input');
btn.type = "checkbox";
btn.lang = propertyName;
btn.value = (propertyValue == true ? '1' : '0');
if (propertyValue == true) {
btn.checked = "checked";
}
btn.addEventListener('click', myChkEventHandler, false);
return btn;
}
function createInp(propertyName, propertyValue) {
var btn = document.createElement('input');
btn.type = "text";
btn.lang = propertyName;
btn.value = propertyValue;
btn.addEventListener('change', myChgEventHandler, false);
return btn;
}
function createTxtr(propertyName, propertyValue, rows, cols) {
var btn = document.createElement('textarea');
btn.cols = (cols != undefined) ? cols : 50;
btn.rows = (rows != undefined) ? rows : 15;
btn.lang = propertyName;
btn.value = propertyValue;
btn.addEventListener('change', myChgEventHandler, false);
return btn;
}
function createSlct(propertyName, propertyValue, items) {
var btn = document.createElement('select');
btn.lang = propertyName;
for(key in items) {
var o = document.createElement("option");
o.value = key;
o.text = items[key];
btn.add(o, null);
}
btn.value = propertyValue;
btn.addEventListener('change', myChgEventHandler, false);
return btn;
}
function createRow(title, input) {
var tr = document.createElement('tr');
var td = document.createElement('td');
td.setAttribute("align", "right");
td.setAttribute("style", "border-style: dotted; border-width: 1px;");
td.innerHTML = title;
tr.appendChild(td);
var td = document.createElement('td');
td.setAttribute("align", "left");
td.setAttribute("style", "border-style: dotted; border-width: 1px;");
td.appendChild(input);
tr.appendChild(td);
return tr;
}
function createRowChk(title, propertyName, propertyValue) {
return createRow(title, createChk(propertyName, propertyValue));
}
function createRowInput(title, propertyName, propertyValue) {
return createRow(title, createInp(propertyName, propertyValue));
}
function createRowTxtr(title, propertyName, propertyValue, rows, cols) {
return createRow(title, createTxtr(propertyName, propertyValue, rows, cols));
}
function createRowSlct(title, propertyName, propertyValue, items) {
return createRow(title, createSlct(propertyName, propertyValue, items));
}
var t = document.createElement('table');
t.id = "EmpireBoardSettings";
t.setAttribute("style", "display: none;");
t.setAttribute("align", "right");
t.appendChild(createRowChk("Show resources table:", "TABLE_RESOURCES", TABLE_RESOURCES));
t.appendChild(createRowChk("Show buildings table:", "TABLE_BUILDINGS", TABLE_BUILDINGS));
t.appendChild(createRowChk("Show army and fleet table:", "TABLE_ARMYFLEET", TABLE_ARMYFLEET));
t.appendChild(createRowSlct("Resource progress bar mode:", "PROGRESS_BAR_MODE", PROGRESS_BAR_MODE, {off: "off", time: "based on remaining time", percent: "based on fullness percentage"}));
t.appendChild(createRowSlct("Language:", "LANGUAGE", language, {"": "Automatic from server name",ae: "العربية", en: "English", hu: "Magyar", de: "Deutsch", cz: "Czech", tr: "Turkish", es: "Espanol", ba: "Bosnian", it: "Italiano", pt: "Portuguese", fr: "Français", pl: "Polish", ro: "Romanian", gr: "Greek", cn: "Chinese", nl: "Dutch", cz: "Czech", vn: "Vietnamese", tw: "Chinese (traditional)", fi: "Finnish", se: "Swedish", il: "Hebrew", sk: "Slovak", bg: "Bulgarian", sl: "Slovenian"}));
var tr = document.createElement('tr');
t.appendChild(tr);
var td = document.createElement('td');
tr.appendChild(td);
td.setAttribute("colspan", "2");
var buttonsPanel = document.createElement('div');
td.appendChild(buttonsPanel);
//reset button
var n = document.createElement('input');
n.type = "button";
n.value = "Reset all data";
n.setAttribute("class", "button");
n.setAttribute("style", "display: inline !important;");
n.addEventListener("click", reset_all_data, false);
buttonsPanel.appendChild(n);
if (table_mode == "new_table") {
//show / hide button
function show_hide_table()
{
var n = document.getElementById("EmpireBoardSettings");
var m = document.getElementById("EmpireBoardAddons");
if (n.style.display == 'none')
{
n.style.display = 'table';
m.style.display = 'block';
this.value = texts["hide_settings"];
}
else
{
n.style.display = 'none';
m.style.display = 'none';
this.value = texts["show_settings"];
}
}
//now adds table
span.appendChild(t);
var ul = document.createElement('ul');
ul.id = 'EmpireBoardAddons';
ul.setAttribute("style", "display: none;");
ul.innerHTML = '<u>Registered add-ons :</u>';
span.appendChild(ul);
var p = document.createElement('p');
p.setAttribute("class", "Footer");
var n = document.createElement('span');
n.innerHTML = 'Powered by <a href="http://userscripts.org/scripts/show/41051" target="_blank"><b>'+EmpireBoard.ScriptName+'</b></a> (v. <i>' + EmpireBoard.Version + '</i>). ';
if (EmpireBoard.DB.Options['AvailableVersion'] > EmpireBoard.Version)
n.innerHTML += '<a href="'+EmpireBoard.ScriptURL+'?version='+EmpireBoard.DB.Options['AvailableVersion']+'.user.js'+'" style="color: red;"><b>NEW RELEASE V. <i>'+EmpireBoard.DB.Options['AvailableVersion']+'</i> AVAILABLE !</b></a> ';
p.appendChild(n);
var n = document.createElement('input');
n.type = "button";
n.value = texts["show_settings"];
n.setAttribute("class", "button");
n.addEventListener("click", show_hide_table, false);
p.appendChild(n);
// footer
span.appendChild(p);
}
//myTimeCounterF(200, true);
}
function Trim(str, strict)
{
if (str != undefined)
{
str = str.replace(/ /gi, " ");
str = str.replace(/\t/gi, " ");
str = str.replace(/\v/gi, "");
str = str.replace(/\f/gi, "");
str = str.replace(/\n/gi, "");
str = str.replace(/\r/gi, "");
//str = str.replace(/\e/gi, "");
str = str.replace(/\s/gi, " ");
if ((strict == undefined) || (strict == true))
{
str = str.replace(/\[.+\]/gi, "");
str = str.replace(/\(.+\)/gi, "");
}
while(str.charAt(0) == (" ") ){
str = str.substring(1);
}
while(str.charAt(str.length-1) == " " ){
str = str.substring(0,str.length-1);
}
}
return str;
}
function TrimUnitID(str)
{
str = str.replace("unit", "");
str = str.replace("currentUnit", "");
return Trim(str, false);
}
function TrimIsland100(str){
var a = str.indexOf('[');
var b = str.indexOf(']');
str = str.substring(a+1,b);
var coords = str.split(':');
res = '[';
res += EmpireBoard.Str.TwoDigit(coords[0].substr(-2,2));
res += ':';
res += EmpireBoard.Str.TwoDigit(coords[1].substr(-2,2));
res += ']';
return res;
}
// the tooltip object
EmpireBoard.Tooltip =
{
_Parent: null,
// setup properties of tooltip object
id:"EmpireBoardTooltip",
offsetx : 10,
offsety : 10,
_x : 0,
_y : 0,
_tooltipElement:null,
_saveonmouseover:null
};
EmpireBoard.Tooltip.Init = function(parent)
{
if (parent != undefined) this._Parent = parent;
// tooltip for GreaseMonkey
var body = document.getElementById("EmpireBoard");
var tooltipdiv = document.createElement('div');
tooltipdiv.id = "EmpireBoardTooltip";
tooltipdiv.innerHTML = "";
tooltipdiv.style.visibility = 'hidden';
body.appendChild(tooltipdiv);
};
EmpireBoard.Tooltip.innerHTML = function (Content, Title)
{
if (Content == undefined || Content == "")
{
return "";
}
else
{
var innerHTML = '';
if (Title == undefined || Title == "")
{
Title = "";
}
else Title = "<div class=TTTitle>"+Title+"</div>";
if (langtype == "rf")
{
innerHTML = "<div dir=rtl class='TTContent RtoL'>"+Title+Content+"</div>";
}
else
{
innerHTML = "<div class=TTContent>"+Title+Content+"</div>";
}
return innerHTML;
}
};
EmpireBoard.Tooltip.show = function (htmlelement)
{
if (document.getElementById)
{
this._tooltipElement = document.getElementById(this.id);
}
else if ( document.all )
{
this._tooltipElement = document.all[this.id].style;
}
this._tooltipElement.innerHTML = htmlelement;
this.moveTo(this._x + this.offsetx , this._y + this.offsety);
if (this._tooltipElement.style)
{
this._tooltipElement.style.visibility ="visible";
}
else
{
this._tooltipElement.visibility = "visible";
}
return false;
};
EmpireBoard.Tooltip.hide = function(e)
{
if (this._tooltipElement.style)
{
this._tooltipElement.style.visibility ="hidden";
}
else
{
this._tooltipElement.visibility = "hidden";
}
};
// Moves the tooltip element
EmpireBoard.Tooltip.mouseMove = function(e)
{
// we don't use "this" because this method is assign to an event of document
// and so is dereferenced
if (e == undefined) e = event;
if (e.pageX != undefined)
{ // gecko, konqueror,
this._x = e.pageX;
this._y = e.pageY;
}
else if (event != undefined && event.x != undefined && event.clientX == undefined)
{ // ie4 ?
this._x = event.x;
this._y = event.y;
}
else if (e.clientX != undefined )
{ // IE6, IE7, IE5.5
if (document.documentElement)
{
this._x = e.clientX + ( document.documentElement.scrollLeft || document.body.scrollLeft);
this._y = e.clientY + ( document.documentElement.scrollTop || document.body.scrollTop);
}
else
{
this._x = e.clientX + document.body.scrollLeft;
this._y = e.clientY + document.body.scrollTop;
}
/*
}
else if(event != undefined && event.x != undefined)
{ // IE6, IE7, IE5.5
tooltip.x = event.x + ( document.documentElement.scrollLeft || document.body.scrollLeft);
tooltip.y = event.y + ( document.documentElement.scrollTop || document.body.scrollTop);
*/
}
else
{
this._x = 0;
this._y = 0;
}
var MovX = this._x + this.offsetx;
if ((MovX+this.GetDivW(this._tooltipElement)) > (this.GetClientW() + this.GetScrollX() - 2))
{
MovX = this.GetClientW() + this.GetScrollX() - 2 - this.GetDivW(this._tooltipElement);
}
var MovY = this._y - this.offsety - this.GetDivH(this._tooltipElement);
if (MovY < (this.GetScrollY() + 2))
{
MovY = this._y + this.offsety;
}
//window.status = "Scroll="+this.GetScrollX()+","+this.GetScrollY();
//window.status = "Client="+this.GetClientW()+","+this.GetClientH();
this.moveTo(MovX , MovY);
};
EmpireBoard.Tooltip.GetDivH = function(el)
{
return (el ? (el.offsetHeight || el.style.pixelHeight || 0) : 0);
};
EmpireBoard.Tooltip.GetDivW = function(el)
{
return (el ? (el.offsetWidth || el.style.pixelWidth || 0) : 0);
};
EmpireBoard.Tooltip.GetClientW = function()
{
var tt_db = document.documentElement || document.body ||
(document.getElementsByTagName ? document.getElementsByTagName("body")[0]
: null);
return (document.body && (typeof(document.body.clientWidth) != 'undefined') ? document.body.clientWidth
: (typeof(window.innerWidth) != 'undefined') ? window.innerWidth
: tt_db ? (tt_db.clientWidth || 0)
: 0);
};
EmpireBoard.Tooltip.GetClientH = function()
{
var tt_db = document.documentElement || document.body ||
(document.getElementsByTagName ? document.getElementsByTagName("body")[0]
: null);
// Exactly this order seems to yield correct values in all major browsers
return (document.body && (typeof(document.body.clientHeight) != 'undefined') ? document.body.clientHeight
: (typeof(window.innerHeight) != 'undefined') ? window.innerHeight
: tt_db ? (tt_db.clientHeight || 0)
: 0);
};
EmpireBoard.Tooltip.GetScrollX = function()
{
var tt_db = document.documentElement || document.body ||
(document.getElementsByTagName ? document.getElementsByTagName("body")[0]
: null);
return (window.pageXOffset || (tt_db ? (tt_db.scrollLeft || 0) : 0));
};
EmpireBoard.Tooltip.GetScrollY = function()
{
var tt_db = document.documentElement || document.body ||
(document.getElementsByTagName ? document.getElementsByTagName("body")[0]
: null);
return (window.pageYOffset || (tt_db ? (tt_db.scrollTop || 0) : 0));
};
// Move the tooltip element
EmpireBoard.Tooltip.moveTo = function(xL,yL)
{
if (this._tooltipElement.style)
{
this._tooltipElement.style.left = xL +"px";
this._tooltipElement.style.top = yL +"px";
}
else
{
this._tooltipElement.left = xL;
this._tooltipElement.top = yL;
}
};
if ((EmpireBoard.Ikariam.View() != '') && (EmpireBoard.Ikariam.View() != 'errorLoggedOut') && (EmpireBoard.Ikariam.View() != 'no-login-umod'))
{
// Fix for v3
var body = EmpireBoard.DOM.Get_First_Node("//body");
var script = document.createElement('script');
script.type = "text/javascript";
script.src = "/js/wz_tooltip.js";
body.appendChild(script);
renderTables();
EmpireBoard.Tooltip.Init();
EmpireBoard.DB.Save();
applyChangeCityEvents();
applyArrivingGoodEvents();
window.setInterval(myTimeCounterF, 1000);
window.setInterval(realtimeFactDisplayF, 5000);
EmpireBoard.CheckScriptUpdate();
};
EmpireBoard.EndTime = new Date().getTime();
EmpireBoard.Log.Add('Ended after '+((EmpireBoard.EndTime - EmpireBoard.StartTime)/1000)+'s');
