There are 78 previous versions of this script.
the source is over 100KB, syntax highlighting in the browser is too slow
// coding: utf-8
// ==UserScript==
// @name Ikariam Empire Board
// @namespace empire-board.ikariam
// @version 209
// @author oliezekat
// @description Display population, resources, trading, transports, incomes, buildings, and army or fleet units overviews for each cities. Support any countries/languages.
// @icon http://s3.amazonaws.com/uso_ss/icon/41051/large.jpg
// @require http://userscripts.org/scripts/source/60774.user.js
// @include http://s*.ikariam.*/*
// @include http://m*.ikariam.*/*
// @include http://s*.*.ikariam.*/*
// @include http://m*.*.ikariam.*/*
// @exclude http://support.ikariam.*/*
// @exclude http://board.*.ikariam.*/*
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_openInTab
// @grant GM_addStyle
// @grant GM_xmlhttpRequest
// @grant GM_log
// ==/UserScript==
/**************************************************************************************************
LAST CHANGES:
Version 2.0.9:
- Fix bug under Firefox 17 (or higher) ; no longer use E4X syntax.
- Grant Greasemonkey's API required.
- Apply Garbage collector only under Ikariam mobile version (to prevent lost of data).
- Add persian language, thank to elm10.
PREVIOUS CHANGES:
http://feeds.feedburner.com/ikariam-v3-empire-board
IMPORTANT:
Require "Ikariam Switch Login Type" script (by Tobbe) to play with Ikariam mobile version
on desktop computer.
http://userscripts.org/scripts/show/132189
Based on "Ikariam Alarm And Overview Table" script (for Ikariam v0.2.8)
http://userscripts.org/scripts/show/35995
**************************************************************************************************/
// Old global vars
var config;
var langtype;
var texts;
var buildings;
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,818,874,933,995,1060,1129,1202,1278];
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, 3660, 3830, 4004, 4180, 4360, 4540, 4724, 4910, 5098,
5290, 5482, 5678, 5876, 6076, 6278, 6484, 6710];
// Old objects
function Resource()
{
this.wood = 0;
this.wine = 0;
this.marble = 0;
this.glass = 0; // For crystal
this.sulfur = 0;
}
// New unique object
if (!EmpireBoard) var EmpireBoard = {};
EmpireBoard =
{
/* Requires modules */
Log: {},
DOM: {},
Str: {},
Ikariam: {},
DB: {},
Renders: {},
Tooltip: {},
Handlers: {},
Updater: {},
StartTime: 0,
EndTime: 0,
LogEnabled: false,
MainID: 'EmpireBoard',
/* Script metas */
ScriptName: 'Ikariam Empire Board',
Version: 209,
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.Intl.Init(this, this.MainID);
this.Renders.Init(this);
this.Tooltip.Init(this, this.MainID+'Tooltip', this.MainID, this.MainID);
this.Handlers.Init(this);
this.Updater.Init(this);
// Always create main div for add-ons which need to check version
var body = this.DOM.Get_First_Node("//body");
if (body != null)
{
var div = document.createElement('div');
div.id = this.MainID;
div.setAttribute("version", this.Version);
body.appendChild(div);
}
this.DB.Load();
this.Intl.SetLanguage(this.DB.Options.Prefs.LANGUAGE);
this.Intl.Load_LocalizedTexts();
// Str module presets
this.Str._decimalPoint = this.Ikariam.LocalizationStrings('decimalPoint');
this.Str._thousandSeparator = this.Ikariam.LocalizationStrings('thousandSeperator');
if (this.Str._decimalPoint == undefined)
this.Str._decimalPoint = '.';
if (this.Str._thousandSeparator == undefined)
this.Str._thousandSeparator = ',';
this.Str._timeunits_short_day = this.Ikariam.LocalizationStrings('day','timeunits','short');
this.Str._timeunits_short_hour = this.Ikariam.LocalizationStrings('hour','timeunits','short');
this.Str._timeunits_short_minute = this.Ikariam.LocalizationStrings('minute','timeunits','short');
this.Str._timeunits_short_second = this.Ikariam.LocalizationStrings('second','timeunits','short');
if (this.Str._timeunits_short_day == undefined)
this.Str._timeunits_short_day = 'D';
if (this.Str._timeunits_short_hour == undefined)
this.Str._timeunits_short_hour = 'h';
if (this.Str._timeunits_short_minute == undefined)
this.Str._timeunits_short_minute = 'm';
if (this.Str._timeunits_short_second == undefined)
this.Str._timeunits_short_second = 's';
this.CheckScriptUpdate();
this.FetchData();
};
EmpireBoard.FetchData = function()
{
// 1. Global data
// 1.1 current cities
this.Ikariam.Fetch_CitiesSelect(this.DB.CurrentCities, true);
// 1.2 gold
var GoldTitle = this.DOM.Get_First_Node_Title("//div[@id='globalResources']//li[@class='gold']",'?');
if (GoldTitle != '?')
{
config.gold = this.Str.To_Integer(GoldTitle, 0);
}
else
{
// not connected ?
}
this.Log.Add('Gold = '+config.gold);
// 2. Current city data
// 2.1 Current city Id
// 2.2 Current city ressources
// 3. Main view data
};
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.ViewIsFinances = function()
{
if (this.Ikariam.Is_Version('0.3.4') == true)
{
var Cities = this.DB.CurrentCities;
// 1. Sum of population
var overallPop = 0;
for (CityId in Cities)
{
if (Cities[CityId].own != true) continue;
var city = getCity(CityId);
var population = getArrValue(city.buildings['townHall'], 'population', '?');
if (population == '?')
{
overallPop = '?';
break;
}
else
{
overallPop += parseInt(population);
}
}
if (overallPop != '?')
{
this.Log.Add('overallPop = '+overallPop);
// 2. Fetch overall Upkeep
var overallUpkeep = '?';
var cells = this.DOM.Get_Nodes("//table[@id='upkeepReductionTable'][3]//td[contains(@class,'hidden')]");
if (cells.snapshotLength >= 3)
{
overallUpkeep = Math.abs(this.Str.To_Integer(cells.snapshotItem(1).textContent,0));
config["upkeeps"]['overall'] = overallUpkeep;
this.Log.Add('overallUpkeep = '+overallUpkeep);
}
if (overallUpkeep != '?')
{
// 3. Fetch and update citizens (gold) production
// 3.1. Array of cities per name
var citiesIDs = {};
var lName = '';
for (CityId in Cities)
{
if (Cities[CityId].own != true) continue;
var cName = Cities[CityId].name+'';
citiesIDs[cName] = parseInt(CityId);
if (lName == cName) this.Ikariam.Insert_Warning("You may choose different names for each cities.",this.ScriptName);
lName = cName+'';
}
// 3.2. Fetch cities table
var nodes = this.DOM.Get_Nodes("//table[@id='balance']//td[@class='city']");
for (var i = 0; i < nodes.snapshotLength; i++)
{
var node = nodes.snapshotItem(i);
var cName = this.Str.Trim(node.innerHTML);
var cID = citiesIDs[cName];
var tr = node.parentNode;
var tds = tr.getElementsByTagName("td");
//var tds = tr.childNodes;
var citizensProd = this.Str.To_Integer(tds[3].innerHTML);
var city = getCity(cID);
if (city.buildings["townHall"] == undefined) city.buildings["townHall"] = {};
city.buildings["townHall"].citizensProd = citizensProd;
this.Log.Add('['+cName+'] (from Finances): citizensProd='+citizensProd);
}
// 4. Calc shared upkeep for each cities
for (CityId in Cities)
{
if (Cities[CityId].own != true) continue;
var city = getCity(CityId);
var population = getArrValue(city.buildings['townHall'], 'population', '?');
if (population != '?')
{
var upkeep = Math.ceil(((overallUpkeep*parseInt(population)) / overallPop)-0.6);
city.buildings["townHall"].upkeep = upkeep;
this.Log.Add('['+Cities[CityId].name+'] (from Finances): upkeep='+upkeep);
// 5. Calc new income
var citizensProd = getArrValue(city.buildings['townHall'], 'citizensProd', '?');
if (citizensProd != '?')
{
var incomegold = citizensProd - upkeep;
city.buildings["townHall"].incomegold = incomegold;
this.Log.Add('['+Cities[CityId].name+'] (from Finances): incomegold='+incomegold);
}
}
}
}
}
}
else if (this.Ikariam.Is_Version('0.3.3') == true)
{
// Too late to support it, sorry
}
else
{
var citiesIDs = {};
var res = this.DOM.Get_Nodes("//select[@id='citySelect']/option");
for(var i = 0; i < res.snapshotLength; i++)
{
var n = res.snapshotItem(i);
var cName = this.Ikariam.Trim_Coords(n.innerHTML);
citiesIDs[cName] = parseInt(n.value);
}
var nodes = this.DOM.Get_Nodes("//table[@id='balance']//td[@class='city']");
for (var i = 0; i < nodes.snapshotLength; i++)
{
var node = nodes.snapshotItem(i);
var cName = this.Str.Trim(node.innerHTML);
var cID = citiesIDs[cName];
var tr = node.parentNode;
var tds = tr.getElementsByTagName("td");
//var tds = tr.childNodes;
var incomegold = this.Str.To_Integer(tds[3].innerHTML);
var city = getCity(cID);
if (city.buildings["townHall"] == undefined) city.buildings["townHall"] = {};
city.buildings["townHall"].incomegold = incomegold;
}
}
config.financestime = this.StartTime;
};
EmpireBoard.ViewIsCity = function()
{
};
EmpireBoard.ViewIsBuildingTemple = function()
{
var _self = this;
function reportTemple()
{
setViewRqTime('finances');
_self.DB.Save();
}
var n = document.getElementById("inputWorkersSubmit");
n.addEventListener("click", reportTemple, false);
var city = getCity(city_idmainView);
var n = document.getElementById("valuePriests");
city.buildings["temple"].priests = this.Str.To_Integer(n.textContent);
this.Log.Add('valuePriests = '+city.buildings["temple"].priests);
};
EmpireBoard.ViewIsBuildingMuseum = function()
{
var totalCulturalGoods = 0;
var players = this.DOM.Get_Nodes("//div[@id='mainview']//table[@class='content_table']//td[@class='player']");
if (players.snapshotLength > 0)
{
totalCulturalGoods = players.snapshotLength;
}
config.totalCulturalGoods = totalCulturalGoods;
this.Log.Add('totalCulturalGoods = '+config.totalCulturalGoods);
};
EmpireBoard.ViewIsBuildingPalace = function()
{
var newGov = 'ikakratie';
// values: ikakratie, aristokratie, demokratie
if (this.Ikariam.Is_Version('0.4.4'))
{
var government_pic_img = this.DOM.Get_First_Node("//*[@class='government_pic']/img");
var govRegExp = /\/([a-z]+)_280/.exec(government_pic_img.src);
if (govRegExp != null)
{
newGov = '' + RegExp.$1;
}
}
config.government = newGov;
this.Log.Add('Government = '+config.government);
};
EmpireBoard.ViewIsBuildingAcademy = function()
{
var _self = this;
function reportAcademy()
{
setViewRqTime('finances');
_self.DB.Save();
}
var n = document.getElementById("inputWorkersSubmit");
n.addEventListener("click", reportAcademy, false);
var city = getCity(city_idmainView);
var n = document.getElementById("valueResearch");
city.buildings["academy"].Research = this.Str.To_Integer(n.textContent);
this.Log.Add('valueResearch = '+city.buildings["academy"].Research);
var n = document.getElementById("valueWorkers");
city.buildings["academy"].scientists = this.Str.To_Integer(n.textContent);
this.Log.Add('valueWorkers(scientists) = '+city.buildings["academy"].scientists);
};
EmpireBoard.ViewIsBuildingBranchOffice = function()
{
var city = getCity(city_idmainView);
var reservedGold = document.getElementById("reservedGold");
if (reservedGold != null)
{
city.buildings["branchOffice"].reservedGold = this.Str.To_Integer(reservedGold.innerHTML, 0);
}
else
{
city.buildings["branchOffice"].reservedGold = 0;
}
// Fetch wood offer
city.tradewood = 0;
var selectElt = document.getElementById('resourceTradeType');
if ((selectElt != null) && (selectElt.value == '444'))
{
var inputElt = document.getElementById('resource');
if ((inputElt != null) && (inputElt.value != '') && (inputElt.value != '0'))
{
city.tradewood = this.Str.To_Integer(inputElt.value, 0);
}
}
// Fetch wine offer
city.tradewine = 0;
var selectElt = document.getElementById('tradegood1TradeType');
if ((selectElt != null) && (selectElt.value == '444'))
{
var inputElt = document.getElementById('tradegood1');
if ((inputElt != null) && (inputElt.value != '') && (inputElt.value != '0'))
{
city.tradewine = this.Str.To_Integer(inputElt.value, 0);
}
}
// Fetch marble offer
city.trademarble = 0;
var selectElt = document.getElementById('tradegood2TradeType');
if ((selectElt != null) && (selectElt.value == '444'))
{
var inputElt = document.getElementById('tradegood2');
if ((inputElt != null) && (inputElt.value != '') && (inputElt.value != '0'))
{
city.trademarble = this.Str.To_Integer(inputElt.value, 0);
}
}
// Fetch crystal offer
city.tradeglass = 0;
var selectElt = document.getElementById('tradegood3TradeType');
if ((selectElt != null) && (selectElt.value == '444'))
{
var inputElt = document.getElementById('tradegood3');
if ((inputElt != null) && (inputElt.value != '') && (inputElt.value != '0'))
{
city.tradeglass = this.Str.To_Integer(inputElt.value, 0);
}
}
// Fetch sulfur offer
city.tradesulfur = 0;
var selectElt = document.getElementById('tradegood4TradeType');
if ((selectElt != null) && (selectElt.value == '444'))
{
var inputElt = document.getElementById('tradegood4');
if ((inputElt != null) && (inputElt.value != '') && (inputElt.value != '0'))
{
city.tradesulfur = this.Str.To_Integer(inputElt.value, 0);
}
}
};
EmpireBoard.ViewIsIslandResource = function()
{
var cityID = 0;
cityID = this.DOM.Get_First_Node_Value("//form[@id='setWorkers']//input[@name='cityId']",0);
if (cityID > 0)
{
var city = getCity(cityID);
if (city.buildings["townHall"] == undefined) city.buildings["townHall"] = {};
// Fetch wood workers
var woodworkers = 0;
var valueWorkers = document.getElementById("valueWorkers");
if (valueWorkers != null)
{
woodworkers = Number(valueWorkers.textContent);
}
city.buildings["townHall"].woodworkers = woodworkers;
this.Log.Add('woodworkers (from Resource)='+woodworkers);
}
var _self = this;
function reportResource()
{
setViewRqTime('finances');
_self.DB.Save();
}
var n = document.getElementById("inputWorkersSubmit");
if (n != null)
{
n.addEventListener("click", reportResource, false);
}
};
EmpireBoard.ViewIsIslandTradeGood = function()
{
var cityID = 0;
cityID = this.DOM.Get_First_Node_Value("//form[@id='setWorkers']//input[@name='cityId']",0);
if (cityID > 0)
{
var city = getCity(cityID);
if (city.buildings["townHall"] == undefined) city.buildings["townHall"] = {};
// Fetch wood workers
var specialworkers = 0;
var valueWorkers = document.getElementById("valueWorkers");
if (valueWorkers != null)
{
specialworkers = Number(valueWorkers.textContent);
}
city.buildings["townHall"].specialworkers = specialworkers;
this.Log.Add('specialworkers (from Resource)='+specialworkers);
}
var _self = this;
function reportTradegood()
{
setViewRqTime('finances');
_self.DB.Save();
}
var n = document.getElementById("inputWorkersSubmit");
if (n != null)
{
n.addEventListener("click", reportTradegood, false);
}
};
EmpireBoard.ViewIsBuildingTavern = function()
{
var city = getCity(city_idmainView);
// New method Thank to TorfDrottel
var iniValue = 0;
var scripts = document.getElementsByTagName("script");
for (var j = 0; j < scripts.length; j++)
{
var nScript = scripts[j];
var sCode = nScript.innerHTML;
if (sCode.indexOf('create_slider') > 0)
{
iniValue = parseInt(/iniValue : (\d+)/.exec(sCode)[1])
}
}
city.wineUsageId = iniValue;
var savedWine = 0;
if (unsafeWindow && unsafeWindow.savedWine)
{
savedWine = unsafeWindow.savedWine[iniValue];
}
if ((savedWine == ' ') || (savedWine == ''))
{
savedWine = 0;
}
savedWine = Math.round(parseFloat(savedWine));
var wineUsage = tavernWineUsage[iniValue] - savedWine;
city.wineUsage = wineUsage;
this.Log.Add('Tavern: iniValue= '+iniValue+', savedWine='+savedWine+', wineUsage='+wineUsage);
var _self = this;
function storeWineUsage()
{
try
{
var city_id = _self.DOM.Get_First_Node_Value("//form[@id='wineAssignForm']/input[@type='hidden' and @name='id']");
var city = getCity(city_id);
var n = document.getElementById("wineAmount");
var iniValue = n.selectedIndex;
if (city.wineUsageId != iniValue)
{
setViewRqTime('townHall', city_id);
}
city.wineUsageId = iniValue;
var savedWine = getSavedWine();
var wineUsage = tavernWineUsage[iniValue] - savedWine;
city.wineUsage = wineUsage;
_self.Log.Add('Tavern: iniValue= '+iniValue+', savedWine='+savedWine+', wineUsage='+wineUsage);
_self.DB.Save();
}
catch (e)
{
}
}
// Fix for v3
function getSavedWine()
{
try
{
var n = document.getElementById("savedWine");
if ((n.innerHTML != ' ') && (_self.Str.Trim(n.innerHTML) != ''))
{
return Math.round(parseFloat(n.innerHTML));
}
else return 0;
}
catch (e)
{
return 0;
}
}
// Soon deprecated
var n = this.DOM.Get_First_Node("//form[@id='wineAssignForm']//*[@type='submit']");
n.addEventListener("click", storeWineUsage, false);
};
EmpireBoard.ViewIsBuildingTownHall = function()
{
var city = getCity(city_idmainView);
if (city.buildings["townHall"] == undefined) city.buildings["townHall"] = {};
var population = 0;
population = Number(this.DOM.Get_First_Node_TextContent("//li[contains(@class, 'space')]/span[contains(@class, 'occupied')]", "0"));
city.buildings["townHall"].population = population;
//city.population = population; // Soon deprecated
// May use happiness than growth...
city.buildings["townHall"].growth = this.Str.To_Float(this.DOM.Get_First_Node_TextContent("//li[contains(@class, 'growth')]/span[@class='value']", "0"),'?',this.Ikariam.LocalizationStrings('decimalPoint'));
this.Log.Add('Growth (from TownHall)='+city.buildings["townHall"].growth);
city.buildings["townHall"].happiness = Number(this.DOM.Get_First_Node_TextContent("//div[contains(@class, 'happiness')]/div[@class='value']", "0")) + city.buildings["townHall"].population;
city.buildings["townHall"].bonusspace = Number(this.DOM.Get_First_Node_TextContent("//li[contains(@class, 'space')]/span[contains(@class, 'total')]", "0")) - townHallSpaces[getBuildingLevel(city_idmainView, 'townHall', 1, 0)];
// Fetch citizens
var citizens = 0;
citizens = Number(this.DOM.Get_First_Node_TextContent("//div[contains(@class, 'citizens')]//span[@class='count']", "0"));
city.buildings["townHall"].citizens = citizens;
this.Log.Add('citizens (from TownHall)='+citizens);
// Fetch wood workers
var woodworkers = 0;
woodworkers = Number(this.DOM.Get_First_Node_TextContent("//div[contains(@class, 'woodworkers')]//span[@class='count']", "0"));
city.buildings["townHall"].woodworkers = woodworkers;
this.Log.Add('woodworkers (from TownHall)='+woodworkers);
// Fetch good workers
var specialworkers = 0;
specialworkers = Number(this.DOM.Get_First_Node_TextContent("//div[contains(@class, 'specialworkers')]//span[@class='count']", "0"));
city.buildings["townHall"].specialworkers = specialworkers;
this.Log.Add('specialworkers (from TownHall)='+specialworkers);
// Fetch scientist
var scientists = 0;
scientists = Number(this.DOM.Get_First_Node_TextContent("//div[contains(@class, 'scientists')]//span[@class='count']", "0"));
if ((scientists > 0) || (city.buildings["academy"] != undefined))
{
if (city.buildings["academy"] == undefined) city.buildings["academy"] = {};
city.buildings["academy"].scientists = scientists;
}
this.Log.Add('scientists (from TownHall)='+scientists);
// Fetch priests
if (this.Ikariam.Is_Version('0.3.2') == true)
{
var priests = 0;
priests = Number(this.DOM.Get_First_Node_TextContent("//div[contains(@class, 'priests')]//span[@class='count']", "0"));
if ((priests > 0) || (city.buildings["temple"] != undefined))
{
if (city.buildings["temple"] == undefined) city.buildings["temple"] = {};
city.buildings["temple"].priests = priests;
}
this.Log.Add('priests (from TownHall)='+priests);
}
var citizensProd = 0;
citizensProd = this.Str.To_Integer(this.DOM.Get_First_Node_TextContent("//div[@class='citizens']/span[@class='production']", "0"),0);
city.buildings["townHall"].citizensProd = citizensProd;
this.Log.Add('citizensProd (from TownHall)='+citizensProd);
if (this.Ikariam.Is_Version('0.3.5') == true)
{
}
else
{
var incomegold = 0;
incomegold = Number(this.DOM.Get_First_Node_TextContent("//li[contains(@class, 'incomegold')]/span[@class='value']", "0"));
city.buildings["townHall"].incomegold = incomegold;
this.Log.Add('IncomeGold (from TownHall)='+incomegold);
var upkeep = citizensProd - incomegold;
city.buildings["townHall"].upkeep = upkeep;
this.Log.Add('Upkeep (from TownHall)='+upkeep);
}
};
EmpireBoard.ViewIsDiplomacyAdvisorTreaty = function()
{
};
EmpireBoard.ViewIsResearchAdvisor = function()
{
var _self = this;
function reportResearch()
{
setViewRqTime('researchOverview');
_self.DB.Save();
}
var rButtons = this.DOM.Get_Nodes("//ul[@class='researchTypes']//div[@class='researchButton']//a[contains(@class, 'build')]");
this.Log.Add("Research buttons: "+rButtons.snapshotLength);
if (rButtons.snapshotLength > 0)
{
for (var i=0; i < rButtons.snapshotLength; i++)
{
var rButton = rButtons.snapshotItem(i);
//rButton.href='';
rButton.addEventListener("click", reportResearch, false);
}
}
};
// Thank to matteo466
EmpireBoard.ViewIsResearchOverview = function()
{
this.Log.Add('Fetch discovered research...');
config["research"] = {};
var LIs = this.DOM.Get_Nodes("//div[@id='mainview']//div[contains(@class, 'content')]//li[@class='explored']");
this.Log.Add("Research explored: "+LIs.snapshotLength);
if (LIs.snapshotLength > 0)
{
for (var i=0; i < LIs.snapshotLength; i++)
{
var researchLI = LIs.snapshotItem(i);
var researchA = researchLI.getElementsByTagName("a")[0];
var resReg = /[\?&]{1}researchId=([0-9]+)&?/i.exec(researchA.href);
if (resReg != null)
{
var researchID = parseInt(resReg[1]);
var researchLevel = this.Str.To_Integer(researchA.textContent.replace(/\-/g, ""),1);
this.Log.Add("Found research: "+researchID+', level '+researchLevel);
config["research"][researchID] = {};
config["research"][researchID].Explored = true;
config["research"][researchID].Level = researchLevel;
}
}
}
function isExplored(researchID)
{
if ((config["research"][researchID] != undefined) && (config["research"][researchID].Explored == true))
return true;
else
return false;
}
var FleetUpkeepBonus = 0;
if (isExplored(1020)) FleetUpkeepBonus += 2;
if (isExplored(1050)) FleetUpkeepBonus += 4;
if (isExplored(1090)) FleetUpkeepBonus += 8;
if (isExplored(1999))
{
FleetUpkeepBonus += 2*config["research"][1999].Level;
}
this.Log.Add("FleetUpkeepBonus: "+FleetUpkeepBonus);
config["research"].FleetUpkeepBonus = FleetUpkeepBonus;
var ArmyUpkeepBonus = 0;
if (isExplored(4020)) ArmyUpkeepBonus += 2;
if (isExplored(4050)) ArmyUpkeepBonus += 4;
if (isExplored(4090)) ArmyUpkeepBonus += 8;
if (isExplored(4999))
{
ArmyUpkeepBonus += 2*config["research"][4999].Level;
}
this.Log.Add("ArmyUpkeepBonus: "+ArmyUpkeepBonus);
config["research"].ArmyUpkeepBonus = ArmyUpkeepBonus;
var ResearchCost = 6;
if (isExplored(3110)) ResearchCost -= 3;
this.Log.Add("ResearchCost: "+ResearchCost);
config["research"].ResearchCost = ResearchCost;
var ResearchBonus = 0;
if (isExplored(3020)) ResearchBonus += 2;
if (isExplored(3050)) ResearchBonus += 4;
if (isExplored(3090)) ResearchBonus += 8;
if (isExplored(3999))
{
ResearchBonus += 2*config["research"][3999].Level;
}
this.Log.Add("ResearchBonus: "+ResearchBonus);
config["research"].ResearchBonus = ResearchBonus;
config["research"].uptime = this.StartTime;
};
EmpireBoard.ViewIsPremium = function()
{
if (config["premium"] == undefined) config["premium"] = {};
var TRs = this.DOM.Get_Nodes("//div[@id='premiumOffers']//table[contains(@class, 'TableHoriMax')]//tr");
this.Log.Add("premiumOffers rows: "+TRs.snapshotLength);
// array of TR index per features
var premiumOffers = {};
if (this.Ikariam.Is_Version('0.4.4'))
{
premiumOffers['account'] = 2;
premiumOffers['woodbonus'] = 7;
premiumOffers['marblebonus'] = 10;
premiumOffers['sulfurbonus'] = 13;
premiumOffers['crystalbonus'] = 16;
premiumOffers['winebonus'] = 19;
premiumOffers['savecapacityBonus'] = 22;
premiumOffers['storagecapacityBonus'] = 25;
}
else if (this.Ikariam.Is_Version('0.4.2'))
{
premiumOffers['account'] = 2;
premiumOffers['savecapacityBonus'] = 20;
premiumOffers['storagecapacityBonus'] = 23;
}
var featureId;
for (featureId in premiumOffers)
{
var TrNo = premiumOffers[featureId];
var TDstatus = TRs.snapshotItem(TrNo).getElementsByTagName("td")[0];
if (this.DOM.Has_ClassName(TDstatus,'active') == true)
{
var remainingTime = 60*60*1000; // set minimal remaining time if fail to fetch time counter
var remainingText = TDstatus.textContent;
var regExp = new RegExp("([0-9])\\s+([a-z])", "ig");
var RegExpRes = regExp.exec(remainingText);
if (RegExpRes != null)
{
var timeValue = parseInt(RegExpRes[1]);
var timeUnit = RegExpRes[2];
if (timeUnit == this.Ikariam.LocalizationStrings('day','timeunits','short'))
{
remainingTime = timeValue*24*60*60*1000;
}
else if (timeUnit == this.Ikariam.LocalizationStrings('hour','timeunits','short'))
{
remainingTime = timeValue*60*60*1000;
}
else if (timeUnit == this.Ikariam.LocalizationStrings('minute','timeunits','short'))
{
remainingTime = timeValue*60*1000;
}
else if (timeUnit == this.Ikariam.LocalizationStrings('second','timeunits','short'))
{
remainingTime = timeValue*1000;
}
else
{
remainingTime = 24*60*60*1000;
}
}
else
{
remainingTime = 24*60*60*1000;
}
config["premium"][featureId] = this.StartTime + remainingTime;
setViewRqTime('premium',0,this.StartTime + remainingTime);
this.Log.Add("premium["+featureId+"]: remainingTime="+remainingTime+", timeValue="+timeValue+", timeUnit="+timeUnit);
}
}
config["premium"].uptime = this.StartTime;
};
EmpireBoard.ViewIsActionTransport = function()
{
// Todo
};
EmpireBoard.ViewIsActionDeployment = function()
{
var self = this;
var dSubmit = this.DOM.Get_First_Node("//form[@id='deploymentForm']//input[@type='submit']");
dSubmit.addEventListener("click", function(e) { self.Handlers.Deployment_Submit_Event(e); }, false);
};
EmpireBoard.ViewIsActionPlunder = function()
{
// Todo
};
EmpireBoard.ViewIsActionBlockade = function()
{
// Todo
};
EmpireBoard.ViewIsActionOccupy = function()
{
// Todo
};
EmpireBoard.ViewIsActionDefendCity = function()
{
// Todo
};
EmpireBoard.ViewIsActionDefendPort = function()
{
// Todo
};
EmpireBoard.ViewIsMerchantNavy = function()
{
var _self = this;
var MerchantTimes = {};
this.Ikariam.Fetch_MerchantNavy_Boxes(this.DB.MerchantBoxes, true);
this.Ikariam.Fetch_TimeCounters(MerchantTimes,'getCountdown');
config["transports"] = {};
function addTransport(cityID, transportID, endTime)
{
if (config["transports"][cityID] == undefined) config["transports"][cityID] = {};
if (config["transports"][cityID][transportID] == undefined) config["transports"][cityID][transportID] = {};
config["transports"][cityID][transportID].endTime = endTime;
_self.Log.Add('Transport['+transportID+'] from oCityId='+cityID+' while '+_self.Str.FormatRemainingTime(endTime-_self.StartTime));
}
var boxId;
for (boxId in this.DB.MerchantBoxes)
{
if (this.DB.MerchantBoxes[boxId].missions != undefined)
{
var missionId;
for (missionId in this.DB.MerchantBoxes[boxId].missions)
{
var oCityId = this.DB.MerchantBoxes[boxId].missions[missionId].oCityId;
if (oCityId > 0)
{
var endTime = 0;
var ETA = this.DB.MerchantBoxes[boxId].missions[missionId].ETA;
var ETAtime = 0;
if ((ETA != '') && (MerchantTimes[ETA] != undefined))
{
ETAtime = this.StartTime + (MerchantTimes[ETA].enddate - MerchantTimes[ETA].currentdate);
}
if (ETAtime > 0) endTime = ETAtime;
var RETtime = 0;
var RET = this.DB.MerchantBoxes[boxId].missions[missionId].RET;
if ((RET != '') && (MerchantTimes[RET] != undefined))
{
RETtime = this.StartTime + (MerchantTimes[RET].enddate - MerchantTimes[RET].currentdate);
}
if ((RETtime > 0) && (RETtime > endTime)) endTime = RETtime;
if (endTime <= 0)
endTime = this.StartTime + (1 * 20 * 60 * 1000);
addTransport(oCityId, missionId, endTime);
}
}
}
}
};
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] = {};
config["movements"][cityID][movementID] = FleetMovement;
config["movements"][cityID][movementID].endTime = FleetMovement.time;
}
config["attacks"] = {};
function addAttacks(cityID, movementID, FleetMovement)
{
if (config["attacks"][cityID] == undefined) config["attacks"][cityID] = {};
if (config["attacks"][cityID][movementID] == undefined) config["attacks"][cityID][movementID] = {};
config["attacks"][cityID][movementID] = FleetMovement;
config["attacks"][cityID][movementID].endTime = FleetMovement.time;
}
config["foreignTransports"] = {};
function addForeignTransport(cityID, movementID, FleetMovement)
{
if (config["foreignTransports"][cityID] == undefined)
config["foreignTransports"][cityID] = {};
if (config["foreignTransports"][cityID][movementID] == undefined)
config["foreignTransports"][cityID][movementID] = {};
config["foreignTransports"][cityID][movementID] = FleetMovement;
config["foreignTransports"][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 tds = tr.childNodes;
var fleetId = tds[1].id;
if ((fleetId != '') && (this.DB.FleetMovements[fleetId] != undefined))
{
var FleetMovement = this.DB.FleetMovements[fleetId];
var toOwn = false;
if ((this.DB.CurrentCities[FleetMovement.tCityId] != undefined) && (FleetMovement.tCityId != FleetMovement.oCityId) && (this.DB.CurrentCities[FleetMovement.tCityId].own == true))
{
toOwn = true;
}
// Values: deployarmy, deployfleet, plunder, blockade, defend, defend_port, trade, transport, occupy
if (FleetMovement.hostile == true)
{
addAttacks(FleetMovement.tCityId, fleetId, FleetMovement);
}
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 if (FleetMovement.mission == 'blockade')
{
addMovement(FleetMovement.oCityId, fleetId, FleetMovement);
}
else
{
addMovement(FleetMovement.oCityId, fleetId, FleetMovement);
}
}
else
{
if (FleetMovement.mission == 'trade')
{
if ((toOwn == true) && (FleetMovement.toRight == true))
{
this.Log.Add("Foreign trade "+fleetId+" arrive to city["+FleetMovement.tCityId+"] "+this.Str.FormatRemainingTime(FleetMovement.time - EmpireBoard.StartTime));
setViewRqTime('branchOffice', FleetMovement.tCityId, FleetMovement.time);
addForeignTransport(FleetMovement.tCityId, fleetId, FleetMovement);
}
}
else if (FleetMovement.mission == 'transport')
{
if ((toOwn == true) && (FleetMovement.toRight == true))
{
this.Log.Add("Foreign transport "+fleetId+" arrive to city["+FleetMovement.tCityId+"] "+this.Str.FormatRemainingTime(FleetMovement.time - EmpireBoard.StartTime));
setViewRqTime('', FleetMovement.tCityId, FleetMovement.time);
addForeignTransport(FleetMovement.tCityId, fleetId, FleetMovement);
}
}
}
}
}
}
config.mAMMtime = this.StartTime;
};
EmpireBoard.ViewIsBuildingWorkshop = function()
{
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.DB =
{
_Parent: null,
Prefix: '',
CurrentCities: {},
FleetMovements: {},
MerchantBoxes: {},
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);
};
function getVar(varname, vardefault)
{
var IkariamHost = EmpireBoard.Ikariam.Host();
IkariamHost = 's'+IkariamHost.substring(1);
var res = GM_getValue(IkariamHost+varname);
if (res == undefined)
{
return vardefault;
}
return res;
}
function setVar(varname, varvalue)
{
var IkariamHost = EmpireBoard.Ikariam.Host();
IkariamHost = 's'+IkariamHost.substring(1);
GM_setValue(IkariamHost+varname, varvalue);
}
EmpireBoard.DB.Load = function()
{
config = this.UnSerialize(getVar("config", ""));
if (config == null || config == undefined || config == "" || ("".config == "NaN"))
{
config = new Object();
}
// Set dbversion for migrate agent
if (config["dbversion"] == undefined) config["dbversion"] = this._Parent.Version-1;
// Check if main arrays exists
if (config["unitnames"] == undefined) config["unitnames"] = {};
if (config["upkeeps"] == undefined) config["upkeeps"] = {};
if (config["arrivinggoods"] == undefined) config["arrivinggoods"] = {};
if (config["movements"] == undefined) config["movements"] = {};
if (config["attacks"] == undefined) config["attacks"] = {};
if (config["transports"] == undefined) config["transports"] = {};
if (config["foreignTransports"] == undefined) config["foreignTransports"] = {};
if (config["research"] == undefined) config["research"] = {};
if (config["premium"] == undefined) config["premium"] = {};
if (config["dbversion"] < this._Parent.Version)
{
this.MigrateAgent();
}
};
EmpireBoard.DB.MigrateAgent = function()
{
this._Parent.Log.Add('Apply Migrate Agent to DB v. '+config["dbversion"]);
config["dbversion"] = this._Parent.Version;
};
EmpireBoard.DB.GarbageCollector = function()
{
var ConfigIds = '';
var ConfigId;
for (ConfigId in config)
{
var toDelete = false;
switch(ConfigId)
{
case 'unitnames':
case 'upkeeps':
case 'movements':
case 'attacks':
case 'transports':
case 'foreignTransports':
case 'research':
case 'premium':
case 'gold':
case 'merchantNavyrqtime':
case 'merchantNavytime':
case 'financestime':
case 'financesrqtime':
case 'mAMMtime':
case 'mAMMrqtime':
case 'government':
case 'totalCulturalGoods':
case 'dbversion':
toDelete = false;
break;
case 'arrivinggoods':
var oCityId;
for (oCityId in config['arrivinggoods'])
{
if (this.CurrentCities[oCityId] == undefined)
{
if (delete config['arrivinggoods'][oCityId])
this._Parent.Log.Add('Garbage collector has removed arrivinggoods of unkown city['+oCityId+']');
}
}
toDelete = false;
break;
case 'cfg':
toDelete = true;
break;
default:
// Check if old city
var CityId = this._Parent.Str.To_Integer(ConfigId,'NaN');
if (CityId != 'NaN')
{
if (this.CurrentCities[CityId] == undefined)
{
toDelete = true;
}
else
{
toDelete = false;
var ConfigSubIds = '';
var ConfigSubId;
var unknownConfigSubIds = '';
for (ConfigSubId in config[ConfigId])
{
var subToDelete = false;
switch(ConfigSubId)
{
case 'city_name':
case 'city_coord':
case 'island_id':
case 'actions':
case 'citytime':
case 'rqtime':
case 'wood':
case 'wine':
case 'marble':
case 'glass':
case 'sulfur':
case 'prodwood':
case 'prodwine':
case 'prodmarble':
case 'prodglass':
case 'prodsulfur':
case 'prodgood':
case 'prodtime':
case 'tradewood':
case 'tradewine':
case 'trademarble':
case 'tradeglass':
case 'tradesulfur':
case 'wineUsageId':
case 'wineUsage':
case 'buildings':
case 'underConstructionName':
case 'underConstructionPosition':
case 'underConstructionTime':
case 'units':
case 'cityMilitaryarmytime':
case 'cityMilitaryarmyrqtime':
case 'cityMilitaryfleettime':
case 'cityMilitaryfleetrqtime':
subToDelete = false;
break;
// deprecated attributes
case 'crystal':
case 'underConstruction':
case 'population':
case 'citizens':
subToDelete = true;
break;
default:
unknownConfigSubIds += ' '+ConfigSubId;
break;
}
if (subToDelete == true)
{
if (delete config[ConfigId][ConfigSubId])
ConfigSubIds += ' '+ConfigSubId;
}
}
if (ConfigSubIds != '') this._Parent.Log.Add('Garbage collector has removed city['+ConfigId+'] properties:'+ConfigSubIds);
if (unknownConfigSubIds != '') this._Parent.Log.Add('Garbage collector has detected unknown city['+ConfigId+'] objects:'+unknownConfigSubIds);
}
}
else
{
this._Parent.Log.Add('Garbage collector has detected unknown object: '+ConfigId);
}
break;
}
if (toDelete == true)
{
if (delete config[ConfigId])
ConfigIds += ' '+ConfigId;
}
}
if (ConfigIds != '') this._Parent.Log.Add('Garbage collector has removed array:'+ConfigIds);
};
EmpireBoard.DB.Save = function()
{
setVar("config", this.Serialize(config));
};
EmpireBoard.DB.Load_Options = function()
{
this.Options = this.UnSerialize(GM_getValue(this.Prefix+'.Opt', false)) || {};
if (this.Options.Prefs == undefined) this.Options.Prefs = {};
if (this.Options.Prefs.TABLE_RESOURCES == undefined) this.Options.Prefs.TABLE_RESOURCES = true;
if (this.Options.Prefs.TABLE_BUILDINGS == undefined) this.Options.Prefs.TABLE_BUILDINGS = true;
if (this.Options.Prefs.TABLE_ARMYFLEET == undefined) this.Options.Prefs.TABLE_ARMYFLEET = true;
if (this.Options.Prefs.PROGRESS_BAR_MODE == undefined) this.Options.Prefs.PROGRESS_BAR_MODE = 'time';
if (this.Options.Prefs.LANGUAGE == undefined) this.Options.Prefs.LANGUAGE = '';
};
EmpireBoard.DB.Save_Options = function()
{
GM_setValue(this.Prefix+'.Opt', this.Serialize(this.Options));
};
EmpireBoard.Renders =
{
_Parent: null
};
EmpireBoard.Renders.Init = function(parent)
{
this._Parent = parent;
};
function createLink(text, href, attrs)
{
return "<a href=\""+href+"\" "+attrs+">"+text+"</a>";
}
EmpireBoard.Renders.Buildings_Table_Content = function()
{
var s = '';
var Cities = this._Parent.DB.CurrentCities;
// Array use to group buildings
var orderedBuildings = this._Parent.Ikariam.BuildingsList();
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;
}
// Search buildings used
var CityId;
var buildingsCount = [];
for (CityId in Cities)
{
if (Cities[CityId].own != true) continue;
for (key in orderedBuildings)
{
var count = getBuildingCount(CityId, key, 0);
if (buildingsCount[key] == undefined || buildingsCount[key] < count)
{
buildingsCount[key] = count;
}
}
}
s += "<table class='Overview Buildings'>";
// Table header
s += "<thead><tr><th class='nolf city_name' nowrap>"+this._Parent.Intl.TT("cityName")+"</th>";
s += "<th class='actions' nowrap>"+this.Buildings_HeaderIcons(current_city_id)+"</th>";
var firstStyle = '';
var buildsNum = 0;
var lastTopic = '';
for (key in orderedBuildings)
{
if (buildingsCount[key] > 0)
{
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 build_name"+buildingsCount[key]+" "+key+"' nowrap>"+
this._Parent.Intl.TT(key,'buildings_short')+
"</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>";
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.png" /></a>';
if (reportViewToSurvey('city', city_id) == '!')
{
rHTML += '<sup class=Red title="Require attention">!</sup>';
}
else
{
rHTML += ' ';
}
return rHTML;
}
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;
}
var CityId;
var i = 0;
var odd = '';
for (CityId in Cities)
{
if (Cities[CityId].own != true) continue;
var city = getCity(CityId);
var trclass = (parseInt(current_city_id) == parseInt(CityId)) ? "current" : "";
s += "<tr class='"+odd+" "+trclass+"' cityid='"+CityId+"' islandid='"+city.island_id+"' coord='"+city.city_coord+"'>";
var usedspaces = getCityBuildingsCount(CityId, 0);
s += "<td class='nolf city_name' nowrap>"+createLinkToChangeCity(Cities[CityId].name, CityId, i, (usedspaces > 0) ? this._Parent.Ikariam.Get_MaxBuildings()-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 (city.buildings[key] != undefined)
{
if (city.buildings[key].levels == undefined)
{
// soon deprecated
city.buildings[key].levels = {};
var position = getBuildingPosition(parseInt(CityId), key, -1);
var level = getBuildingLevel(parseInt(CityId), key, 0, position);
city.buildings[key].levels[position] = level;
}
var position;
for (position in city.buildings[key].levels)
{
var currentBuildingStyle = "";
if ((key == this._Parent.Ikariam.View()) && (parseInt(CityId) == city_idmainView) && (position == city_positionmainView))
{
currentBuildingStyle = " Bold current";
}
var level = getBuildingLevel(parseInt(CityId), key, '-', position);
if (level == undefined || level == "" || level == 0)
{
level = "-";
}
var link = getBuildingLink(parseInt(CityId), key, '-', position);
if ((city.underConstructionName == key) && (city.underConstructionPosition == position))
{
if (level == "-") { level = 0; }
var underConstructionTime = city.underConstructionTime;
// deprecated
//if (underConstructionTime == undefined) underConstructionTime = city.underConstruction.split(",")[1];
var sdate = smartDateFormat(underConstructionTime);
if (underConstructionTime <= this._Parent.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 = this._Parent.Tooltip.CreateAs_HTMLelement(levellink, '<nobr>'+sdate+'</nobr>', this._Parent.Intl.TT("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 = this._Parent.Tooltip.CreateAs_HTMLelement(levellink, '<nobr>'+sdate +' ('+ counter+')</nobr>', this._Parent.Intl.TT("currentlyBuilding")+':');
}
s += "<td level='"+level+"' view='"+key+"' position='"+position+"' class='"+firstStyle+" "+key+" "+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 level='"+level+"' view='"+key+"' position='"+position+"' class='"+firstStyle+" "+key+" "+currentBuildingStyle+"'>"+levellink+"</td>";
}
buildingCount++;
firstStyle = 'lfdash';
}
}
else
{
s += "<td level='0' view='"+key+"' class='"+firstStyle+" "+key+"'>- </td>";
buildingCount++;
firstStyle = '';
}
if (buildingCount < buildingsCount[key])
{
for (var j = buildingCount; j < buildingsCount[key]; j++)
{
s += "<td level='0' view='"+key+"' class='"+firstStyle+" "+key+"'>- </td>";
firstStyle = 'lfdash';
}
}
lastTopic = orderedBuildings[key];
}
}
if (buildsNum <= 1) s += "<td class='lf'></td><td></td><td></td><td></td><td></td><td></td>";
s += "</tr>";
if (odd == '') { odd = 'odd'; } else { odd = ''; }
i++;
}
s += "</tbody>";
s += "<tfoot></tfoot>";
s += "</table>";
return s;
};
EmpireBoard.Renders.BuildingName_Tooltip_Content = function(building_id)
{
return '<nobr>'+this._Parent.Intl.TT(building_id,'buildings')+'</nobr>';
};
EmpireBoard.Renders.Resources_Table_Content = function()
{
var _self = this;
var s = "";
var Cities = this._Parent.DB.CurrentCities;
s += "<table class='Overview Resources'>";
s += "<thead><tr>";
s += "<th class='nolf city_name' nowrap>"+this._Parent.Intl.TT("cityName")+"</th>"+
"<th class='actions' nowrap>"+this.Resources_HeaderIcons(current_city_id)+"</th>"+
"<th colspan=3 class='lf population' nowrap>"+this._Parent.Intl.TT("Population")+"</th>"+
"<th colspan=1 class='growth' nowrap>"+this._Parent.Intl.TT("Growth")+"</th>"+
"<th colspan=1 class='lf research' nowrap>"+this._Parent.Intl.TT("Research")+"</th>"+
"<th colspan=1 class='lf incomes' nowrap>"+this._Parent.Intl.TT("Incomes")+"</th>"+
"<th colspan=2 class='lf wood'>"+this._Parent.Intl.TT("Wood")+"</th>"+
"<th colspan=3 class='lf wine'>"+this._Parent.Intl.TT("Wine")+"</th>"+
"<th colspan=2 class='lf marble'>"+this._Parent.Intl.TT("Marble")+"</th>"+
"<th colspan=2 class='lf crystal'>"+this._Parent.Intl.TT("Crystal")+"</th>"+
"<th colspan=2 class='lf sulfur'>"+this._Parent.Intl.TT("Sulfur")+"</th>";
s += "</tr></thead>";
var sumres = new Resource("");
sumres.population = 0;
sumres.citizens = 0;
sumres.spacetotal = 0;
sumres.growth = 0;
sumres.Income = 0;
sumres.reservedGold = '';
sumres.Research = 0;
sumres.ResearchBonus = '';
var sumProd = new Resource("");
sumProd.wineUsage = 0;
var sumArTr = new Resource("");
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 = _self._Parent.Str.FormatBigNumber(Math.round(24 * prodPerHour), true)+" / "+_self._Parent.Ikariam.LocalizationStrings('day','timeunits','short');
if ((extraTooltip != undefined) && (extraTooltip != ''))
{
tooltip += "<br> "+extraTooltip;
}
return _self._Parent.Tooltip.CreateAs_HTMLelement('<span class="'+classname+'">'+_self._Parent.Str.FormatBigNumber(Math.round(prodPerHour), true)+'</span>', tooltip);
}
}
function createLinkToAgora(city_id)
{
var rHTML = '';
if (_self._Parent.Ikariam.Is_Version('0.3.2') == true)
{
var res = getCity(city_id);
if (res.island_id != undefined)
{
rHTML += '<a href="?view=islandBoard&id='+res.island_id+'" title="View island agora"><img hspace="3" height="12" src="skin/board/schriftrolle_offen2.png" align="absmiddle" /></a>';
}
}
return rHTML;
}
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='+_self._Parent.Str.To_Integer(cCoord[0],'')+'&islandY='+_self._Parent.Str.To_Integer(cCoord[1],'')+'" title="' + res.city_coord + ' View world map"><img align="absmiddle" src="skin/layout/icon-world.png" /></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.png" /></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.png" /></a>';
}
return rHTML;
}
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 createLinkToResources(city_id)
{
var res = getCity(city_id);
var rHTML = '';
if (res.island_id != undefined)
{
rHTML += '<a class="changeCity" cityid="'+city_id+'" href="?view=resource&type=resource&id=' + res.island_id + '" title="View island saw mill"><img height="12" align="absmiddle" src="skin/resources/icon_wood.gif" /></a>';
rHTML += ' ';
if (res.prodgood == 'wine')
{
rHTML += '<a class="changeCity" cityid="'+city_id+'" href="?view=tradegood&type=tradegood&id=' + res.island_id + '" title="View island vineyard"><img height="12" align="absmiddle" src="skin/resources/icon_wine.gif" /></a>';
}
else if (res.prodgood == 'marble')
{
rHTML += '<a class="changeCity" cityid="'+city_id+'" href="?view=tradegood&type=tradegood&id=' + res.island_id + '" title="View island quarry"><img height="12" align="absmiddle" src="skin/resources/icon_marble.gif" /></a>';
}
else if (res.prodgood == 'glass')
{
rHTML += '<a class="changeCity" cityid="'+city_id+'" href="?view=tradegood&type=tradegood&id=' + res.island_id + '" title="View island crystal mine"><img height="12" align="absmiddle" src="skin/resources/icon_glass.gif" /></a>';
}
else if (res.prodgood == 'sulfur')
{
rHTML += '<a class="changeCity" cityid="'+city_id+'" href="?view=tradegood&type=tradegood&id=' + res.island_id + '" title="View island sulphur pit"><img height="12" align="absmiddle" src="skin/resources/icon_sulfur.gif" /></a>';
}
rHTML += ' ';
}
return rHTML;
}
function createLinkToTransportGoods(city_id)
{
var rHTML = '';
if (current_city_id == city_id)
{
rHTML += '<img class="Action" src="skin/actions/transport_disabled.png" align="absmiddle" />';
}
else
{
rHTML += '<a view=transport href="?view=transport&destinationCityId='+city_id+'" title="Transports goods"><img class="Action" src="skin/actions/transport.png" align="absmiddle" /></a>';
}
return rHTML;
}
function createProd(prodPerHour, extraTooltip)
{
if (prodPerHour == "-" || prodPerHour == "?")
{
return prodPerHour;
}
else if (""+prodPerHour == "NaN" || ""+prodPerHour == "" || ""+prodPerHour == "0" || prodPerHour == undefined || ""+prodPerHour == "???")
{
return "";
}
else
{
var tooltip = _self._Parent.Str.FormatBigNumber(Math.round(24 * prodPerHour), true)+" / "+_self._Parent.Ikariam.LocalizationStrings('day','timeunits','short');
if (extraTooltip != undefined)
{
tooltip += ", "+extraTooltip;
}
return _self._Parent.Tooltip.CreateAs_HTMLelement(_self._Parent.Str.FormatBigNumber(Math.round(prodPerHour), true), tooltip);
}
}
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(_self._Parent.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+"'>"+_self._Parent.Str.FormatBigNumber(currAmount)+"</font>";
}
if (showTooltip == true)
{
tooltip = _self._Parent.Str.FormatBigNumber(intfactPerHour, true)+" / "+_self._Parent.Ikariam.LocalizationStrings('hour','timeunits','short')+"<br> "+_self._Parent.Str.FormatBigNumber(dailyFact, true)+" / "+_self._Parent.Ikariam.LocalizationStrings('day','timeunits','short');
if (intfactPerHour < 0)
tooltip += "<br> " + _self._Parent.Str.FormatRemainingTime(-1 * (currAmount+arrAmount) / intfactPerHour * 60 * 60 * 1000) + " to empty";
}
}
else
{
res = _self._Parent.Str.FormatBigNumber(currAmount);
}
// Safety goods ?
if ((secureAmount > 0) && (secureAmount >= (currAmount+tradeAmount)))
{
res = '<img src="skin/layout/icon-wall.png" class="Safe" title="Safety resources"/> '+res;
}
if (tooltip != '') res = _self._Parent.Tooltip.CreateAs_HTMLelement(res, tooltip);
return res + " ";
}
function createResearch(prodPerHour, extraTooltip)
{
if (prodPerHour == "-" || prodPerHour == "?")
{
return prodPerHour;
}
else if (""+prodPerHour == "0")
{
return '+0';
}
else if (""+prodPerHour == "NaN" || ""+prodPerHour == "" || prodPerHour == undefined || ""+prodPerHour == "???")
{
return "";
}
else
{
var tooltip = _self._Parent.Str.FormatBigNumber(Math.round(24 * prodPerHour), true)+" / "+_self._Parent.Ikariam.LocalizationStrings('day','timeunits','short');
if (extraTooltip != undefined)
{
tooltip += ", "+extraTooltip;
}
return _self._Parent.Tooltip.CreateAs_HTMLelement(_self._Parent.Str.FormatBigNumber(Math.round(prodPerHour), true), 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 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 MoreGoods Green'>"+_self._Parent.Str.FormatBigNumber(sum, true);
if (getDeliveredGoodsTransports(city_id, resName) > 0)
{
s += "<sup>*</sup>";
}
else s += " ";
s += "</font>";
}
else if (sum > 0)
{
s = "<font class='More MoreGoods'>"+_self._Parent.Str.FormatBigNumber(sum, true)+" </font>";
}
return s;
}
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">'+_self._Parent.Str.FormatBigNumber(sum)+'</font>';
}
return output;
}
function createSimpleProd(prodPerHour)
{
if (""+prodPerHour == "NaN" || ""+prodPerHour == "" || ""+prodPerHour == "0" || prodPerHour == undefined || ""+prodPerHour == "???")
{
return "";
}
return _self._Parent.Str.FormatBigNumber(Math.round(prodPerHour), true);
}
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 >= _self._Parent.StartTime) numTransports++;
}
if (numTransports > 0) res = "<font class='More Transports'>"+numTransports+" transport(s) on way</font>";
}
return res;
}
function createForeignTransports(cityID)
{
var res = "<font class='More'></font>";
var numMovements = 0;
if (config["foreignTransports"] == undefined)
{
}
else if (config["foreignTransports"][cityID] != undefined)
{
for (key in config["foreignTransports"][cityID])
{
if (config["foreignTransports"][cityID][key].endTime >= _self._Parent.StartTime)
numMovements++;
}
if (numMovements > 0)
res = "<font class='More ForeignTransports'>"+numMovements+" foreign transport(s)</font>";
}
return res;
}
function createResProgressBar(startTime, startAmount, factPerHour, maxCapacity, secureCapacity)
{
var res = '';
if ((_self._Parent.DB.Options.Prefs.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
remhour = 0;
}
else if (factPerHour > 0)
{
remhour = (maxCapacity - curres) / factPerHour;
remaining = "<br>"+_self._Parent.Str.FormatRemainingTime(remhour*60*60*1000)+" to full";
}
else if (factPerHour < 0)
{
remaining = "<br>"+_self._Parent.Str.FormatRemainingTime((curres / -factPerHour)*60*60*1000) + " to empty";
}
var cl = "Normal";
var vperc = perc;
if ((curres > 0) && (vperc < 4)) vperc = 4;
if ((_self._Parent.DB.Options.Prefs.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' "+_self._Parent.Tooltip.CreateAs_HTMLattribute(_self._Parent.Str.FormatBigNumber(maxCapacity) + " total capacity<br>"+_self._Parent.Str.FormatBigNumber(secureCapacity)+" safety capacity<br>" + perc+"% full" + remaining)+">"+
"<tr>"+
"<td width='"+vperc+"%' class='"+cl+"'></td>"+
"<td width='"+(100-vperc)+"%'></td>"+
"</tr>"+
"</table>";
}
else if (_self._Parent.DB.Options.Prefs.PROGRESS_BAR_MODE != "off")
{
res += "<table class='myPercent'>"+
"<tr>"+
"<td></td>"+
"</tr>"+
"</table>";
}
return res;
}
s += "<tbody>";
var CityId;
var i = 0;
var odd = '';
for (CityId in Cities)
{
if (Cities[CityId].own != true) continue;
var city = getCity(CityId);
if (getBuildingLevel(CityId, "branchOffice", "-") != '-')
{
if (city.tradewood == undefined) city.tradewood = 0;
if (city.tradewine == undefined) city.tradewine = 0;
if (city.trademarble == undefined) city.trademarble = 0;
if (city.tradeglass == undefined) city.tradeglass = 0;
if (city.tradesulfur == undefined) city.tradesulfur = 0;
}
else
{
city.tradewood = 0;
city.tradewine = 0;
city.trademarble = 0;
city.tradeglass = 0;
city.tradesulfur = 0;
}
var wineUsage = 0;
var cellarLevel = getBuildingLevel(CityId, "vineyard", "-");
var tavernLevel = getBuildingLevel(CityId, "tavern", "-");
if (tavernLevel == '-')
{
// Fix if tavern has been demolished without disable wine usage
}
else if (city.wineUsageId != undefined)
{
wineUsage = tavernWineUsage[city.wineUsageId];
if (cellarLevel != '-')
{
wineSave = wineUsage * cellarLevel;
wineSave = Math.round(wineSave / 100);
wineUsage = wineUsage - wineSave;
}
}
else if (city.wineUsage != undefined)
{
wineUsage = city.wineUsage;
}
// Wine usage tooltip
var wineUsageHtml = '-';
if (wineUsage > 0)
{
wineUsageHtml = createSimpleProd(-1 * wineUsage);
}
// Estimate current amount of each resources
var curres = new Resource("");
curres.wood = getCurrentResourceAmount(this._Parent.StartTime, city.prodtime, city.wood, city.prodwood);
curres.wine = getCurrentResourceAmount(this._Parent.StartTime, city.prodtime, city.wine, city.prodwine - wineUsage);
curres.marble = getCurrentResourceAmount(this._Parent.StartTime, city.prodtime, city.marble, city.prodmarble);
curres.glass = getCurrentResourceAmount(this._Parent.StartTime, city.prodtime, city.glass, city.prodglass);
curres.sulfur = getCurrentResourceAmount(this._Parent.StartTime, city.prodtime, city.sulfur, city.prodsulfur);
sumres.wood += curres.wood;
sumres.wine += curres.wine;
sumres.marble += curres.marble;
sumres.glass += curres.glass;
sumres.sulfur += curres.sulfur;
sumProd.wood += city.prodwood;
sumProd.wine += city.prodwine;
sumProd.wineUsage += wineUsage;
sumProd.marble += city.prodmarble;
sumProd.glass += city.prodglass;
sumProd.sulfur += city.prodsulfur;
// Resources which will arrive
var arrres = new Resource('');
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');
sumArTr.wood += city.tradewood + arrres.wood;
sumArTr.wine += city.tradewine + arrres.wine;
sumArTr.marble += city.trademarble + arrres.marble;
sumArTr.glass += city.tradeglass + arrres.glass;
sumArTr.sulfur += city.tradesulfur + arrres.sulfur;
// City income
var Income = getArrValue(city.buildings["townHall"],"incomegold","?");
if (Income != "?")
{
sumres.Income += Income;
}
// Gold in trading post
var reservedGold = '';
if (city.buildings["branchOffice"] != undefined)
{
if (city.buildings["branchOffice"].reservedGold == undefined)
{
reservedGold = '?';
}
else
{
reservedGold = city.buildings["branchOffice"].reservedGold;
if (reservedGold > 0)
{
if (sumres.reservedGold == '')
{
sumres.reservedGold = reservedGold;
}
else
{
sumres.reservedGold += reservedGold;
}
}
}
}
// Research point
var Research = '-';
if (getBuildingLevel(CityId, "academy", 0) > 0)
{
Research = getArrValue(city.buildings["academy"],"Research","?");
if (Research != '?')
{
sumres.Research += Research;
}
}
var spacetotal = '?';
var townHallLevel = getBuildingLevel(CityId, "townHall", "?", 0);
if (townHallLevel != '?')
spacetotal = townHallSpaces[townHallLevel];
var bonusspace = getArrValue(city.buildings["townHall"], "bonusspace", "?");
var workers = '?';
var population = getArrValue(city.buildings["townHall"], "population", 0);
var citizens = getArrValue(city.buildings["townHall"], "citizens", '?');
if (citizens != '?')
workers = population - citizens;
// Estimate current population and growth
var growth = 0;
var happiness = getArrValue(city.buildings["townHall"], "happiness", "?");
if ((happiness != '?') && (spacetotal != '?') && (bonusspace != '?'))
{
population = getEstimatedPopulation(population, city.prodtime, this._Parent.StartTime, happiness - 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(city.buildings["townHall"], "growth", "?");
}
sumres.population += population;
// Current citizens
if (workers != '?')
{
citizens = population - workers;
if (sumres.citizens != '?')
{
sumres.citizens += citizens;
}
}
else
{
citizens = '?';
sumres.citizens = '?';
}
// Estimate growth remaining time
var growthRemainingHours = '';
if (happiness != "?" && happiness > 0 && bonusspace != "?" && growth >= 0.20)
{
growthRemainingHours = getGrowthRemainingHours(population, parseInt(spacetotal) + parseInt(bonusspace), this._Parent.StartTime, happiness);
}
// Global growth
if ((growth != '?') && (sumres.growth != '?'))
{
if (parseInt(population) < parseInt(spacetotal) + parseInt(bonusspace))
sumres.growth += growth;
}
else
{
sumres.growth = '?';
}
// Is current city ?
var trclass = "";
if (parseInt(current_city_id) == parseInt(CityId))
{
trclass = "current";
}
var townHallStyle = "";
var growthStyle = "";
if (parseInt(population) >= parseInt(spacetotal) + parseInt(bonusspace))
{
// Townhall is full
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";
}
// Global townhall capacity
if (bonusspace != "?")
{
if (sumres.spacetotal != '?')
sumres.spacetotal += parseInt(spacetotal) + parseInt(bonusspace);
spacetotal = this._Parent.Str.FormatBigNumber(parseInt(spacetotal) + parseInt(bonusspace));
}
else
{
sumres.spacetotal = '?';
spacetotal = this._Parent.Str.FormatBigNumber(spacetotal) + " + ?";
}
// Warehouse safe capacity bonus by premium option
var savecapacityBonus = 0;
if (config["premium"] != undefined)
{
if ((config["premium"].savecapacityBonus != undefined) && (config["premium"].savecapacityBonus > this._Parent.StartTime))
{
savecapacityBonus = 100;
}
}
// Warehouse storage capacity bonus by premium option
var storagecapacityBonus = 0;
if (config["premium"] != undefined)
{
if ((config["premium"].storagecapacityBonus != undefined) && (config["premium"].storagecapacityBonus > this._Parent.StartTime))
{
storagecapacityBonus = 100;
}
}
// Warehouse max capacity
var maxcwood = 0;
var maxcother = 0;
var maxsafewood = 0;
var maxsafeother = 0;
if (this._Parent.Ikariam.Is_Version('0.3.4') == true)
{
var WarehousesLevels = [];
var WarehousesLevel = 0;
if ((city.buildings['warehouse'] != undefined) && (city.buildings['warehouse'].levels != undefined))
{
var p;
for (p in city.buildings['warehouse'].levels)
{
var WarehouseLevel = getBuildingLevel(CityId, 'warehouse', city.buildings['warehouse'].levels[p], p);
WarehousesLevel += WarehouseLevel;
WarehousesLevels.push(WarehouseLevel);
}
}
else
{
// While build first warehouse
WarehousesLevel = getBuildingLevel(CityId,'warehouse', 0, -1);
WarehousesLevels.push(WarehousesLevel);
}
var DumpLevel = getBuildingLevel(CityId,'dump', 0, -1);
maxcwood = this._Parent.Ikariam.Resource_Capacity('wood',WarehousesLevel,DumpLevel,storagecapacityBonus);
maxcother = maxcwood;
maxsafewood = this._Parent.Ikariam.Resource_SafeCapacity('wood',WarehousesLevels,savecapacityBonus);
maxsafeother = maxsafewood;
}
else
{
// Soon deprecated
var WarehousesLevel = getBuildingLevel(CityId,'warehouse', 0, -1);
maxcwood = this._Parent.Ikariam.Resource_Capacity('wood',WarehousesLevel,0,storagecapacityBonus);
maxcother = this._Parent.Ikariam.Resource_Capacity('wine',WarehousesLevel,0,storagecapacityBonus);
maxsafewood = this._Parent.Ikariam.Resource_SafeCapacity('wood',WarehousesLevel,savecapacityBonus);
maxsafeother = this._Parent.Ikariam.Resource_SafeCapacity('wine',WarehousesLevel,savecapacityBonus);
}
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 , city.actions, 'Green', 'Available action points');
}
s += "<tr class='"+odd+" "+trclass+"' cityid='"+CityId+"' islandid='"+city.island_id+"' coord='"+city.city_coord+"' tradegood='"+city.prodgood+"'>";
s += "<td class='nolf city_name' nowrap>"+cityLink+createTransports(CityId)+createForeignTransports(CityId)+"</td>"+
"<td class='actions' nowrap>"+createLinkToMap(CityId)+createLinkToAgora(CityId)+"<br />"+createLinkToResources(CityId)+createLinkToTransportGoods(CityId)+"</td>"+
"<td class='lf'>"+
"<span title='Citizens'>"+(population > 0 ? this._Parent.Str.FormatBigNumber(citizens) : '?')+"</span>"+
" ("+
"</td>"+
"<td class='nolf'>"+
"<span title='Overall inhabitants' class='inhabitant"+townHallStyle+"'>"+(population > 0 ? this._Parent.Str.FormatBigNumber(population) : '?')+"</span>)"+
" /</td>"+
"<td class='nolf' title='Housing space'>"+spacetotal+"</td>"+
"<td class='"+growthStyle+"'>"+
(growth != '?' ? '<img src="'+this._Parent.Ikariam.Get_Happiness_ImgSrc(growth)+'" align=left height=18 hspace=2 vspace=0 title="Total satisfaction: '+happiness+'">' : '')+
this._Parent.Tooltip.CreateAs_HTMLelement(this._Parent.Str.FormatFloatNumber(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(city.prodtime, city.wood, city.prodwood, false, maxcwood, city.tradewood, maxsafewood), city.island_id, CityId, i)+
getArrivingGoods(CityId, "wood", city.tradewood, curres.wood, arrres.wood)+
createResProgressBar(city.prodtime, city.wood + arrres.wood, city.prodwood, maxcwood - city.tradewood, maxsafewood)+
"</td>"+
"<td class='lfdash'>"+createProd(city.prodwood)+"</td>"+
"<td class='lf' resource='wine'>"+
createLinkToTradegoodCond((city.prodwine > 0) || (city.prodgood == 'wine'), createResCounter(city.prodtime, city.wine, city.prodwine - wineUsage, true, maxcother, city.tradewine, maxsafeother, arrres.wine), city.island_id, CityId, i)+
getArrivingGoods(CityId, "wine", city.tradewine, curres.wine, arrres.wine)+
createResProgressBar(city.prodtime, city.wine + arrres.wine, city.prodwine - wineUsage, maxcother - city.tradewine, maxsafeother)+
"</td>"+
"<td class='lfdash'>"+createSimpleProd(city.prodwine)+"</td>"+
"<td class='lfdash'>"+wineUsageHtml+"</td>"+
"<td class='lf' resource='marble'>"+
createLinkToTradegoodCond((city.prodmarble > 0) || (city.prodgood == 'marble'), createResCounter(city.prodtime, city.marble, city.prodmarble, false, maxcother, city.trademarble, maxsafeother), city.island_id, CityId, i)+
getArrivingGoods(CityId, "marble", city.trademarble, curres.marble, arrres.marble)+
createResProgressBar(city.prodtime, city.marble + arrres.marble, city.prodmarble, maxcother - city.trademarble, maxsafeother)+
"</td>"+
"<td class='lfdash'>"+createProd(city.prodmarble)+"</td>"+
"<td class='lf' resource='glass'>"+
createLinkToTradegoodCond((city.prodglass > 0) || (city.prodgood == 'glass'), createResCounter(city.prodtime, city.glass, city.prodglass, false, maxcother, city.tradeglass, maxsafeother), city.island_id, CityId, i)+
getArrivingGoods(CityId, "glass", city.tradeglass, curres.glass, arrres.glass)+
createResProgressBar(city.prodtime, city.glass + arrres.glass, city.prodglass, maxcother - city.tradeglass, maxsafeother)+
"</td>"+
"<td class='lfdash'>"+createProd(city.prodglass)+"</td>"+
"<td class='lf' resource='sulfur'>"+
createLinkToTradegoodCond((city.prodsulfur > 0) || (city.prodgood == 'sulfur'), createResCounter(city.prodtime, city.sulfur, city.prodsulfur, false, maxcother, city.tradesulfur, maxsafeother), city.island_id, CityId, i)+
getArrivingGoods(CityId, "sulfur", city.tradesulfur, curres.sulfur, arrres.sulfur)+
createResProgressBar(city.prodtime, city.sulfur + arrres.sulfur, city.prodsulfur, maxcother - city.tradesulfur, maxsafeother)+
"</td>"+
"<td class='lfdash'>"+createProd(city.prodsulfur)+"</td>";
s += "</tr>";
i++;
if (odd == '') { odd = 'odd'; } else { odd = ''; }
}
s += "</tbody>";
// Gold usage remaining time
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 = this._Parent.Str.FormatRemainingTime(RemainingHours*60*60*1000)+" to expense";
}
// Research bonus from government
if (this._Parent.Ikariam.Is_Version('0.4.4'))
{
if ((config.government == undefined) || (config.government == ''))
{
}
else if (config.government == 'demokratie')
{
if ((config.totalCulturalGoods != undefined) && (config.totalCulturalGoods != ''))
{
sumres.ResearchBonus = config.totalCulturalGoods;
}
}
}
function createMoreResearch(sum)
{
var output = '';
if (sum > 0)
{
output = '<font class="More">'+_self._Parent.Str.FormatBigNumber(sum, true)+'</font>';
}
return output;
}
function createMoreGoods(sum)
{
var output = '';
if (sum > 0)
{
output = '<font class="More">'+_self._Parent.Str.FormatBigNumber(sum, true)+' </font>';
}
return output;
}
s += "<tfoot class='Summary'><tr>";
s += "<td class='nolf sigma' nowrap colspan=2><img vspace=2 hspace=5 src='skin/layout/sigma.png'></td>"+
"<td class='lf'>"+
"<span title='Citizens'>"+this._Parent.Str.FormatBigNumber(sumres.citizens)+'</span>'+
" ("+
"</td>"+
"<td class='nolf'>"+
"<span title='Overall inhabitants'>"+this._Parent.Str.FormatBigNumber(sumres.population)+"</span>)"+
" /</td>"+
"<td class='nolf' title='Housing space'>"+this._Parent.Str.FormatBigNumber(sumres.spacetotal)+"</td>"+
"<td>"+this._Parent.Str.FormatFloatNumber(sumres.growth,2,true)+"</td>"+
"<td class='lf'>"+
createResearch(sumres.Research)+
createMoreResearch(sumres.ResearchBonus)+
"</td>"+
"<td class='lf'>"+
createIncome(sumres.Income, goldRemainingHours, goldStyle)+
createReservedGold(sumres.reservedGold)+
"</td>"+
"<td class='lf'>"+
createResCounter(this._Parent.StartTime, sumres.wood, sumProd.wood)+
createMoreGoods(sumArTr.wood)+
"</td>"+
"<td class='lfdash'>"+createProd(sumProd.wood)+"</td>"+
"<td class='lf'>"+
createResCounter(this._Parent.StartTime, sumres.wine, sumProd.wine - sumProd.wineUsage, true)+
createMoreGoods(sumArTr.wine)+
"</td>"+
"<td class='lfdash'>"+createSimpleProd(sumProd.wine)+"</td>"+
"<td class='lfdash'>"+createSimpleProd(-1 * sumProd.wineUsage)+"</td>"+
"<td class='lf'>"+
createResCounter(this._Parent.StartTime, sumres.marble, sumProd.marble)+
createMoreGoods(sumArTr.marble)+
"</td>"+
"<td class='lfdash'>"+createProd(sumProd.marble)+"</td>"+
"<td class='lf'>"+
createResCounter(this._Parent.StartTime, sumres.glass, sumProd.glass)+
createMoreGoods(sumArTr.glass)+
"</td>"+
"<td class='lfdash'>"+createProd(sumProd.glass)+"</td>"+
"<td class='lf'>"+
createResCounter(this._Parent.StartTime, sumres.sulfur, sumProd.sulfur)+
createMoreGoods(sumArTr.sulfur)+
"</td>"+
"<td class='lfdash'>"+createProd(sumProd.sulfur)+"</td>";
s += "</tr></tfoot>";
s += "</table>";
return s;
};
EmpireBoard.Renders.ArmyFleet_Table_Content = function()
{
var _self = this;
var s = "";
var Cities = this._Parent.DB.CurrentCities;
var FleetUpkeepBonus = 0;
if (config["research"].FleetUpkeepBonus != undefined)
FleetUpkeepBonus = config["research"].FleetUpkeepBonus;
var ArmyUpkeepBonus = 0;
if (config["research"].ArmyUpkeepBonus != undefined)
ArmyUpkeepBonus = config["research"].ArmyUpkeepBonus;
function applyUpkeepBonus(value, bonus)
{
if ((value == '-') || (value == '?') || (value == 0) || (bonus == 0))
{
return value;
}
else
{
return (value - (value/100*bonus));
}
}
var orderedUnits = this._Parent.Ikariam.UnitsList();
var usedIndexes = {};
var usedIndexesCount = 0;
if (config["unitnames"] != undefined)
{
var CityId;
for (CityId in Cities)
{
if (Cities[CityId].own != true) continue;
var city = getCity(CityId);
var key;
for (key in orderedUnits)
{
var ukey = 'unit '+key;
if (parseInt(getArrValue(getArrValue(city.units, ukey), "count", 0)) > 0)
{
usedIndexes[key] = 1;
usedIndexesCount++;
}
else if (parseInt(getArrValue(getArrValue(city.units, ukey), "construction", 0)) > 0)
{
usedIndexes[key] = 1;
usedIndexesCount++;
}
}
}
}
s += "<thead><tr><th class='nolf city_name' nowrap>"+this._Parent.Intl.TT("cityName")+"</th>";
s += "<th class='actions' nowrap>"+this._Parent.Renders.ArmyFleet_HeaderIcons(current_city_id)+"</th>";
if (usedIndexesCount > 0)
{
var firstStyle = "";
var lastTopic = '';
var key;
for (key in orderedUnits)
{
var ukey = 'unit '+key;
var name = this._Parent.Intl.TT(ukey,'army_units');
if (usedIndexes[key] == 1)
{
if (lastTopic != orderedUnits[key]) { firstStyle = "lf"; } else { firstStyle = ""; }
s += "<th unit='"+key+"' class='"+firstStyle+" unit_name "+key+"' nowrap>"+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 += "<th class='upkeep lf' nowrap title='"+this._Parent.Intl.TT("Upkeep")+"'>"+this._Parent.Intl.TT("Upkeep")+"</th>";
s += "</tr></thead>";
function createAttacks(cityID)
{
var res = "<font class='More Red'></font>";
var numMovements = 0;
if (config["attacks"] == undefined)
{
}
else if (config["attacks"][cityID] != undefined)
{
for (key in config["attacks"][cityID])
{
if (config["attacks"][cityID][key].endTime >= _self._Parent.StartTime)
numMovements++;
}
if (numMovements > 0)
res = "<font class='More Attacks Red'>under "+numMovements+" attack(s)</font>";
}
return res;
}
function createLinkToArmyView(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.png" /></a>';
if (reportViewToSurvey('cityMilitary-army', city_id) == '!')
{
rHTML += '<sup class=Red title="Require attention">!</sup>';
}
else
{
rHTML += ' ';
}
return rHTML;
}
function createLinkToFleetView(city_id)
{
var 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.png" /></a>';
if (reportViewToSurvey('cityMilitary-fleet', city_id) == '!')
{
rHTML += '<sup class=Red title="Require attention">!</sup>';
}
else
{
rHTML += ' ';
}
return rHTML;
}
function createLinkToDeployArmy(city_id)
{
var rHTML = '';
if (current_city_id == city_id)
{
rHTML += '<img class="Action" src="skin/actions/move_army_disabled.png" align="absmiddle" />';
}
else
{
rHTML += '<a view=deployment deploymenttype=army href="?view=deployment&deploymentType=army&destinationCityId='+city_id+'" title="Deploy troops"><img class="Action" src="skin/actions/move_army.png" align="absmiddle" /></a>';
}
return rHTML;
}
function createLinkToDeployFleet(city_id)
{
var rHTML = '';
if (current_city_id == city_id)
{
rHTML += '<img class="Action" src="skin/actions/move_fleet_disabled.png" align="absmiddle" />';
}
else
{
rHTML += '<a view=deployment deploymenttype=fleet href="?view=deployment&deploymentType=fleet&destinationCityId='+city_id+'" title="Station fleets"><img class="Action" src="skin/actions/move_fleet.png" align="absmiddle" /></a>';
}
return rHTML;
}
function createMovements(cityID)
{
var res = "<font class='More'></font>";
var numMovements = 0;
if (config["movements"] == undefined)
{
}
else if (config["movements"][cityID] != undefined)
{
var key;
for (key in config["movements"][cityID])
{
if (config["movements"][cityID][key].endTime >= _self._Parent.StartTime) numMovements++;
}
if (numMovements > 0) res = "<font class='More Movements'>"+numMovements+" movement(s) on way</font>";
}
return res;
}
var sum = [];
var sumConstruction = [];
var sumUpkeep = 0;
var sumConstructionUpkeep = 0;
s += "<tbody class='ownCities'>";
var i = 0;
var odd = '';
var CityId;
for (CityId in Cities)
{
if (Cities[CityId].own != true) continue;
var city = getCity(CityId);
var trclass = (parseInt(current_city_id) == parseInt(CityId)) ? "current" : "";
s += "<tr class='"+odd+" "+trclass+"' cityid='"+CityId+"' islandid='"+city.island_id+"' coord='"+city.city_coord+"'>";
s += "<td class='nolf city_name' nowrap>"+
createLinkToChangeCity(Cities[CityId].name, CityId, i, city.actions, 'Green', 'Available action points')+
createMovements(CityId)+
createAttacks(CityId)+
"</td>";
s += "<td class='actions' nowrap>"+createLinkToArmyView(CityId)+createLinkToDeployArmy(CityId)+"<br />"+createLinkToFleetView(CityId)+createLinkToDeployFleet(CityId)+"</td>";
var barracksLevel = getBuildingLevel(CityId, "barracks", "-");
var shipyardLevel = getBuildingLevel(CityId, "shipyard", "-");
var cityUpkeep = 0;
var cityConstructionUpkeep = 0;
if (usedIndexesCount > 0)
{
var firstStyle = "";
var lastTopic = '';
for (key in orderedUnits)
{
var ukey = 'unit '+key;
var ugender = this._Parent.Ikariam.Get_UnitGender(key);
if (usedIndexes[key] == 1)
{
if (lastTopic != orderedUnits[key]) { firstStyle = "lf"; } else { firstStyle = ""; }
var unitCount = this._Parent.Str.To_Integer(getArrValue(getArrValue(city.units, ukey), "count", 0), 0);
if (config["upkeeps"][key] == undefined)
{
cityUpkeep = '?';
}
else if (cityUpkeep != '?')
{
if (ugender == 'army')
{
cityUpkeep += applyUpkeepBonus(config["upkeeps"][key]*unitCount,ArmyUpkeepBonus);
}
else if (ugender == 'fleet')
{
cityUpkeep += applyUpkeepBonus(config["upkeeps"][key]*unitCount,FleetUpkeepBonus);
}
}
if (unitCount == 0)
{
unitCount = "-";
}
else
{
sum[key] = (sum[key] == undefined) ? unitCount : sum[key] + unitCount;
}
var unitConstructionHTML = '<font class="More">-</font>';
var unitConstruction = 0;
if ((ugender == 'army') && (barracksLevel == '-'))
{
// Fix if barracks has been demolished while units were under construction
}
else if ((ugender == 'fleet') && (shipyardLevel == '-'))
{
// Fix if barracks has been demolished while units were under construction
}
else
{
unitConstruction = this._Parent.Str.To_Integer(getArrValue(getArrValue(city.units, ukey, undefined), "construction", 0), 0);
}
if (config["upkeeps"][key] == undefined)
{
cityConstructionUpkeep = '?';
}
else if (cityConstructionUpkeep != '?')
{
if (ugender == 'army')
{
cityConstructionUpkeep += applyUpkeepBonus(config["upkeeps"][key]*unitConstruction,ArmyUpkeepBonus);
}
else if (ugender == 'fleet')
{
cityConstructionUpkeep += applyUpkeepBonus(config["upkeeps"][key]*unitConstruction,FleetUpkeepBonus);
}
}
if (unitConstruction > 0)
{
unitConstructionHTML = '<font class="More" title="'+this._Parent.Intl.TT("currentlyBuilding")+'">'+this._Parent.Str.FormatBigNumber(unitConstruction, true)+'</font>';
sumConstruction[key] = (sumConstruction[key] == undefined) ? unitConstruction : sumConstruction[key] + unitConstruction;
}
s += "<td unit='"+key+"' class='"+firstStyle+" "+key+"'>"+
this._Parent.Str.FormatBigNumber(unitCount)+
unitConstructionHTML+
"</td>";
lastTopic = orderedUnits[key];
}
}
}
else s += "<td class='lf'></td><td></td><td></td><td></td><td></td><td></td><td></td>";
if (sumUpkeep != '?')
{
if (cityUpkeep != '?')
{
sumUpkeep += cityUpkeep;
}
else sumUpkeep = '?';
}
if (cityUpkeep == 0) cityUpkeep = '-';
if (sumConstructionUpkeep != '?')
{
if (cityConstructionUpkeep != '?')
{
sumConstructionUpkeep += cityConstructionUpkeep;
}
else sumConstructionUpkeep = '?';
}
if (cityConstructionUpkeep == 0) cityConstructionUpkeep = '-';
s += "<td class='upkeep lf'>"+(cityUpkeep != '-' ? this._Parent.Str.FormatBigNumber(-1*Math.round(cityUpkeep), true) : cityUpkeep)+"<font class='More'>"+(cityConstructionUpkeep != '-' ? this._Parent.Str.FormatBigNumber(-1*Math.round(cityConstructionUpkeep), true) : cityConstructionUpkeep)+"</font></td>";
s += "</tr>";
i++;
if (odd == '') { odd = 'odd'; } else { odd = ''; }
}
s += "</tbody>";
//s += "<tbody class='foreignCities'>";
//s += "</tbody>";
s += "<tfoot class='Summary'>";
s += "<tr class='Units'>";
s += "<td class='nolf sigma' colspan=2><img vspace=2 hspace=5 src='skin/layout/sigma.png'></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">'+this._Parent.Str.FormatBigNumber(sumConstruction[key], true)+'</font>';
}
s += "<td unit='"+key+"' class='"+firstStyle+" "+key+"'>"+
(sum[key] == undefined ? '-' : this._Parent.Str.FormatBigNumber(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>";
if (sumUpkeep == 0) sumUpkeep = '-';
if (sumConstructionUpkeep == 0) sumConstructionUpkeep = '-';
s += "<td class='upkeep lf'>"+(sumUpkeep != '-' ? this._Parent.Str.FormatBigNumber(-1*Math.round(sumUpkeep), true) : sumUpkeep)+"<font class='More'>"+(sumConstructionUpkeep != '-' ? this._Parent.Str.FormatBigNumber(-1*Math.round(sumConstructionUpkeep), true) : sumConstructionUpkeep)+"</font></td>";
s += "</tr>";
s += "</tfoot>";
s += "</table>";
return s;
};
EmpireBoard.Renders.UnitName_Tooltip_Content = function(unit_id)
{
return '<nobr>'+this._Parent.Intl.TT('unit '+unit_id,'army_units')+'</nobr>';
};
EmpireBoard.Renders.Set_Common_Styles = function()
{
var default_style = '\
#container {\
margin-bottom:0;\
}\
\
/****************** main div *******************/\
\
#EmpireBoard {\
width: 990px;\
margin: 0 auto;\
padding: 0 0 15px 0;\
}\
\
#EmpireBoard.LtoR,\
#EmpireBoard.LtoR * {\
direction: ltr;\
}\
\
#EmpireBoard.RtoL,\
#EmpireBoard.RtoL * {\
direction: rtl;\
}\
\
/****************** overview tables *******************/\
\
#EmpireBoard div.Table {\
margin-bottom: 2px;\
}\
\
#EmpireBoard table.Overview {\
width: 100% !important;\
margin-bottom: 3px;\
background-color: #F6EBBA;\
text-align: center;\
border-collapse: collapse;\
border: 2px solid #fff;\
box-shadow: 3px 3px 0 #AB9166;\
}\
\
#EmpireBoard table.Overview thead {\
background: #F8E7B3 url(skin/input/button.png) repeat-x scroll 0 bottom;\
}\
\
#EmpireBoard table.Overview tfoot { \
background: #E7C680 url(skin/input/button.png) repeat-x scroll 0 0;\
border-top: 2px solid #CB9B6A;\
}\
\
#EmpireBoard table.Overview tbody tr {\
border-top: 1px solid #ECCF8E;\
}\
\
#EmpireBoard table.Overview tr.odd {\
background-color: #FDF1D4;\
}\
#EmpireBoard table.Overview tr.current {\
background-color: #FAE3B8;\
box-shadow:0 0 5px #CB9B6A inset;\
border:1px solid #CB9B6A;\
}\
\
#EmpireBoard table.Overview tbody tr:hover {\
background-color: #fff;\
border:1px solid #CB9B6A;\
box-shadow:0 0 5px #CB9B6A;\
}\
\
#EmpireBoard table.Overview tfoot tr {\
border-top: 1px solid #CB9B6A;\
}\
\
#EmpireBoard table.Overview th,\
#EmpireBoard table.Overview td {\
border-left: 1px solid #ECCF8E;\
}\
\
#EmpireBoard.RtoL table.Overview th,\
#EmpireBoard.RtoL table.Overview td {\
border-left: inherit;\
border-right: 1px solid #ECCF8E;\
}\
\
#EmpireBoard table.Overview th {\
height: 22px;\
width: auto;\
padding: 1px;\
padding-bottom: 2px;\
padding-left: 3px;\
text-align: center !important;\
color: #542C0F; \
font-weight: bold;\
text-shadow:0 1px #FFFFFF;\
}\
\
#EmpireBoard table.Overview td {\
height: auto;\
line-height: 11px;\
font-size: 11px;\
min-width: 10px;\
padding: 1px;\
vertical-align: top;\
text-align: right;\
color: #542C0F;\
text-shadow:0 1px #FFFFFF;\
}\
\
#EmpireBoard table.Overview th.lf,\
#EmpireBoard table.Overview td.lf {\
border-left: 2px solid #CB9B6A;\
}\
#EmpireBoard.RtoL table.Overview th.lf,\
#EmpireBoard.RtoL table.Overview td.lf {\
border-left: inherit;\
border-right: 2px solid #CB9B6A;\
}\
\
#EmpireBoard table.Overview th.nolf,\
#EmpireBoard table.Overview td.nolf {\
border-left: none;\
}\
#EmpireBoard.RtoL table.Overview th.nolf,\
#EmpireBoard.RtoL table.Overview td.nolf {\
border-left: inherit;\
border-right: none;\
}\
\
#EmpireBoard table.Overview th.city_name,\
#EmpireBoard table.Overview td.city_name {\
overflow: hidden;\
}\
\
#EmpireBoard table.Overview th.actions,\
#EmpireBoard table.Overview td.actions,\
#EmpireBoard table.Overview th.lfdash,\
#EmpireBoard table.Overview td.lfdash {\
border-left: 1px dashed #ECCF8E;\
}\
#EmpireBoard.RtoL table.Overview th.actions,\
#EmpireBoard.RtoL table.Overview td.actions,\
#EmpireBoard.RtoL table.Overview th.lfdash,\
#EmpireBoard.RtoL table.Overview td.lfdash {\
border-left: inherit;\
border-right: 1px dashed #ECCF8E;\
}\
\
#EmpireBoard table.Overview th.city_name {\
width: 95px !important;\
max-width: 95px;\
}\
#EmpireBoard.RtoL table.Overview th.city_name {}\
\
#EmpireBoard table.Overview th.actions {\
width: 62px;\
max-width: 62px;\
padding-left: 2px;\
padding-bottom: 3px;\
text-align: right !important;\
vertical-align: bottom;\
}\
\
#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,\
#EmpireBoard table.Buildings th.build_name7,\
#EmpireBoard table.Buildings th.build_name8,\
#EmpireBoard table.Buildings th.build_name9,\
#EmpireBoard table.Buildings th.build_name10,\
#EmpireBoard table.Buildings th.build_name11,\
#EmpireBoard table.Buildings th.build_name12 { max-width: 25px; overflow: hidden; cursor: default;}\
#EmpireBoard table.Buildings th.build_name2 { max-width: 45px;}\
#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: 105px;}\
#EmpireBoard table.Buildings th.build_name7 { max-width: 115px;}\
#EmpireBoard table.Buildings th.build_name8 { max-width: 125px;}\
#EmpireBoard table.Buildings th.build_name9 { max-width: 135px;}\
#EmpireBoard table.Buildings th.build_name10 { max-width: 140px;}\
#EmpireBoard table.Buildings th.build_name11 { max-width: 145px;}\
#EmpireBoard table.Buildings th.build_name12 { max-width: 150px;}\
\
#EmpireBoard table.Army th.unit_name { min-width: 25px; max-width: 35px; overflow: hidden; cursor: default;}\
\
#EmpireBoard table.Army th.upkeep { min-width: 20px; overflow: hidden; cursor: default; }\
\
#EmpireBoard table.Overview tfoot td { \
font-weight: bold;\
}\
\
#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; line-height:12px; padding-right:3px;}\
#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 td.actions img.Action { height: 12px; margin-top: 1px; }\
\
#EmpireBoard.RtoL table.Overview td.sigma {\
text-align: left;\
}\
\
#EmpireBoard table.Overview .More {\
font-size: 10px;\
line-height: 10px !important;\
height: 10px !important;\
margin-top:-1px;\
clear: both;\
display: block;\
cursor: default;\
text-shadow: none;\
}\
#EmpireBoard table.Resources .MoreGoods { margin-top:0; }\
#EmpireBoard table.Overview tbody .More { color: #CB9B6A;}\
\
#EmpireBoard table.Buildings td.current {\
}\
#EmpireBoard table.Buildings td.current a {\
color: #542C0F;\
}\
\
/****************** progress bar styles *******************/\
#EmpireBoard table.Overview table.myPercent {\
height: auto !important;\
width: 92%;\
margin-top: 2px;\
margin-left: 2px;\
margin-right: 2px;\
background-color: !transparent !important;\
box-shadow: 0 0 1px rgba(0, 0, 0, 0.6);\
}\
#EmpireBoard table.Overview table.myPercent td {\
height: 4px !important;\
min-width: 0px !important;\
padding: 0px !important;\
background-color: #CB9B6A;\
border: 1px solid #FDF7DD;\
}\
#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;}\
/****************** alerts *******************/\
#EmpireBoard sup {\
vertical-align: top !important;\
font-size: 9px;\
line-height: 9px;\
margin-left: 1px;\
}\
#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: 1px; margin-right: 1px;}\
\
/****************** footer *******************/\
\
#EmpireBoard p {text-align: left; display: block;}\
#EmpireBoard.RtoL p {text-align: right;}\
#EmpireBoard p.Caption { font-size: 9px; margin: 0 2px;}\
\
#EmpireBoardSettings {}\
#EmpireBoardSettings td {border: none !important;}\
#EmpireBoardSettings input.button {margin-right: 5px;}\
\
#EmpireBoard #EmpireBoardAddons { float: left; text-align: left;}\
#EmpireBoard.RtoL #EmpireBoardAddons { text-align: right;}\
#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 *******************/\
#EmpireBoardTooltip {\
position:absolute;\
z-index: 2000;\
box-shadow: 2px 2px 0 rgba(0, 0, 0, 0.2); \
}\
\
.TTContent {\
padding: 3px;\
color: #542C0F;\
background-color: #FDF7DD;\
border: 1px solid #BE8D53;\
border-top-width: 4px;\
text-align:left;\
}\
.RtoL .TTContent { text-align: right; }\
.TTTitle {\
font-weight: bold;\
background-color: #FAE0AE;\
padding: 3px;\
margin: -3px;\
margin-bottom:4px;\
text-align:left;\
}\
.RtoL .TTTitle { text-align: right; }\
\
.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;\
}\
.TTContent table td.Mission img { max-height: 15px;}\
';
GM_addStyle(default_style);
if (this._Parent.Ikariam.Is_Version('0.4.5'))
{
}
else
{
this.Set_MMObar_Styles();
}
};
EmpireBoard.Renders.Set_MMObar_Styles = function()
{
var default_style = '\
/* Hack to simulate MMO bar on s666 server */\
#container {\
position:relative;\
top:32px;\
}\
#GF_toolbar {\
position:absolute;\
top:34px;\
}\
#EmpireBoard {\
padding: 15px 0;\
}\
';
GM_addStyle(default_style);
};
EmpireBoard.Renders.ArmyFleet_HeaderIcons = function(currentCityId)
{
var rHTML = '';
rHTML += this.IconTo_safehouseReports(currentCityId);
if (reportViewToSurvey('safehouse-reports') == '!')
{
rHTML += '<sup class=Red title="Require attention">!</sup>';
}
else
{
rHTML += ' ';
}
rHTML += '<a view="militaryAdvisorCombatReports" href="?view=militaryAdvisorCombatReports" title="View combat reports"><img align="absmiddle" src="skin/layout/medallie32x32_gold.png"/></a>';
if (reportViewToSurvey('militaryAdvisorCombatReports') == '!')
{
rHTML += '<sup class=Red title="Require attention">!</sup>';
}
else
{
rHTML += ' ';
}
rHTML += '<a view="militaryAdvisorMilitaryMovements" href="?view=militaryAdvisorMilitaryMovements" title="View military advisor"><img align="absmiddle" src="skin/relatedCities/general.png"/></a>';
if (reportViewToSurvey('militaryAdvisorMilitaryMovements') == '!')
{
rHTML += '<sup class=Red title="Require attention">!</sup>';
}
else
{
rHTML += ' ';
}
return rHTML;
};
EmpireBoard.Renders.IconTo_safehouseReports = function(currentCityId,Title)
{
if (currentCityId == undefined) currentCityId = 0;
if (Title == undefined) Title = "View espionage reports";
var rHTML = '';
var sCityId = 0;
var sCityPos = -1;
if (currentCityId > 0)
{
sCityPos = getBuildingPosition(currentCityId, 'safehouse', -1);
if (sCityPos > 0)
{
sCityId = currentCityId;
}
}
if (sCityId == 0)
{
var Cities = this._Parent.DB.CurrentCities;
for (CityId in Cities)
{
if (Cities[CityId].own != true) continue;
sCityPos = getBuildingPosition(CityId, 'safehouse', -1);
if (sCityPos > 0)
{
sCityId = CityId;
break;
}
}
}
if ((sCityId == 0) || (sCityPos <= 0))
{
return '';
}
else
{
rHTML += '<a view="safehouse" tab="reports" cityid="'+sCityId+'" position="'+sCityPos+'" href="?view=safehouse&id='+sCityId+'&position='+sCityPos+'&tab=reports" title="'+Title+'"><img align="absmiddle" src="skin/buildings/x40_y40/safehouse.png"/></a>';
return rHTML;
}
};
EmpireBoard.Renders.Resources_HeaderIcons = function(currentCityId)
{
var rHTML = '';
rHTML += '<a href="?view=merchantNavy" view="merchantNavy" title="View merchant navy"><img align="absmiddle" src="skin/img/city/building_port.png" /></a>';
if (reportViewToSurvey('merchantNavy') == '!')
{
rHTML += '<sup class=Red title="Require attention">!</sup>';
}
else
{
rHTML += ' ';
}
rHTML += '<a href="?view=finances" view="finances" title="View finances"><img align="absmiddle" src="skin/img/city/building_townhall.png" /></a>';
if (reportViewToSurvey('finances') == '!')
{
rHTML += '<sup class=Red title="Require attention">!</sup>';
}
else
{
rHTML += ' ';
}
rHTML += '<a href="?view=premium" view="premium" title="View premium features"><img align="absmiddle" src="skin/premium/ambrosia_icon.png" /></a>';
if (reportViewToSurvey('premium') == '!')
{
rHTML += '<sup class=Red title="Require attention">!</sup>';
}
else
{
rHTML += ' ';
}
return rHTML;
};
EmpireBoard.Renders.Buildings_HeaderIcons = function(currentCityId)
{
var rHTML = '';
rHTML += this.IconTo_researchOverview(currentCityId);
if (reportViewToSurvey('researchOverview') == '!')
{
rHTML += '<sup class=Red title="Require attention">!</sup>';
}
else
{
rHTML += ' ';
}
rHTML += this.IconTo_researchAdvisor();
if (reportViewToSurvey('researchAdvisor') == '!')
{
rHTML += '<sup class=Red title="Require attention">!</sup>';
}
else
{
rHTML += ' ';
}
return rHTML;
};
EmpireBoard.Renders.IconTo_researchAdvisor = function(Title)
{
if (Title == undefined) Title = "View research advisor";
var rHTML = '';
rHTML += '<a view="researchAdvisor" href="?view=researchAdvisor" title="'+Title+'"><img align="absmiddle" src="skin/resources/icon_scientist.gif"/></a>';
return rHTML;
};
EmpireBoard.Renders.IconTo_researchOverview = function(currentCityId,Title)
{
if (currentCityId == undefined) currentCityId = 0;
if (Title == undefined) Title = "View research library";
var rHTML = '';
rHTML += '<a view="researchOverview" cityid="'+currentCityId+'" href="?view=researchOverview&id='+currentCityId+'" title="'+Title+'"><img align="absmiddle" src="skin/buildings/x40_y40/academy.png"/></a>';
return rHTML;
};
EmpireBoard.Renders.Movements_Tooltip_Content = function(cityID)
{
var tooltip = "<table>";
var orderedUnits = this._Parent.Ikariam.UnitsList();
if (config["movements"] == undefined)
{
return '';
}
else if (config["movements"][cityID] != undefined)
{
for (key in config["movements"][cityID])
{
var arrivetime = config["movements"][cityID][key].endTime;
if (arrivetime >= this._Parent.StartTime)
{
var tCityId = config["movements"][cityID][key].tCityId;
var tCity ='';
if ((this._Parent.DB.CurrentCities[tCityId] != undefined) && (this._Parent.DB.CurrentCities[tCityId].own == true))
{
tCity = config["movements"][cityID][key].tCityName;
}
else
{
tCity = config["movements"][cityID][key].tCityName+" ("+config["movements"][cityID][key].tPlayerName+")";
}
var tLocation = "";
if (config["movements"][cityID][key].toLeft == true)
{
tLocation += "«";
}
else if (config["movements"][cityID][key].toRight == true)
{
tLocation += "»";
}
else
{
tLocation += "«»";
}
tLocation += " ";
tLocation += "<i>"+tCity+"</i>";
var payload = '';
if (config["movements"][cityID][key].payload != undefined)
{
for (utype in orderedUnits)
{
if (config["movements"][cityID][key].payload[utype] != undefined)
{
var ugender = this._Parent.Ikariam.Get_UnitGender(utype);
if (ugender == 'army')
{
payload += config["movements"][cityID][key].payload[utype]+' <img align="absmiddle" height="18" src="/skin/characters/military/x40_y40/y40_'+utype+'_faceright.png"> ';
}
else if (ugender == 'fleet')
{
payload += config["movements"][cityID][key].payload[utype]+' <img align="absmiddle" height="18" src="/skin/characters/fleet/40x40/'+utype+'_r_40x40.png"> ';
}
}
}
}
var counter = "(<font id='mytimecounter' counter='"+Math.round(arrivetime)+"' class='time_counter'>__:__:__</font>)";
var smartDate = smartDateFormat(arrivetime);
tooltip += "<tbody><tr>"+
"<td valign=top align=left class='Mission'><img src='"+this._Parent.Ikariam.Get_FleetMission_ImgSrc(config["movements"][cityID][key].mission)+"' /></td>"+
"<td valign=top align=right><nobr><b>"+config["movements"][cityID][key].summary+"</b></nobr> </td>"+
"<td valign=top align=left>"+tLocation+"</td>"+
"</tr><tr class=Small>"+
"<td class=Payload align=left valign=middle colspan=2><nobr>"+payload+"</nobr></td>"+
"<td align=right colspan=3> <nobr>"+smartDate+" "+counter+"</nobr></td>"+
"</tr></tbody>";
}
}
}
else
{
return '';
}
tooltip += "</table>";
return tooltip;
};
EmpireBoard.Renders.Attacks_Tooltip_Content = function(cityID)
{
var tooltip = "<table>";
if (config["attacks"] == undefined)
{
return '';
}
else if (config["attacks"][cityID] != undefined)
{
for (key in config["attacks"][cityID])
{
var arrivetime = config["attacks"][cityID][key].endTime;
if (arrivetime >= this._Parent.StartTime)
{
var tCityId = config["attacks"][cityID][key].oCityId;
var tCity ='';
tCity = config["attacks"][cityID][key].oCityName+" ("+config["attacks"][cityID][key].oPlayerName+")";
var tLocation = "";
tLocation += "<i>"+tCity+"</i>";
tLocation += " ";
if (config["attacks"][cityID][key].toLeft == true)
{
tLocation += "«";
}
else if (config["attacks"][cityID][key].toRight == true)
{
tLocation += "»";
}
else
{
tLocation += "«»";
}
var counter = "(<font id='mytimecounter' counter='"+Math.round(arrivetime)+"' class='time_counter'>__:__:__</font>)";
var smartDate = smartDateFormat(arrivetime);
tooltip += "<tbody><tr>"+
"<td valign=top align=left class=Red>"+tLocation+"</td>"+
"<td valign=top align=left class='Mission'><img src='"+this._Parent.Ikariam.Get_FleetMission_ImgSrc(config["attacks"][cityID][key].mission)+"' /></td>"+
"<td valign=top align=right class=Red><b>"+config["attacks"][cityID][key].summary+"</b> </td>"+
"</tr><tr class=Small>"+
"<td align=right colspan=3> "+smartDate+" "+counter+"</td>"+
"</tr></tbody>";
}
}
}
else
{
return '';
}
tooltip += "</table>";
return tooltip;
};
EmpireBoard.Renders.ArrivingGoods_Tooltip_Content = function(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);
}
var fromLocation = "« <i>" + startcity + "</i>";
tooltip += "<tbody><tr>"+
"<td valign=top>+</td>"+
"<td valign=top align=right><b>"+this._Parent.Str.FormatBigNumber(a) + "</b> </td>"+
"<td valign=top 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", "-");
var tavernLevel = getBuildingLevel(city_id, "tavern", "-");
if (tavernLevel == '-')
{
// Fix if tavern has been demolished without disable wine usage
}
else 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>"+this._Parent.Str.FormatBigNumber(parseInt(tradinggoods)) + "</b> </td>"+
"<td align=left>« <i>" + this._Parent.Intl.TT('branchOffice','buildings') + "</i></td>"+
"</tr></tbody>";
}
if (resAmount > 0)
{
tooltip += "<tbody><tr>"+
"<td>+</td>"+
"<td align=right><b>"+this._Parent.Str.FormatBigNumber(resAmount) + "</b> </td>"+
"<td align=left>« <i>" + this._Parent.Intl.TT('warehouse','buildings') + "</i></td>"+
"</tr></tbody>";
}
if (sum > 0)
{
tooltip += "<tfoot><tr>"+
"<td>=</td>"+
"<td align=right><b>"+this._Parent.Str.FormatBigNumber(sum+resAmount) + "</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>"+this._Parent.Str.FormatBigNumber(Math.abs(hourlyprod)) + " </td>"+
"<td align=left>x " + this._Parent.Str.FormatFloatNumber(restHours, 1) + this._Parent.Ikariam.LocalizationStrings('hour','timeunits','short')+"</td>"+
"</tr>";
tooltip += "<tr class=Small>"+
"<td>=</td>"+
"<td align=right>"+this._Parent.Str.FormatBigNumber(sum+resAmount+Math.floor(restHours*hourlyprod)) + " </td>"+
"<td align=left>» " + smartDateFormat(higherTime)+"</td>"+
"</tr>";
}
tooltip += "</tfoot>";
}
tooltip += "</table>";
return tooltip;
};
EmpireBoard.Ikariam =
{
_Parent: null,
_View: null,
_Tab: null,
_Host: null,
_Server: null,
_Language: null,
_Version: null,
_Revision: null,
_IsMobile: null,
_IsVersions: {},
_ActionRequest: null,
_currentCity: null,
_phpSet: null,
_LocalizationStrings: null,
_UnitsList: null,
_UnitsClassNames: null,
_BuildingsList: null,
_IsLogged: null
};
EmpireBoard.Ikariam.Init = function(parent)
{
this._Parent = parent;
};
EmpireBoard.Ikariam.BuildingsList = function()
{
if (this._BuildingsList == null)
{
this._BuildingsList = {};
this._BuildingsList['townHall'] = 'growth';
this._BuildingsList['palace'] = 'growth';
this._BuildingsList['palaceColony'] = 'growth';
this._BuildingsList['tavern'] = 'growth';
this._BuildingsList['museum'] = 'growth';
this._BuildingsList['academy'] = 'research';
this._BuildingsList['workshop'] = 'research';
this._BuildingsList['temple'] = 'research';
this._BuildingsList['embassy'] = 'diplomacy';
this._BuildingsList['warehouse'] = 'trading';
this._BuildingsList['dump'] = 'trading';
this._BuildingsList['port'] = 'trading';
this._BuildingsList['branchOffice'] = 'trading';
this._BuildingsList['wall'] = 'military';
this._BuildingsList['safehouse'] = 'military';
this._BuildingsList['barracks'] = 'military';
this._BuildingsList['shipyard'] = 'military';
this._BuildingsList['forester'] = 'wood';
this._BuildingsList['carpentering'] = 'wood';
this._BuildingsList['winegrower'] = 'wine';
this._BuildingsList['vineyard'] = 'wine';
this._BuildingsList['stonemason'] = 'marble';
this._BuildingsList['architect'] = 'marble';
this._BuildingsList['glassblowing'] = 'crystal';
this._BuildingsList['optician'] = 'crystal';
this._BuildingsList['alchemist'] = 'sulfur';
this._BuildingsList['fireworker'] = 'sulfur';
}
return this._BuildingsList;
};
EmpireBoard.Ikariam.Get_BuildingUsage = function(buildingName)
{
var buildingUsage = '';
orderedBuildings = this.BuildingsList();
if (orderedBuildings[buildingName] != undefined)
{
var arrayClassNames = orderedBuildings[buildingName].split(' ');
buildingUsage = arrayClassNames[0];
}
return buildingUsage;
};
EmpireBoard.Ikariam.UnitsClassNames = function()
{
if (this._UnitsClassNames == null)
{
this._UnitsClassNames = {};
// Army
this._UnitsClassNames[301] = 'slinger';
this._UnitsClassNames[302] = 'swordsman';
this._UnitsClassNames[303] = 'phalanx';
this._UnitsClassNames[304] = 'marksman';
this._UnitsClassNames[305] = 'mortar';
this._UnitsClassNames[306] = 'catapult';
this._UnitsClassNames[307] = 'ram';
this._UnitsClassNames[308] = 'steamgiant';
this._UnitsClassNames[309] = 'bombardier';
this._UnitsClassNames[310] = 'cook';
this._UnitsClassNames[311] = 'medic';
this._UnitsClassNames[312] = 'gyrocopter';
this._UnitsClassNames[313] = 'archer';
this._UnitsClassNames[315] = 'spearman';
// Fleet
this._UnitsClassNames[210] = 'ship_ram';
this._UnitsClassNames[211] = 'ship_flamethrower';
this._UnitsClassNames[212] = 'ship_submarine';
this._UnitsClassNames[213] = 'ship_ballista';
this._UnitsClassNames[214] = 'ship_catapult';
this._UnitsClassNames[215] = 'ship_mortar';
this._UnitsClassNames[216] = 'ship_steamboat';
// v.0.4.x new units
this._UnitsClassNames[217] = 'ship_rocketship';
this._UnitsClassNames[218] = 'ship_paddlespeedship';
this._UnitsClassNames[219] = 'ship_ballooncarrier';
this._UnitsClassNames[220] = 'ship_tender';
}
return this._UnitsClassNames;
};
EmpireBoard.Ikariam.UnitsList = function()
{
if (this._UnitsList == null)
{
this._UnitsList = {};
this._UnitsList['phalanx'] = 'army line1';
this._UnitsList['steamgiant'] = 'army line1';
this._UnitsList['spearman'] = 'army flank';
this._UnitsList['swordsman'] = 'army flank';
this._UnitsList['slinger'] = 'army line2';
this._UnitsList['archer'] = 'army line2';
this._UnitsList['marksman'] = 'army line2';
this._UnitsList['ram'] = 'army artillery';
this._UnitsList['catapult'] = 'army artillery';
this._UnitsList['mortar'] = 'army artillery';
this._UnitsList['gyrocopter'] = 'army air';
this._UnitsList['bombardier'] = 'army air';
this._UnitsList['cook'] = 'army support';
this._UnitsList['medic'] = 'army support';
this._UnitsList['ship_ram'] = 'fleet line1';
this._UnitsList['ship_flamethrower'] = 'fleet line1';
this._UnitsList['ship_steamboat'] = 'fleet line1';
this._UnitsList['ship_ballista'] = 'fleet line2';
this._UnitsList['ship_catapult'] = 'fleet line2';
this._UnitsList['ship_mortar'] = 'fleet line2';
this._UnitsList['ship_rocketship'] = 'fleet firststrike';
this._UnitsList['ship_submarine'] = 'fleet firststrike';
this._UnitsList['ship_paddlespeedship'] = 'fleet carrier';
this._UnitsList['ship_ballooncarrier'] = 'fleet carrier';
this._UnitsList['ship_tender'] = 'fleet support';
}
return this._UnitsList;
};
EmpireBoard.Ikariam.Get_MaxBuildings = function()
{
if (this.Is_Version('0.4.5'))
{
return 17;
}
else
{
return 15;
}
};
EmpireBoard.Ikariam.Get_UnitGender = function(unitType)
{
var unitGender = '';
orderedUnits = this.UnitsList();
if (orderedUnits[unitType] != undefined)
{
var arrayClassNames = orderedUnits[unitType].split(' ');
unitGender = arrayClassNames[0];
}
return unitGender;
};
EmpireBoard.Ikariam.Is_Logged = function()
{
if (this._IsLogged == null)
{
this._IsLogged = this._Parent.DOM.Has_Node("//div[@id='GF_toolbar']//li[contains(@class,'logout')]");
this._Parent.Log.Add('User logged : '+(this._IsLogged == true ? 'yes' : 'no'));
}
return this._IsLogged;
};
EmpireBoard.Ikariam.View = function()
{
if (this._View == null)
{
this._View = '';
if (this.phpSet('currentView') != undefined)
{
this._View = this.phpSet('currentView');
}
else
{
// 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;
}
}
this._Parent.Log.Add('View = '+this._View);
}
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)
{
if (this.LocalizationStrings('language') != undefined)
{
this._Language = this.LocalizationStrings('language');
}
else
{
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];
}
}
//if (this._Language == '') this._Language = 'en';
}
return this._Language;
};
EmpireBoard.Ikariam.Grab_JSCompleteScript_Version = function(defaultVersion)
{
// Requires: DOM
var Version = '';
if (defaultVersion != undefined) Version = defaultVersion;
var JSCompleteScript = this._Parent.DOM.Get_First_Node("//script[contains(@src,'/js/complete')]");
if (JSCompleteScript != null)
{
var JSCompleteSrc = JSCompleteScript.src;
var JSCompleteRegExp_x3 = /complete-([0-9]+\.[0-9]+\.[0-9]+)/.exec(JSCompleteSrc);
if (JSCompleteRegExp_x3 != null)
{
Version = RegExp.$1;
}
var JSCompleteRegExp_x4 = /complete-([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/.exec(JSCompleteSrc);
if (JSCompleteRegExp_x4 != null)
{
Version = RegExp.$1;
}
}
return Version;
};
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",'');
// remove "v."
this._Version = this._Parent.Str.Trim(this._Version.replace(/v\./gi, ""));
// remove "v"
this._Version = this._Parent.Str.Trim(this._Version.replace(/v/gi, ""));
// build number use space separator
this._Version = this._Version.replace(/ /gi, ".");
if ((this._Version == '0.4.X') || (this._Version == '0.4.x'))
{
this._Version = this.Grab_JSCompleteScript_Version('0.4.4.2');
}
else if (this._Version == '0.4.4')
{
this._Version = this.Grab_JSCompleteScript_Version('0.4.4');
}
else if (this._Version == '0.4.2')
{
this._Version = this.Grab_JSCompleteScript_Version('0.4.2');
}
this._Parent.Log.Add("Ikariam server version: "+this._Version);
}
return this._Version;
};
EmpireBoard.Ikariam.Revision = function()
{
// Requires: DOM, Str
if (this._Revision == null)
{
this._Revision = 0;
this._Revision = this._Parent.Str.To_Integer(this._Parent.DOM.Get_First_Node_Title("//div[@id='GF_toolbar']//li[@class='version']//span",'0'), 0);
this._Parent.Log.Add("Ikariam server revision: "+this._Revision);
}
return this._Revision;
};
// NB: return true if connect on mobile version
EmpireBoard.Ikariam.Is_Mobile = function()
{
if (this._IsMobile == null)
{
var CurrentURL = ''+document.URL;
if (CurrentURL.indexOf('http://m') == -1)
{
this._IsMobile = false;
}
else
{
this._IsMobile = true;
}
}
return this._IsMobile;
};
// NB: return true if current version is higher or equal than requiredVersion
EmpireBoard.Ikariam.Is_Version = function(requiredVersion)
{
// Requires: Str
var isHigher = false;
if (requiredVersion == undefined)
{
isHigher = false;
}
else if (requiredVersion == '')
{
isHigher = false;
}
else
{
if (this._IsVersions[requiredVersion] == undefined)
{
if (this._Parent.Str.Compare_Versions(requiredVersion, this.Version()) >= 0)
{
isHigher = true;
//this._Parent.Log.Add("Ikariam version is v."+requiredVersion+" or higher");
}
else
{
isHigher = false;
}
this._IsVersions[requiredVersion] = isHigher;
}
else
{
isHigher = this._IsVersions[requiredVersion];
}
}
return isHigher;
};
/* DEPRECATED
EmpireBoard.Ikariam.Is_Version_031x = function()
{
return this.Is_Version('0.3.1');
};
EmpireBoard.Ikariam.Is_Version_032x = function()
{
return this.Is_Version('0.3.2');
};
EmpireBoard.Ikariam.Is_Version_033x = function()
{
return this.Is_Version('0.3.3');
};
EmpireBoard.Ikariam.Is_Version_034x = function()
{
return this.Is_Version('0.3.4');
};
EmpireBoard.Ikariam.Is_Version_035x = function()
{
return this.Is_Version('0.3.5');
};
EmpireBoard.Ikariam.Is_Version_040x = function()
{
return this.Is_Version('0.4.0');
};
EmpireBoard.Ikariam.Is_Version_041x = function()
{
return this.Is_Version('0.4.1');
};
EmpireBoard.Ikariam.Is_Version_042x = function()
{
return this.Is_Version('0.4.2');
};
EmpireBoard.Ikariam.Is_Version_0424 = function()
{
return this.Is_Version('0.4.2.4');
};
EmpireBoard.Ikariam.Is_Version_043x = function()
{
return this.Is_Version('0.4.3');
};
EmpireBoard.Ikariam.Is_Version_044x = function()
{
return this.Is_Version('0.4.4');
};
*/
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)
{
// Require: Str
return this._Parent.Str.Trim(this._Parent.Str.Trim_Accodances(str));
};
EmpireBoard.Ikariam.Trim_PlayerName = function(str)
{
// Require: Str
return this._Parent.Str.Trim(this._Parent.Str.Trim_Brackets(str));
};
EmpireBoard.Ikariam.Trim_Unit = function(str)
{
// Require: Str
str = str.replace("unit", "");
str = str.replace("currentUnit", "");
return this._Parent.Str.Trim(str);
};
EmpireBoard.Ikariam.TwoDigit_Coords = function(str)
{
// Require: Str
var a = str.indexOf('[');
var b = str.indexOf(']');
str = str.substring(a+1,b);
var coords = str.split(':');
res = '[';
res += this._Parent.Str.TwoDigit(coords[0].substr(-2,2));
res += ':';
res += this._Parent.Str.TwoDigit(coords[1].substr(-2,2));
res += ']';
return res;
};
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;
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.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 select list: city ['+CityId+'], '+database[CityId].name+', selected='+database[CityId].selected);
}
}
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_FleetMission_ImgSrc = function(mission)
{
// Values: deployarmy, deployfleet, plunder, blockade, defend, defend_port, trade, transport, occupy
var tag = '';
tag = 'skin/interface/mission_' + mission + '.png';
return tag;
};
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+'_x25.png';
return tag;
};
EmpireBoard.Ikariam.Resource_Capacity = function(ResType, WarehouseLevel, DumpLevel, Bonus)
{
if (ResType == undefined) ResType = 'wine';
if (WarehouseLevel == undefined) WarehouseLevel = 0;
if (DumpLevel == undefined) DumpLevel = 0;
if (Bonus == undefined) Bonus = 0;
var result = 0;
if (this.Is_Version('0.3.1') == true)
{
result = 1500;
}
else
{
if (ResType == 'wood')
{
result = 3000;
}
else
{
result = 1500;
}
}
result = result + (WarehouseLevel * 8000);
result = result + (DumpLevel * 32000);
return result + (result/100*Bonus);
};
EmpireBoard.Ikariam.Resource_SafeCapacity = function(ResType, WarehousesLevels, Bonus)
{
var _self = this;
if (ResType == undefined) ResType = 'wine';
if (WarehousesLevels == undefined) WarehousesLevels = 0;
if (Bonus == undefined) Bonus = 0;
function SafeCapacityPerWarehouse(ResType, WarehouseLevel)
{
if (_self.Is_Version('0.3.3') == true)
{
return (WarehouseLevel * 480);
}
else if (_self.Is_Version('0.3.1') == true)
{
return (WarehouseLevel * 80);
}
else
{
if (ResType == 'wood')
{
return (WarehouseLevel * 160);
}
else
{
return (WarehouseLevel * 80);
}
}
}
function isArray(obj)
{
if (obj.constructor.toString().indexOf("Array") == -1)
return false;
else
return true;
}
var result = 0;
if (this.Is_Version('0.3.4') == true)
{
result = 100;
if (isArray(WarehousesLevels))
{
var WarehousesLevel = 0;
if (WarehousesLevels.length <= 4)
{
var p;
for (p in WarehousesLevels)
{
WarehousesLevel += WarehousesLevels[p];
}
}
else
{
WarehousesLevels.sort(function(a,b){return b - a});
for (var i=0; i<=3; i++)
{
WarehousesLevel += WarehousesLevels[i];
}
}
result += SafeCapacityPerWarehouse(ResType, WarehousesLevel);
}
else
{
result += SafeCapacityPerWarehouse(ResType, parseInt(WarehousesLevels));
}
}
else
{
var WarehousesLevel = 0;
if (isArray(WarehousesLevels))
{
var p;
for (p in WarehousesLevels)
{
WarehousesLevel += WarehousesLevels[p];
}
}
else
{
WarehousesLevel = parseInt(WarehousesLevels);
}
if (this.Is_Version('0.3.1') == true)
{
result = 100;
result += SafeCapacityPerWarehouse(ResType, WarehousesLevel);
}
else
{
if (ResType == 'wood')
{
result = 100;
result += SafeCapacityPerWarehouse(ResType, WarehousesLevel);
}
else
{
result = 50;
result += SafeCapacityPerWarehouse(ResType, WarehousesLevel);
}
}
}
return result + (result/100*Bonus);
};
EmpireBoard.Ikariam.MerchantNavyBox_Object = function()
{
var MerchantNavyBox = new Object;
//MerchantNavyBox.id = '';
MerchantNavyBox.title = '';
//MerchantNavyBox.length = ''; // Number of missions
//MerchantNavyBox.missions = {};
return MerchantNavyBox;
};
EmpireBoard.Ikariam.NavyTransport_Object = function()
{
var NavyTransport = new Object;
//NavyTransport.id = '';
//NavyTransport.oCityId = 0;
//NavyTransport.oCityName = '';
//NavyTransport.oPlayerName = '';
NavyTransport.ETA = '';
NavyTransport.RET = '';
return NavyTransport;
};
EmpireBoard.Ikariam.Fetch_TimeCounters = function(database, objectName)
{
if (database == undefined) database = {};
if (objectName == undefined) objectName = 'getCountdown';
this._Parent.Log.Add("Start to fetch '"+objectName+"' time counters");
// Fetch time counters
var scripts = document.getElementsByTagName("script");
for (var j = 0; j < scripts.length; j++)
{
var nScript = scripts[j];
var sCode = nScript.innerHTML;
if (sCode.indexOf(objectName) > 0)
{
var aCodeLines = sCode.split(';');
for (var i=0; i < aCodeLines.length; i++)
{
var sValues = aCodeLines[i].substring(aCodeLines[i].indexOf('{')+1,aCodeLines[i].indexOf('}'));
var sParts = sValues.split(',');
if (sParts.length >= 3)
{
var CounterValues = new Object;
var CounterId = '';
for (var k=0; k < sParts.length; k++)
{
var sPartPeer = sParts[k].split(':');
var sPartName = this._Parent.Str.Trim(sPartPeer[0]);
var sPartValue = this._Parent.Str.Trim(sPartPeer[1]);
if (sPartName == 'el')
{
sPartValue = this._Parent.Str.Trim_DoubleQuotes(sPartValue);
CounterId = ''+sPartValue;
}
else
{
sPartValue = 1000*parseInt(sPartValue);
}
CounterValues[sPartName]=sPartValue;
//this._Parent.Log.Add("TimeCounter."+sPartName+" = "+CounterValues[sPartName]);
}
if (CounterId != '')
{
database[CounterId] = CounterValues;
//this._Parent.Log.Add("TimeCounter["+CounterId+"] found");
}
}
}
}
}
return database;
};
EmpireBoard.Ikariam.Fetch_MerchantNavy_Boxes = function(boxesDB, includeMissions)
{
// Require: DOM, Str
this._Parent.Log.Add('Start fetch MerchantNavy boxes...');
var StartTime = new Date().getTime();
if (boxesDB == undefined) boxesDB = {};
if (includeMissions == undefined) includeMissions = false;
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 contentBoxes = this._Parent.DOM.Get_Nodes("//div[@id='mainview']/div[contains(@class, 'contentBox')]");
if (contentBoxes.snapshotLength > 0)
{
this._Parent.Log.Add('Found '+contentBoxes.snapshotLength+' contentBox');
for (var i=0; i < contentBoxes.snapshotLength; i++)
{
var contentBox = contentBoxes.snapshotItem(i);
var boxId = contentBox.id;
if (boxId == '')
{
boxId = 'contentBox'+(i+1);
contentBox.id = boxId;
}
if (boxesDB[boxId] == undefined)
{
boxesDB[boxId] = new this.MerchantNavyBox_Object();
}
boxesDB[boxId].id = boxId;
var h3s = contentBox.getElementsByTagName("h3");
boxesDB[boxId].title = h3s[0].textContent;
var Missions = this._Parent.DOM.Get_Nodes("//div[@id='mainview']/div[@id='"+boxId+"']//td[contains(@class, 'mission')]");
boxesDB[boxId].length = Missions.snapshotLength;
this._Parent.Log.Add('contentBox['+boxId+']: '+boxesDB[boxId].title+', '+boxesDB[boxId].length+' missions');
if ((includeMissions == true) && (Missions.snapshotLength >= 1))
{
boxesDB[boxId].missions = {};
for (var j=0; j < Missions.snapshotLength; j++)
{
var nMi = Missions.snapshotItem(j);
var tr = nMi.parentNode;
var tds = tr.getElementsByTagName("td");
var tdslength = tds.length;
//var tds = tr.childNodes;
var missionId = '';
if (tdslength == 6)
{
// pillaging under 0.4.3
var ETA = tds[4].id;
var RET = tds[4].id;
}
else if (this._Parent.DOM.Has_ClassName(tds[4],'speed'))
{
// transport under 0.4.3
var ETA = tds[5].id;
var RET = tds[5].id;
}
else if (this._Parent.DOM.Has_ClassName(tds[5],'speed'))
{
// transport under 0.4.2
var ETA = tds[4].id;
var RET = tds[6].id;
}
else
{
var ETA = tds[4].id;
var RET = tds[5].id;
}
if (ETA != '')
{
missionId = ETA;
}
else if (RET != '')
{
missionId = RET;
}
if (missionId != '')
{
if (boxesDB[boxId].missions[missionId] == undefined)
{
boxesDB[boxId].missions[missionId] = new this.NavyTransport_Object();
}
boxesDB[boxId].missions[missionId].id = missionId;
if (ETA != '')
{
boxesDB[boxId].missions[missionId].ETA = ETA;
}
if (RET != '')
{
boxesDB[boxId].missions[missionId].RET = RET;
}
boxesDB[boxId].missions[missionId].oCityId = grabCityID(tds[1]);
//this._Parent.Log.Add('NavyTransport['+missionId+']: oCityId='+boxesDB[boxId].missions[missionId].oCityId);
}
}
}
}
}
return boxesDB;
};
EmpireBoard.Ikariam.FleetMovement_Object = function()
{
var FleetMovement = new Object;
//FleetMovement.id = '';
//FleetMovement.own = false;
//FleetMovement.hostile = false;
FleetMovement.time = 0;
//FleetMovement.summary = '';
//FleetMovement.payload = {};
//FleetMovement.hasFleet = false;
//FleetMovement.hasGoods = false;
//FleetMovement.hasArmy = false;
//FleetMovement.oCityId = 0;
//FleetMovement.oCityName = '';
//FleetMovement.oPlayerName = '';
//FleetMovement.toLeft = false;
//FleetMovement.mission = '';
// Values: deployarmy, deployfleet, plunder, blockade, defend, defend_port, trade, transport, occupy
//FleetMovement.subject = '';
//FleetMovement.toRight = false;
//FleetMovement.tCityId = 0;
//FleetMovement.tCityName = '';
//FleetMovement.tPlayerName = '';
//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 = {};
var _self = this;
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;
}
function TrimIcon(src)
{
var str = '';
var parsedURL = src.split('/');
if (parsedURL.length > 0)
{
str = parsedURL[parsedURL.length-1];
}
str = str.replace(".gif", "");
str = str.replace(".png", "");
str = str.replace("40x40", "");
str = str.replace("60x60", "");
str = str.replace("_r_", "");
str = str.replace("y40_", "");
str = str.replace("_faceright", "");
str = str.replace("icon_", "");
return _self._Parent.Str.Trim(str);
}
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(',');
if (sParts.length >= 3)
{
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));
if ((enddate - currentdate) > 0)
{
mTimers[sID] = StartTime + (enddate - currentdate);
}
}
else
{
this._Parent.Log.Add("Failed to fetch getCountdown");
}
}
}
}
}
for (var i=0; i < resMi.snapshotLength; i++)
{
var tr = resMi.snapshotItem(i).parentNode.parentNode;
var tds = tr.getElementsByTagName("td");
//var tds = tr.childNodes;
var fleetId = this._Parent.Str.Trim(tds[1].id);
var tdinc = 0;
// Fix for v. 0.4.3
if (this.Is_Version('0.4.3'))
{
tdinc = 1;
}
if (fleetId != '')
{
if (database[fleetId] == undefined)
{
database[fleetId] = new this.FleetMovement_Object();
}
database[fleetId].id = fleetId;
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'];
}
database[fleetId].summary = this._Parent.Str.Trim(tds[2+tdinc].childNodes[0].textContent);
database[fleetId].payload = {};
var hasFleet = false;
var hasGoods = false;
var hasArmy = false;
var payloadDoc = this._Parent.DOM.Create_Document(tds[2+tdinc].innerHTML);
var icons = this._Parent.DOM.Get_Nodes("//div[contains(@class, 'icon')]/img",payloadDoc);
var iconsNb = 0;
if (icons.snapshotLength >= 1)
{
iconsNb = icons.snapshotLength;
for (var j=0; j < iconsNb; j++)
{
var iconIMG = icons.snapshotItem(j);
var unitType = TrimIcon(iconIMG.src);
var payloadDivs = iconIMG.parentNode.parentNode.getElementsByTagName("div");
var unitQty = this._Parent.Str.To_Integer(payloadDivs[1].textContent);
database[fleetId].payload[unitType] = unitQty;
switch(this._LangCode)
{
case 'wood':
case 'wine':
case 'marble':
case 'glass':
case 'sulfur':
hasGoods = true;
break;
case 'ship_ram':
case 'ship_ballista':
case 'ship_flamethrower':
case 'ship_catapult':
case 'ship_steamboat':
case 'ship_mortar':
case 'ship_submarine':
hasFleet = true;
break;
case 'slinger':
case 'swordsman':
case 'phalanx':
case 'spearman':
case 'archer':
case 'marksman':
case 'gyrocopter':
case 'steamgiant':
case 'bombardier':
case 'ram':
case 'catapult':
case 'mortar':
case 'medic':
case 'cook':
hasArmy = true;
break;
default:
break;
}
this._Parent.Log.Add('Payload['+unitType+']='+unitQty);
}
}
if (hasFleet == true)
{
database[fleetId].hasFleet = true;
}
if (hasGoods == true)
{
database[fleetId].hasGoods = true;
}
if (hasArmy == true)
{
database[fleetId].hasArmy = true;
}
database[fleetId].oCityId = grabCityID(tds[3+tdinc]);
database[fleetId].oCityName = this._Parent.Str.Trim(tds[3+tdinc].childNodes[0].textContent);
var oPlayerName = this._Parent.Str.Trim(tds[3+tdinc].childNodes[1].textContent);
oPlayerName = oPlayerName.substring(1,oPlayerName.length-1);
database[fleetId].oPlayerName = oPlayerName;
database[fleetId].toLeft = (tds[4+tdinc].innerHTML != '') ? true : false;
database[fleetId].mission = /mission_([_a-z]+)\.[a-z]+/i.exec(resMi.snapshotItem(i).src)[1];
database[fleetId].subject = this._Parent.Str.Trim(tds[5+tdinc].title);
database[fleetId].toRight = (tds[6+tdinc].innerHTML != '') ? true : false;
database[fleetId].tCityId = grabCityID(tds[7+tdinc]);
database[fleetId].tCityName = this._Parent.Str.Trim(tds[7+tdinc].childNodes[0].textContent);
var tPlayerName = this._Parent.Str.Trim(tds[7+tdinc].childNodes[1].textContent);
tPlayerName = tPlayerName.substring(1,tPlayerName.length-1);
database[fleetId].tPlayerName = tPlayerName;
database[fleetId].hasAction = (tds[8+tdinc].innerHTML != '') ? true : false;
this._Parent.Log.Add('Detect fleet['+fleetId+']: oCityId='+database[fleetId].oCityId+', tCityId['+database[fleetId].tCityId+']: '+database[fleetId].tCityName+' ('+database[fleetId].tPlayerName+'), time='+database[fleetId].time+', mission='+database[fleetId].mission+', payload: '+iconsNb+' units');
}
}
}
return database;
};
EmpireBoard.Ikariam.LocalizationStrings = function(valueName,sectionName,subSectionName)
{
if (this._LocalizationStrings == null)
{
if (unsafeWindow && (unsafeWindow.LocalizationStrings != undefined))
{
this._LocalizationStrings = unsafeWindow.LocalizationStrings;
}
else
{
return undefined;
}
}
if (sectionName == undefined)
{
if (valueName == undefined)
{
return this._LocalizationStrings;
}
else
{
if (this._LocalizationStrings[valueName] == undefined)
{
return undefined;
}
else
{
return this._LocalizationStrings[valueName];
}
}
}
else
{
if (this._LocalizationStrings[sectionName] == undefined)
{
return undefined;
}
else if (subSectionName != undefined)
{
if (this._LocalizationStrings[sectionName][subSectionName] == undefined)
{
return undefined;
}
else if (this._LocalizationStrings[sectionName][subSectionName][valueName] == undefined)
{
return undefined;
}
else
{
return this._LocalizationStrings[sectionName][subSectionName][valueName];
}
}
else if (this._LocalizationStrings[sectionName][valueName] == undefined)
{
return undefined;
}
else
{
return this._LocalizationStrings[sectionName][valueName];
}
}
};
EmpireBoard.Ikariam.phpSet = function(valueName)
{
if (this._phpSet == null)
{
if (unsafeWindow && (unsafeWindow.IKARIAM != undefined))
{
if (unsafeWindow.IKARIAM.phpSet != undefined)
{
this._phpSet = unsafeWindow.IKARIAM.phpSet;
}
else
{
return undefined;
}
}
else
{
return undefined;
}
}
if (valueName == undefined)
{
return this._phpSet;
}
else
{
if (this._phpSet[valueName] == undefined)
{
return undefined;
}
else
{
return this._phpSet[valueName];
}
}
};
EmpireBoard.Ikariam.currentCity = function(valueName,sectionName)
{
if (this._currentCity == null)
{
if (unsafeWindow && (unsafeWindow.IKARIAM != undefined))
{
if (unsafeWindow.IKARIAM.currentCity != undefined)
{
this._currentCity = unsafeWindow.IKARIAM.currentCity;
}
else
{
return undefined;
}
}
else
{
return undefined;
}
}
if (sectionName == undefined)
{
if (valueName == undefined)
{
return this._currentCity;
}
else
{
if (this._currentCity[valueName] == undefined)
{
return undefined;
}
else
{
return this._currentCity[valueName];
}
}
}
else
{
if ((this._currentCity[sectionName] == undefined) || (this._currentCity[sectionName][valueName] == undefined))
{
return undefined;
}
else
{
return this._currentCity[sectionName][valueName];
}
}
};
// From kChen script with some fixes
EmpireBoard.Ikariam.Change_currentCity = function(city_id)
{
var _self = this;
function getFormInput(path, root)
{
var nodes = _self._Parent.DOM.Get_Nodes(path, root);
if (nodes.snapshotLength <= 0) return null;
var node0 = nodes.snapshotItem(0);
var postdata = node0.name+"="+node0.value;
for (var i = 1; i < nodes.snapshotLength; i++)
{
var node = nodes.snapshotItem(i);
postdata = postdata +"&" + node.name+"="+node.value;
}
return postdata;
}
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://' + window.location.host + '/index.php',false);
xmlhttp.setRequestHeader('User-agent',window.navigator.userAgent);
xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
xmlhttp.setRequestHeader('Accept','text/html,application/xhtml+xml,application/xml');
xmlhttp.setRequestHeader('Referer',window.location);
xmlhttp.setRequestHeader('Cookie',document.cookie);
xmlhttp.overrideMimeType('text/html; charset='+document.characterSet);
xmlhttp.send(postdata);
// Grab new ActionRequest value
var node = this._Parent.DOM.Create_Document(xmlhttp.responseText);
this._ActionRequest = this._Parent.DOM.Get_First_Node_Value("//input[@name='actionRequest']",node);
return true;
};
EmpireBoard.Ikariam.Insert_Warning = function(message, title)
{
var notices = document.getElementById('notices');
if (notices == null)
{
notices = document.createElement('div');
notices.id = 'notices';
var mainview = document.getElementById("mainview");
var buildingDescription = this._Parent.DOM.Get_Nodes("//div[@id='mainview']/div[contains(@class,'buildingDescription')]");
if (buildingDescription.snapshotLength >= 1)
{
mainview.insertBefore(notices, buildingDescription.snapshotItem(0).nextSibling);
}
else
{
var contentBox = document.createElement('div');
contentBox.setAttribute("class", "contentBox");
contentBox.appendChild(notices);
//mainview.appendChild(contentBox);
mainview.insertBefore(contentBox, mainview.getElementsByTagName("h1")[0].nextSibling);
}
}
notices.innerHTML = notices.innerHTML+'<div class="warning"><h5>'+title+'</h5><p>'+message+'</p></div>';
};
EmpireBoard.DOM =
{
_Parent: null,
};
EmpireBoard.DOM.Init = function(parent)
{
this._Parent = parent;
};
EmpireBoard.DOM.Create_Document = function(responseText)
{
// Thank sizzlemctwizzle and Seniltai
var dt = document.implementation.createDocumentType("html", "-//W3C//DTD HTML 4.01 Transitional//EN", "http://www.w3.org/TR/html4/loose.dtd");
var doc = document.implementation.createDocument('', '', dt);
var html = doc.createElement('html');
html.innerHTML = responseText;
doc.appendChild(html);
return doc;
};
EmpireBoard.DOM.Get_Nodes = function(path, root)
{
var contextNode = root ? root.evaluate ? root : root.ownerDocument : document;
return contextNode.evaluate(path, contextNode, null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
};
EmpireBoard.DOM.Has_Node = function(path, root)
{
var value = this.Get_Nodes(path, root);
if (value.snapshotLength >= 1)
{
return true;
}
else
{
return false;
}
};
EmpireBoard.DOM.Get_First_Node = function(path, root)
{
var value = this.Get_Nodes(path, root);
if (value.snapshotLength >= 1)
{
return value.snapshotItem(0);
}
return null;
};
EmpireBoard.DOM.Get_Last_Node = function(path, root)
{
var value = this.Get_Nodes(path, root);
if (value.snapshotLength >= 1)
{
return value.snapshotItem(value.snapshotLength-1);
}
return null;
};
EmpireBoard.DOM.Get_First_Node_Value = function(path, defaultValue, root)
{
var value = this.Get_First_Node(path, root);
if (value != null)
{
return value.value;
}
else return defaultValue;
};
EmpireBoard.DOM.Get_Last_Node_Value = function(path, defaultValue, root)
{
var value = this.Get_Last_Node(path, root);
if (value != null)
{
return value.value;
}
else return defaultValue;
};
EmpireBoard.DOM.Get_First_Node_TextContent = function(path, defaultValue, root)
{
var value = this.Get_First_Node(path, root);
if (value != null)
{
return value.textContent;
}
else return defaultValue;
};
EmpireBoard.DOM.Get_First_Node_Title = function(path, defaultValue, root)
{
var value = this.Get_First_Node(path, root);
if ((value != null) && (value.title != ''))
{
return value.title;
}
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,
_decimalPoint: '.',
_thousandSeparator: ',',
_timeunits_short_day: 'D',
_timeunits_short_hour: 'h',
_timeunits_short_minute: 'm',
_timeunits_short_second: 's'
};
EmpireBoard.Str.Init = function(parent)
{
this._Parent = parent;
//this._decimalPoint = this.Get_LocaleDecimalPoint();
};
// Replace any joker (%1, %2, %3, etc) with values from an array
EmpireBoard.Str.ValuesReplace = function(text, values)
{
if (text == undefined) text = '';
if (values == undefined) values = [];
var key;
var i = 1;
for (key in values)
{
text = text.replace('%'+i, values[key]);
i++;
}
return text;
}
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_DoubleQuotes = function(str)
{
str = str.replace(/["]{1}/gi, "");
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, "");
// 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;
}
}
return result;
};
EmpireBoard.Str.To_Integer = function(str, defaultValue)
{
// Support signed integers
var temp = ""+str;
temp = temp.replace(/[^-0-9]+/g, "");
temp = parseInt(temp,10);
if (((temp == undefined) || (""+temp == "NaN")) && (defaultValue != undefined))
{
return defaultValue;
}
return temp;
};
// decimalPoint = '.' or ','
EmpireBoard.Str.To_Float = function(str, defaultValue, decimalPoint)
{
if (decimalPoint == undefined) decimalPoint = this._decimalPoint;
// Support signed integers
var temp = ""+str;
if (decimalPoint == '.')
{
temp = temp.replace(/[^-0-9\.]+/g, "");
}
else if (decimalPoint == ',')
{
temp = temp.replace(/[^-0-9\,]+/g, "");
}
else
{
temp = temp.replace(/[^-0-9]+/g, "");
}
temp = Number(temp);
if (defaultValue != undefined && (temp == undefined || (""+temp == "NaN")))
{
return defaultValue;
}
return temp;
};
EmpireBoard.Str.Get_LocaleDecimalPoint = function()
{
var _cachedDecimalPoint = new Number(1.5).toLocaleString().substring(1, 2);
if (_cachedDecimalPoint == undefined || _cachedDecimalPoint == "")
{
_cachedDecimalPoint = ".";
}
return _cachedDecimalPoint;
};
EmpireBoard.Str.FormatFloatNumber = function(num, fracdigits, alwaysShowSign, decimalPoint)
{
if (fracdigits == undefined) fracdigits = 2;
if (alwaysShowSign == undefined) alwaysShowSign = false;
if (decimalPoint == undefined) decimalPoint = this._decimalPoint;
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 + decimalPoint + frac;
}
return negative + s;
};
EmpireBoard.Str.FormatBigNumber = function(num, alwaysShowSign, thousandSeparator)
{
if (alwaysShowSign == undefined) alwaysShowSign = false;
if (thousandSeparator == undefined) thousandSeparator = this._thousandSeparator;
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) + thousandSeparator + s.substring(i);
i -= 3;
}
return negative + s;
};
EmpireBoard.Str.FormatRemainingTime = function(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) ? this._timeunits_short_day:"";
loca['hour'] = (showunits) ? this._timeunits_short_hour:"";
loca['minute'] = (showunits) ? this._timeunits_short_minute:"";
loca['second'] = (showunits) ? this._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 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 += " " + EmpireBoard.Str.FormatFloatNumber((d % 86400) / 3600, 1) + "h";
}
}
return t;
}
EmpireBoard.Handlers =
{
_Parent: null
};
EmpireBoard.Handlers.Init = function(parent)
{
this._Parent = parent;
};
EmpireBoard.Handlers.Attach_Events = function()
{
// Common events
this.Attach_ChangeCity_Events();
this._Parent.Tooltip.Attach_Events();
if (this._Parent.DB.Options.Prefs.TABLE_BUILDINGS == true)
{
// Buildings table
this.Attach_BuildingsHeader_Events();
}
if (this._Parent.DB.Options.Prefs.TABLE_RESOURCES == true)
{
// Resources table
this.Attach_ArrivingGoods_Events();
}
if (this._Parent.DB.Options.Prefs.TABLE_ARMYFLEET == true)
{
// Army table
this.Attach_ArmyFleetHeader_Events();
this.Attach_Movements_Events();
this.Attach_Attacks_Events();
}
};
EmpireBoard.Handlers.Attach_ChangeCity_Events = function()
{
var self = this;
var nodes = this._Parent.DOM.Get_Nodes("//div[@id='"+this._Parent.MainID+"']//a[contains(@class,'changeCity')]");
for (var i = 0; i < nodes.snapshotLength; i++)
{
var node = nodes.snapshotItem(i);
if (current_city_id != parseInt(node.getAttribute("cityid")))
node.addEventListener('click', function(e) { return self.ChangeCity_Click_Event(e); }, false);
}
};
EmpireBoard.Handlers.ChangeCity_Click_Event = function(e)
{
var obj = e.srcElement ? e.srcElement:e.target;
obj.style.cursor="wait";
document.getElementsByTagName("body")[0].style.cursor="wait";
while (obj.hasAttribute('cityid') == false)
{
obj = obj.parentNode;
}
var city_id = obj.getAttribute("cityid");
return this._Parent.Ikariam.Change_currentCity(city_id);
};
EmpireBoard.Handlers.Attach_BuildingsHeader_Events = function()
{
var self = this;
var nodes = this._Parent.DOM.Get_Nodes("//div[@id='"+this._Parent.MainID+"']//th[contains(@class,'build_name')]");
for (var i = 0; i < nodes.snapshotLength; i++)
{
var node = nodes.snapshotItem(i);
node.addEventListener('mouseover', function(e) { self.BuildingName_MouseOver_Event(e); }, false);
node.addEventListener('mousemove', function(e) { self._Parent.Tooltip.mouseMove(e); }, false);
node.addEventListener('mouseout', function(e) { self._Parent.Tooltip.hide(e); }, false);
}
};
EmpireBoard.Handlers.BuildingName_MouseOver_Event = function(e)
{
if (!e) { e = window.event; }
var obj = e.srcElement ? e.srcElement : e.target;
while (obj.hasAttribute('building') == false)
{
obj = obj.parentNode;
}
var building_id = obj.getAttribute('building');
//window.status = 'building_id: '+building_id;
var tooltipHTML = this._Parent.Tooltip.innerHTML(this._Parent.Renders.BuildingName_Tooltip_Content(building_id));
this._Parent.Tooltip.show(tooltipHTML);
};
EmpireBoard.Handlers.Attach_ArrivingGoods_Events = function()
{
var self = this;
var nodes = this._Parent.DOM.Get_Nodes("//div[@id='"+this._Parent.MainID+"']//*[contains(@class,'MoreGoods')]");
for (var i = 0; i < nodes.snapshotLength; i++)
{
var node = nodes.snapshotItem(i);
node.addEventListener('mouseover', function(e) { self.ArrivingGoods_MouseOver_Event(e); }, false);
node.addEventListener('mousemove', function(e) { self._Parent.Tooltip.mouseMove(e); }, false);
node.addEventListener('mouseout', function(e) { self._Parent.Tooltip.hide(e); }, false);
}
};
EmpireBoard.Handlers.ArrivingGoods_MouseOver_Event = function(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 = this._Parent.Tooltip.innerHTML(this._Parent.Renders.ArrivingGoods_Tooltip_Content(city_id, resName));
this._Parent.Tooltip.show(tooltipHTML);
};
EmpireBoard.Handlers.Attach_ArmyFleetHeader_Events = function()
{
var self = this;
var nodes = this._Parent.DOM.Get_Nodes("//div[@id='"+this._Parent.MainID+"']//th[contains(@class,'unit_name')]");
for (var i = 0; i < nodes.snapshotLength; i++)
{
var node = nodes.snapshotItem(i);
node.addEventListener('mouseover', function(e) { self.UnitName_MouseOver_Event(e); }, false);
node.addEventListener('mousemove', function(e) { self._Parent.Tooltip.mouseMove(e); }, false);
node.addEventListener('mouseout', function(e) { self._Parent.Tooltip.hide(e); }, false);
}
};
EmpireBoard.Handlers.UnitName_MouseOver_Event = function(e)
{
if (!e) { e = window.event; }
var obj = e.srcElement ? e.srcElement : e.target;
while (obj.hasAttribute('unit') == false)
{
obj = obj.parentNode;
}
var unit_id = obj.getAttribute('unit');
//window.status = 'unit_id: '+unit_id;
var tooltipHTML = this._Parent.Tooltip.innerHTML(this._Parent.Renders.UnitName_Tooltip_Content(unit_id));
this._Parent.Tooltip.show(tooltipHTML);
};
EmpireBoard.Handlers.Attach_Movements_Events = function()
{
var self = this;
var nodes = this._Parent.DOM.Get_Nodes("//div[@id='"+this._Parent.MainID+"']//*[contains(@class,'Movements')]");
for (var i = 0; i < nodes.snapshotLength; i++)
{
var node = nodes.snapshotItem(i);
node.addEventListener('mouseover', function(e) { self.Movements_MouseOver_Event(e); }, false);
node.addEventListener('mousemove', function(e) { self._Parent.Tooltip.mouseMove(e); }, false);
node.addEventListener('mouseout', function(e) { self._Parent.Tooltip.hide(e); }, false);
}
};
EmpireBoard.Handlers.Movements_MouseOver_Event = function(e)
{
if (!e) { e = window.event; }
var obj = e.srcElement ? e.srcElement : e.target;
while (obj.hasAttribute('cityid') == false)
{
obj = obj.parentNode;
}
var city_id = parseInt(obj.getAttribute('cityid'));
//window.status = 'Movements of city by ID : '+city_id;
var tooltipHTML = this._Parent.Tooltip.innerHTML(this._Parent.Renders.Movements_Tooltip_Content(city_id));
this._Parent.Tooltip.show(tooltipHTML);
};
EmpireBoard.Handlers.Attach_Attacks_Events = function()
{
var self = this;
var nodes = this._Parent.DOM.Get_Nodes("//div[@id='"+this._Parent.MainID+"']//*[contains(@class,'Attacks')]");
for (var i = 0; i < nodes.snapshotLength; i++)
{
var node = nodes.snapshotItem(i);
node.addEventListener('mouseover', function(e) { self.Attacks_MouseOver_Event(e); }, false);
node.addEventListener('mousemove', function(e) { self._Parent.Tooltip.mouseMove(e); }, false);
node.addEventListener('mouseout', function(e) { self._Parent.Tooltip.hide(e); }, false);
}
};
EmpireBoard.Handlers.Attacks_MouseOver_Event = function(e)
{
if (!e) { e = window.event; }
var obj = e.srcElement ? e.srcElement : e.target;
while (obj.hasAttribute('cityid') == false)
{
obj = obj.parentNode;
}
var city_id = parseInt(obj.getAttribute('cityid'));
var tooltipHTML = this._Parent.Tooltip.innerHTML(this._Parent.Renders.Attacks_Tooltip_Content(city_id));
this._Parent.Tooltip.show(tooltipHTML);
};
EmpireBoard.Handlers.Start_Timers = function()
{
// Common real-time counters
window.setInterval(myTimeCounterF, 1100);
if (this._Parent.DB.Options.Prefs.TABLE_RESOURCES == true)
{
// Resources timers
window.setInterval(realtimeFactDisplayF, 10000);
}
};
EmpireBoard.Handlers.Deployment_Submit_Event = function(e)
{
var dType = this._Parent.DOM.Get_First_Node_Value("//form[@id='deploymentForm']/input[@name='function']", '');
// Update units garrisoned
var city = getCity(current_city_id);
var duList = this._Parent.DOM.Get_Nodes("//form[@id='deploymentForm']//ul[@class='assignUnits']/li");
if (duList.snapshotLength >= 1)
{
for (var i = 0; i < duList.snapshotLength; i++)
{
var uLI = duList.snapshotItem(i);
var unit_id = 'unit '+uLI.className;
if (this._Parent.Ikariam.Is_Version('0.4.4'))
{
var oAmount = this._Parent.Str.To_Integer(uLI.childNodes[1].childNodes[3].textContent);
var dAmount = this._Parent.Str.To_Integer(uLI.childNodes[3].value,0);
}
else if (this._Parent.Ikariam.Is_Version('0.4.3'))
{
var oAmount = this._Parent.Str.To_Integer(uLI.childNodes[3].textContent);
var dAmount = this._Parent.Str.To_Integer(uLI.childNodes[13].value,0);
}
else
{
var oAmount = this._Parent.Str.To_Integer(uLI.childNodes[3].textContent);
if (dType == 'deployFleet')
{
var dAmount = this._Parent.Str.To_Integer(uLI.childNodes[7].value,0);
}
else
{
var dAmount = this._Parent.Str.To_Integer(uLI.childNodes[9].value,0);
}
}
if (city.units[unit_id] == undefined) city.units[unit_id] = {};
city.units[unit_id].count = oAmount - dAmount;
this._Parent.Log.Add(unit_id+": oAmount="+oAmount+" dAmount="+dAmount);
}
}
setViewRqTime('finances');
setViewRqTime('militaryAdvisorMilitaryMovements');
this._Parent.DB.Save();
};
function myTimeCounterF()
{
var currenttime = new Date().getTime();
var cs = EmpireBoard.DOM.Get_Nodes("//*[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 = "";
s = EmpireBoard.Str.FormatRemainingTime(hdata*1000);
c.innerHTML = s;
}
else
{
c.innerHTML = "-";
}
}
}
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 = EmpireBoard.Str.FormatBigNumber(maxAmount);
c.color = "#ff0000";
}
else
{
c.innerHTML = EmpireBoard.Str.FormatBigNumber(currAmount);
//+' ('+Math.floor((currenttime-startTime)/1000)+' s)'
}
}
}
return (counters.snapshotLength > 0);
}
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);
}
};
// the tooltip object
EmpireBoard.Tooltip =
{
// setup properties of tooltip object
_Parent: null,
id: "TooltipContainer",
idParent: "",
offsetx: 10,
offsety: 10,
_x: 0,
_y: 0,
_tooltipElement: null,
_cache: {},
cacheIDprefix: 'tooltip',
attributeName: 'tooltip',
_cacheLenght: 0
};
EmpireBoard.Tooltip.Init = function(parent, IdName, IdParent, CachePrefix)
{
if (parent != undefined) this._Parent = parent;
if (IdName != undefined) this.id = IdName;
if (IdParent != undefined) this.idParent = IdParent;
if (CachePrefix != undefined) this.cacheIDprefix = CachePrefix;
};
EmpireBoard.Tooltip.CreateContainer = function(IdName, IdParent)
{
if (IdName != undefined) this.id = IdName;
if (IdParent != undefined) this.idParent = IdParent;
// create tooltip DIV
var body = document.getElementById(this.idParent);
var tooltipdiv = document.createElement('div');
tooltipdiv.id = this.id;
tooltipdiv.innerHTML = "";
tooltipdiv.style.visibility = 'hidden';
body.appendChild(tooltipdiv);
};
EmpireBoard.Tooltip.Set_CachedContent = function(Content, Title)
{
var TooltipID = '';
if ((Content != undefined) && (Content != ''))
{
this._cacheLenght++;
TooltipID = ''+this.cacheIDprefix+this._cacheLenght;
this._cache[TooltipID] = {};
this._cache[TooltipID].content = ''+Content;
if (Title == undefined) Title = '';
this._cache[TooltipID].title = ''+Title;
}
return TooltipID;
};
EmpireBoard.Tooltip.CreateAs_HTMLattribute = function(Content, Title)
{
var TooltipID = this.Set_CachedContent(Content,Title);
if (TooltipID != '')
{
return ' '+this.attributeName+'="'+TooltipID+'"';
}
else
{
return '';
}
};
EmpireBoard.Tooltip.CreateAs_HTMLelement = function(elementContent, TooltipContent, TooltipTitle)
{
if ((elementContent == undefined) || (elementContent == ''))
{
return '';
}
else
{
var TooltipID = this.Set_CachedContent(TooltipContent,TooltipTitle);
if (TooltipID != '')
{
return '<span '+this.attributeName+'="'+TooltipID+'">'+elementContent+'</span>';
}
else
{
return ''+elementContent;
}
}
};
EmpireBoard.Tooltip.Attach_Events = function()
{
// Require: DOM
var self = this;
var nodes = this._Parent.DOM.Get_Nodes("//*[contains(@"+this.attributeName+",'"+this.cacheIDprefix+"')]");
for (var i = 0; i < nodes.snapshotLength; i++)
{
var node = nodes.snapshotItem(i);
node.addEventListener('mouseover', function(e) { self.mouseOver(e); }, false);
node.addEventListener('mousemove', function(e) { self.mouseMove(e); }, false);
node.addEventListener('mouseout', function(e) { self.hide(e); }, false);
}
};
EmpireBoard.Tooltip.mouseOver = function(e)
{
if (!e) { e = window.event; }
var obj = e.srcElement ? e.srcElement : e.target;
while (obj.hasAttribute(this.attributeName) == false)
{
obj = obj.parentNode;
}
var TooltipID = obj.getAttribute(this.attributeName);
if (this._cache[TooltipID] != undefined)
{
var tooltipHTML = this.innerHTML(this._cache[TooltipID].content,this._cache[TooltipID].title);
this.show(tooltipHTML);
}
}
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>";
innerHTML = "<div class=TTContent>"+Title+Content+"</div>";
return innerHTML;
}
};
EmpireBoard.Tooltip.show = function (HTMLcontent)
{
if (document.getElementById)
{
this._tooltipElement = document.getElementById(this.id);
}
else if ( document.all )
{
this._tooltipElement = document.all[this.id].style;
}
this._tooltipElement.innerHTML = HTMLcontent;
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
{
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;
}
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;
}
};
// Manage translation
EmpireBoard.Intl =
{
_Parent: null,
_AppName: 'AnyApp',
_LangCode: '',
_LangDir: 'ltr'
};
EmpireBoard.Intl.Init = function(parent, AppName)
{
this._Parent = parent;
if (AppName != undefined) this._AppName = AppName;
};
// Get text to translate
EmpireBoard.Intl.TT = function(stringName, contextName, stringValues, appName)
{
if ((stringName != undefined) && (stringName != ''))
{
if ((contextName == undefined) || (contextName == '')) contextName = 'misc';
if ((appName == undefined) || (appName == '')) appName = this._AppName;
var stringResult = stringName;
switch(contextName)
{
case 'buildings':
if ((buildings[stringName] != undefined) && (buildings[stringName][0] != undefined))
stringResult = buildings[stringName][0];
break;
case 'buildings_short':
if ((buildings[stringName] != undefined) && (buildings[stringName][1] != undefined))
stringResult = buildings[stringName][1];
break;
case 'army_units':
if (config["unitnames"] == undefined)
{
}
else if (config["unitnames"][stringName] != undefined)
{
stringResult = config["unitnames"][stringName];
}
else if (config["unitnames"]['unit '+stringName] != undefined)
{
stringResult = config["unitnames"]['unit '+stringName];
}
break;
case 'fleet_units':
if (config["unitnames"] == undefined)
{
}
else if (config["unitnames"][stringName] != undefined)
{
stringResult = config["unitnames"][stringName];
}
else if (config["unitnames"]['unit '+stringName] != undefined)
{
stringResult = config["unitnames"]['unit '+stringName];
}
break;
case 'misc':
default:
if (texts[stringName] != undefined)
stringResult = texts[stringName];
break;
}
if ((stringValues != undefined) && (stringValues != ''))
{
stringResult = this._Parent.Str.ValuesReplace(stringResult, stringValues);
}
return this._Parent.Str.Trim(stringResult);
}
else return '';
};
EmpireBoard.Intl.Languages = function()
{
var languages = {
"": "Automatic",
ae: "العربية",
bg: "Bulgarian",
cn: "Chinese",
tw: "Chinese (traditional)",
cz: "Czech",
dk: "Danish",
de: "Deutsch",
nl: "Dutch",
en: "English",
es: "Espanol",
fi: "Finnish",
fr: "Français",
gr: "Greek",
il: "Hebrew",
it: "Italiano",
lv: "Latvian",
hu: "Magyar",
fa: "Persian",
pl: "Polski",
pt: "Portuguese",
ro: "Romanian",
ru: "Russian",
rs: "Serbian",
sk: "Slovak",
sl: "Slovenian",
se: "Swedish",
tr: "Turkish",
ua: "Ukrainian",
vn: "Vietnamese"
};
return languages;
};
EmpireBoard.Intl.SetLanguage = function(LangCode)
{
if (LangCode == undefined)
{
LangCode = '';
}
if (LangCode == '')
{
LangCode = this._Parent.Ikariam.Language();
}
if (LangCode == '')
{
var Host = this._Parent.Ikariam.Host();
var arr = Host.split("\.");
LangCode = arr[arr.length - 1];
if (LangCode == "com" && arr.length == 4)
{
//for example: http://s1.ba.ikariam.com
LangCode = arr[1];
}
if ((LangCode == 'com') || (LangCode == 'org') || (LangCode == 'net')) LangCode = 'en';
}
if (LangCode == '')
{
LangCode = 'en';
}
this._Parent.Log.Add('Set language code: '+LangCode);
this._LangCode = LangCode;
};
EmpireBoard.Intl.LangCode = function()
{
if ((this._LangCode == undefined) || (this._LangCode == null) || (this._LangCode == ''))
{
this.SetLanguage('');
}
return this._LangCode;
};
EmpireBoard.Intl.LangDir = function()
{
if ((this._LangDir == undefined) || (this._LangDir == null) || (this._LangDir == ''))
{
this._LangDir = 'ltr';
}
// Todo: detect like http://userscripts.org/scripts/diff/87680/326530
return this._LangDir;
};
EmpireBoard.Intl.Load_LocalizedTexts = function()
{
switch(this._LangCode)
{
case 'ae':
case 'eg':
case 'sa':
this.Load_Texts_AE();
break;
case 'bg':
this.Load_Texts_BG();
break;
case 'cn':
this.Load_Texts_CN();
break;
case 'cz':
this.Load_Texts_CZ();
break;
case 'de':
this.Load_Texts_DE();
break;
case 'dk':
this.Load_Texts_DK();
break;
case 'es':
case 'ar':
case 'mx':
case 'cl':
case 'co':
case 've':
case 'pe':
this.Load_Texts_ES();
break;
case 'fi':
this.Load_Texts_FI();
break;
case 'fr':
this.Load_Texts_FR();
break;
case 'gr':
this.Load_Texts_GR();
break;
case 'hu':
this.Load_Texts_HU();
break;
case 'il':
this.Load_Texts_IL();
break;
case 'ir':
case 'fa':
this.Load_Texts_FA();
break;
case 'it':
this.Load_Texts_IT();
break;
case 'lv':
this.Load_Texts_LV();
break;
case 'nl':
this.Load_Texts_NL();
break;
case 'pk':
// Todo
this.Load_Texts_PK();
break;
case 'pl':
this.Load_Texts_PL();
break;
case 'pt':
case 'br':
this.Load_Texts_PT();
break;
case 'ro':
this.Load_Texts_RO();
break;
case 'rs':
this.Load_Texts_RS();
break;
case 'ru':
this.Load_Texts_RU();
break;
case 'se':
this.Load_Texts_SE();
break;
case 'sk':
this.Load_Texts_SK();
break;
case 'sl':
case 'si':
this.Load_Texts_SL();
break;
case 'tr':
this.Load_Texts_TR();
break;
case 'tw':
case 'hk':
this.Load_Texts_TW();
break;
case 'ua':
this.Load_Texts_UA();
break;
case 'vn':
this.Load_Texts_VN();
break;
case 'ba':
case 'yu':
// Todo
case 'by':
// Todo
case 'ee':
// Todo
case 'id':
// Todo
case 'lt':
// Todo
case 'ph':
// Todo
case 'en':
case 'us':
case 'uk':
case 'org':
case 'com':
case 'net':
default:
this.Load_Texts_EN();
break;
}
if (langtype == "rf")
{
this._LangDir = 'rtl';
}
else
{
this._LangDir = 'ltr';
}
};
EmpireBoard.Intl.Load_Texts_EN = function()
{
langtype = ""; // Set "rf" for Rigth-to-Left languages, or leave blank
// Set short building name into second field
buildings = {
"townHall" : ["Town Hall", "T. Hall"],
"temple" : ["Temple", "Temple"],
"academy" : ["Academy", "Academy"],
"port" : ["Trading Port", "Port"],
"shipyard" : ["Shipyard", "Shipyard"],
"warehouse" : ["Warehouse", "Warehouse"],
"dump" : ["Dump", "Dump"],
"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 = {
"Upkeep" : "Upkeep",
"Growth" : "Growth",
"Research" : "Research",
"cityName" : "Cities",
"currentlyBuilding" : "Currently building",
"summary" : "Summary:",
"hide_settings" : "Hide settings",
"show_settings" : "Show settings",
"Population" : "Population",
"finishedBuilding" : "Finished building",
"Incomes" : "Incomes",
"Trading" : "Trading",
"Wood" : "Wood",
"Wine" : "Wine",
"Marble" : "Marble",
"Crystal" : "Crystal",
"Sulfur" : "Sulfur"
};
};
EmpireBoard.Intl.Load_Texts_AE = function()
{
//by wa7d and Moshakes
langtype = "rf";
buildings = {
"townHall" : ["مستوى البلدية", "البلدية"],
"temple" : ["مستوى المركز", "مركز"],
"academy" : ["مستوى الاكاديمية", "الاكاديمية"],
"port" : ["مستوى المرفأ", "المرفأ"],
"shipyard" : ["مستوى حوض السفن", "حوض السفن"],
"warehouse" : ["مستوى المخزن", "المخزن"],
"dump" : ["مستوى المستودع", "مستودع"],
"wall" : ["مستوى السور", "السور"],
"tavern" : ["مستوى الاستراحة", "الاستراحة"],
"museum" : ["مستوى المتحف", "المتحف"],
"palace" : ["مستوى القصر", "القصر"],
"palaceColony" : ["مستوى قائم مقام", "قائم مقام"],
"embassy" : ["مستوى السفارة", "السفارة"],
"branchOffice" : ["مستوى السوق", "السوق"],
"safehouse" : ["مستوى المخبأ", "المخبأ"],
"barracks" : ["مستوى الثكنة", "الثكنة "],
"workshop" : ["مستوى المختبر", "المختبر"],
"carpentering" : ["انخفاض في تكلفة الخشب", "النجار"],
"forester" : ["إنتاج الخشب", "الحطاب"],
"stonemason" : ["إنتاج الرخام", "الحجار"],
"glassblowing" : ["نافخ الزجاج", "نافخ الزجاج"],
"winegrower" : ["إنتاج العنب", "مزرعة"],
"alchemist" : ["الكيمائي", "الكيمائي"],
"architect" : ["انخفاض في تكلفة الرخام", "المهندس"],
"optician" : ["انخفاض في تكلفة البلور", "صانع البصريات"],
"vineyard" : ["تخفيض تكلفة العنب", "معصرة"],
"fireworker" : ["عامل النار", "البارود"]
};
texts = {
"Upkeep":"التكاليف",
"Growth" : "النمو",
"cityName": "المدينة",
"currentlyBuilding": "أعمال بناء",
"summary": "الإجمالي",
"hide_settings": "إخفاء الخيارات",
"show_settings": "إظهار الخيارات",
"Population": "السكان",
"Research": "الابحاث",
"finishedBuilding": "مباني منجزة",
"Incomes":"الذهب",
"Trading":"التجارة",
"Wood": "الخشب",
"Wine": "العنب",
"Marble": "الرخام",
"Crystal": "البلور",
"Sulfur": "الكبريت"
};
};
EmpireBoard.Intl.Load_Texts_BG = function()
{
//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" : "Популация",
"finishedBuilding" : "Завършена",
"Incomes" : "Доходи",
"Trading" : "Търговия",
"Wood" : "Дърво",
"Wine" : "Вино",
"Marble" : "Мрамор",
"Crystal" : "Кристал",
"Sulfur" : "Сяра"
};
};
EmpireBoard.Intl.Load_Texts_CN = function()
{
//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": "人口",
"finishedBuilding": "建造完成","Incomes":"收入","Trading":"交易",
"Wood": "木材", "Wine": "葡萄", "Marble": "大理石", "Crystal": "水晶", "Sulfur": "硫磺"
};
};
EmpireBoard.Intl.Load_Texts_CZ = function()
{
//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",
"finishedBuilding" : "Dokončené stavby",
"Incomes" : "Příjmy",
"Trading" : "Obchod",
"Wood" : "Dřevo",
"Wine" : "Víno",
"Marble" : "Mramor",
"Crystal" : "Sklo",
"Sulfur" : "Síra"
};
};
EmpireBoard.Intl.Load_Texts_DK = function()
{
// Danish translation, thank to LGO
langtype = "";
buildings = {
"townHall" : ["Rådhus", "Rådhus"],
"temple" : ["Temple", "Tempel"],
"academy" : ["Akademi", "Akademi"],
"port" : ["Handelshavn", "Havn"],
"shipyard" : ["Skipsværft", "Værft"],
"warehouse" : ["Lagerbygning", "Lager"],
"wall" : ["Bymur", "Mur"],
"tavern" : ["Værtshus", "Kro"],
"museum" : ["Museum", "Museum"],
"palace" : ["Palads", "Palads"],
"palaceColony" : ["Guvernørens residens", "Guvernør"],
"embassy" : ["Ambassade", "Ambassade"],
"branchOffice" : ["Handelsstation", "Handel"],
"safehouse" : ["Skjulested", "Spion"],
"barracks" : ["Kaserne", "Kaserne"],
"workshop" : ["Værksted", "Værksted"],
"carpentering" : ["Tømrer", "Tømrer"],
"forester" : ["Skovfodged", "Skov"],
"stonemason" : ["Stenhugger", "Sten"],
"glassblowing" : ["Glaspuster", "Glas"],
"winegrower" : ["Vinplanter", "Vin"],
"alchemist" : ["Alkymist", "Alkymist"],
"architect" : ["Arkitekt", "Arkitekt"],
"optician" : ["Optiker", "Optiker"],
"vineyard" : ["Vinpresse", "Vin"],
"fireworker" : ["Fyrværkerifabrik", "Fyrværk."]
};
texts = {
"Upkeep" :"Vedligehold",
"cityName": "Bynavn",
"currentlyBuilding": "Bygger nu",
"summary": "Total",
"hide_settings": "Gem indstillinger", "show_settings": "Vis indstillinger",
"Population": "Befolkning",
"Research": "Forskning",
"finishedBuilding": "Færdig bygget","Incomes":"Inkomst","Trading":"Handler",
"Wood": "Træ", "Wine": "Vin", "Marble": "Marmor", "Crystal": "Krystal", "Sulfur": "Svovl"
};
};
EmpireBoard.Intl.Load_Texts_DE = function()
{
//german translation, thanks to Schneppi & xkaaay
langtype = "";
buildings = {
"townHall" : ["Rathaus", "Rathaus"],
"temple" : ["Tempel", "Tempel"],
"academy" : ["Akademie", "Akademie"],
"port" : ["Handelshafen", "Handelshafen"],
"shipyard" : ["Schiffswerft", "Schiffswerft"],
"warehouse" : ["Lagerhaus", "Lagerhaus"],
"dump" : ["Halde", "Halde"],
"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 = {
"Upkeep" : "Unterhalt",
"cityName" : "Stadtname",
"currentlyBuilding" : "Zur Zeit im Bau",
"summary" : "Gesamt",
"hide_settings" : "Verstecke Optionen",
"show_settings" : "Zeige Optionen",
"Population" : "Bevölkerung",
"finishedBuilding" : "Bau abgeschlossen",
"Incomes" : "Einkommen",
"Trading" : "Handel",
"Wood" : "Baumaterial",
"Wine" : "Wein",
"Marble" : "Marmor",
"Crystal" : "Kristallglas",
"Sulfur" : "Schwefel",
"Growth" : "Wachstum",
"Research" : "Forschung"
};
};
EmpireBoard.Intl.Load_Texts_ES = function()
{
//Spanish translation, thanks to dragondeluz, graff86, Crom
langtype = "";
buildings = {
"townHall" : ["Intendencia", "Intendencia"],
"temple" : ["Templo", "Templo"],
"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 = {
"Upkeep" :"Costes",
"cityName": "Ciudad", "currentlyBuilding": "Construyendo", "summary": "Totales",
"hide_settings": "Ocultar opciones", "show_settings": "Mostrar opciones",
"Population": "Población",
"Research": "Investigación",
"finishedBuilding": "Edificios terminados","Incomes":"Ingresos","Trading":"Comercio",
"Wood": "Madera",
"Wine": "Vino",
"Marble": "Mármol",
"Crystal": "Cristal",
"Sulfur": "Azufre"
};
};
EmpireBoard.Intl.Load_Texts_FA = function()
{
//Persian translation by elm10
langtype = "rf";
buildings = {
"townHall" : ["شهرداری", "شهرداری"],
"temple" : ["معبد", "معبد"],
"academy" : ["دانشگاه", "دانشگاه"],
"port" : ["بندرگاه تجاری", "بندرگاه"],
"shipyard" : ["کارگاه کشتی سازی", "کارگاه کشتی سازی"],
"warehouse" : ["انبار", "انبار"],
"dump" : ["انبار موقت", "انبار موقت"],
"wall" : ["دیوار", "دیوار"],
"tavern" : ["آبمیوه فروشی", "آبمیوه فروشی"],
"museum" : ["موزه", "موزه"],
"palace" : ["قصر", "قصر"],
"palaceColony" : ["مقر فرمانداری", "فرماندار"],
"embassy" : ["سفارت", "سفارت"],
"branchOffice" : ["محل تجارت", "تجارت"],
"safehouse" : ["مخفیگاه", "مخفیگاه"],
"barracks" : ["سربازخانه", "سربازخانه"],
"workshop" : ["کارگاه", "کارگاه"],
"carpentering" : ["نجاری", "نجار"],
"forester" : ["خانه جنگلبان", "جنگلبان"],
"stonemason" : ["سنگ تراش", "سنگ کار"],
"glassblowing" : ["شیشه گری", "شیشه گر"],
"winegrower" : ["کارخانه آب انگور سازی", "آب انگور ساز"],
"alchemist" : ["شیمیدان", "شیمیدان"],
"architect" : ["معمار", "معمار"],
"optician" : ["عینک سازی", "عینک ساز"],
"vineyard" : ["انبار آب انگور", "انبار آب انگور"],
"fireworker" : ["منطقه آزمایش آتش بازی", "آتش باز"]
};
texts = {
"Upkeep" : "هزینه نگهداری و تعمیر",
"Growth" : "رشد",
"Research" : "تحقیق",
"cityName" : "شهر ها",
"currentlyBuilding" : "در حال ساخت",
"summary" : "خلاصه:",
"hide_settings" : "پنهان کردن تنظیمات",
"show_settings" : "نمایش تنظیمات",
"Population" : "جمعیت",
"finishedBuilding" : "ساختمان تمام شده",
"Incomes" : "در آمد",
"Trading" : "تجارت",
"Wood" : "چوب",
"Wine" : "آب انگور",
"Marble" : "سنگ",
"Crystal" : "کریستال",
"Sulfur" : "گوگرد"
};
};
EmpireBoard.Intl.Load_Texts_FI = function()
{
//Finnish translation by DeFe
langtype = "";
buildings = {
"townHall" : ["Kaupungintalo", "K. Talo"],
"temple" : ["Temppeli", "Temppeli"],
"academy" : ["Akatemia", "Akatemia"],
"port" : ["Kauppasatama", "Satama"],
"shipyard" : ["Telakka", "Telakka"],
"warehouse" : ["Varasto", "Varasto"],
"dump" : ["Säilytysalue", "Säilytysalue"],
"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 = {
"Upkeep": "Ylläpito",
"Growth": "Kasvu",
"cityName": "Kaupungin nimi",
"currentlyBuilding": "Rakentumassa",
"summary": "Yhteenveto",
"hide_settings": "Piilota asetukset",
"show_settings": "Näytä asetukset",
"Population": "Populaatio",
"finishedBuilding": "Rakennus valmis",
"Incomes":"Tulot",
"Trading":"kaupankäynti",
"Wood": "Puu",
"Wine": "Viini",
"Marble": "Marmori",
"Crystal": "Kristalli",
"Sulfur": "Rikki"
};
};
EmpireBoard.Intl.Load_Texts_FR = function()
{
//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"],
"dump" : ["Dépôt", "Dépôt"],
"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 = {
"Upkeep" : "Coûts",
"Growth" : "Croissance",
"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"
};
};
EmpireBoard.Intl.Load_Texts_GR = function()
{
//greek translation, thanks to panospap and Napoleon I
langtype = "";
buildings = {
"townHall" : ["Δημαρχείο", "Δημαρχείο"],
"temple" : ["Ναός", "Ναός"],
"academy" : ["Ακαδημία", "Ακαδημία"],
"port" : ["Εμπορικός Λιμένας", "Εμπορικός Λιμένας"],
"shipyard" : ["Ναυπηγείο", "Ναυπηγείο"],
"warehouse" : ["Αποθήκη Εμπορευμάτων", "Αποθήκη Εμπορευμάτων"],
"dump" : ["Αλάνα", "Αλάνα"],
"wall" : ["Τείχη της Πόλης", "Τείχη της Πόλης"],
"tavern" : ["Ταβέρνα", "Ταβέρνα"],
"museum" : ["Μουσείο", "Μουσείο"],
"palace" : ["Παλάτι", "Παλάτι"],
"palaceColony" : ["Η Κατοικία του Κυβερνήτη", "Η Κατοικία του Κυβερνήτη"],
"embassy" : ["Πρεσβεία", "Πρεσβεία"],
"branchOffice" : ["Θέση Εμπορικών Συναλλαγών", "Θέση Εμπορικών Συναλλαγών"],
"safehouse" : ["Κρησφύγετο", "Κρησφύγετο"],
"barracks" : ["Στρατώνες", "Στρατώνες"],
"workshop" : ["Εργαστήριο", "Εργαστήριο"],
"carpentering" : ["Ξυλουργός", "Ξυλουργός"],
"forester" : ["Σπίτι Ξυλοκόπου", "Σπίτι Ξυλοκόπου"],
"stonemason" : ["Κτίριο Λατομείου", "Κτίριο Λατομείου"],
"glassblowing" : ["Υαλουργείο", "Υαλουργείο"],
"winegrower" : ["Αποστακτήριο", "Αποστακτήριο"],
"alchemist" : ["Πύργος Αλχημιστή", "Πύργος Αλχημιστή"],
"architect" : ["Αρχιτεκτονικό Γραφείο", "Αρχιτεκτονικό Γραφείο"],
"optician" : ["Οπτικός", "Οπτικός"],
"vineyard" : ["Πιεστήριο Σταφυλιού", "Πιεστήριο Σταφυλιού"],
"fireworker" : ["Περιοχή Δοκιμών Πυροτεχνημάτων", "Περιοχή Δοκιμών Πυροτεχνημάτων"]
};
texts = {
"Upkeep":"Συντήρηση",
"Growth" : "Ικανοποίηση",
"cityName": "Όνομα Πόλης",
"currentlyBuilding": "Αναβαθμίζετε τώρα",
"summary": "Σύνολο",
"hide_settings": "Κρύψε ρυθμίσεις",
"show_settings": "Εμφάνισε ρυθμίσεις",
"Population": "Πληθυσμός",
"Research": "Έρευνες",
"finishedBuilding": "Ολοκληρωμένη Αναβαθμιση",
"Incomes":"Εισοδήματα",
"Trading":"Εμπόριο",
"Wood": "Οικοδομικό Υλικό",
"Wine": "Κρασί",
"Marble": "Μάρμαρο",
"Crystal": "Κρύσταλλο",
"Sulfur": "Θείο"
};
};
EmpireBoard.Intl.Load_Texts_HU = function()
{
// Thank Luzer
langtype = "";
buildings = {
"townHall" : ["Városháza", "Városháza"],
"temple" : ["Templom", "Templom"],
"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"],
"dump" : ["Nyersanyag depó", "Depó"]
};
texts = {
"Growth" : "Növekedés",
"Upkeep" :"Fenntartás",
"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": "Fejlesztés",
"finishedBuilding": "Finished building",
"Incomes":"Bevételek",
"Trading":"Trading",
"Wood": "Építőanyag",
"Wine": "Bor",
"Marble": "Márvány",
"Crystal": "Kristály",
"Sulfur": "Kénpor"
};
};
EmpireBoard.Intl.Load_Texts_IL = function()
{
//hebrew translation, thank Refael Ackermann, Yaakov Rothmann
langtype = "rf";
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" : ["זיקוקים", "זיקוקים"],
"dump" : ["מאגר", "לפרק"]
};
texts = {
"Upkeep" : "אחזקה",
"Growth" : "גידול",
"cityName": "שם עיר",
"currentlyBuilding": "בבניה",
"summary": "סיכום",
"hide_settings": "הסתר אפשרויות",
"show_settings": "הצג אפשרויות",
"Population": "אוכלוסיה",
"Research" : "מחקר",
"finishedBuilding": "הסתימה בניה",
"Incomes":"הכנסה",
"Trading":"סוחר",
"Wood": "עץ",
"Wine": "יין",
"Marble": "שיש",
"Crystal": "קריסטל",
"Sulfur": "גופרית"
};
};
EmpireBoard.Intl.Load_Texts_IT = function()
{
//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",
"finishedBuilding": "Costruzione completata","Incomes":"Saldo oro",
"Wood": "Legno", "Wine": "Vino", "Marble": "Marmo", "Crystal": "Cristallo", "Sulfur": "Zolfo"
};
};
EmpireBoard.Intl.Load_Texts_LV = function()
{
//Latvian translation by aezaurs/sauron
langtype = "";
buildings = {
"townHall" : ["Rātsnams", "Rātsnams"],
"temple" : ["Templis", "Templis"],
"academy" : ["Akadēmija", "Akadēmija"],
"port" : ["Osta", "Osta"],
"shipyard" : ["Kuģu būvētava", "Kuģu būvētava"],
"warehouse" : ["Noliktava", "Noliktava"],
"wall" : ["Mūris", "Mūris"],
"tavern" : ["Krogs", "Krogs"],
"museum" : ["Muzejs", "Muzejs"],
"palace" : ["Pils", "Pils"],
"palaceColony" : ["Gubernātora rezidence", "Gubernātora rezidence"],
"embassy" : ["Vēstniecība", "Vēstniecība"],
"branchOffice" : ["Tirgus", "Tirgus"],
"safehouse" : ["Paslēptuve", "Paslēptuve"],
"barracks" : ["Kazarmas", "Kazarmas"],
"workshop" : ["Darbnīca", "Darbnīca"],
"carpentering" : ["Namdaris", "Namdaris"],
"forester" : ["Mežsarga māja", "Mežsargs"],
"stonemason" : ["Akmeņkalis", "Akmeņkalis"],
"glassblowing" : ["Stikla pūtējs", "Stiklinieks"],
"winegrower" : ["Vīna audzētājs", "Vīna audzētājs"],
"alchemist" : ["Alhīmiķa Tornis", "Alhīmiķa Tornis"],
"architect" : ["Arhitekta Ofiss", "Arhitekts"],
"optician" : ["Optiķis", "Optiķis"],
"vineyard" : ["Vīna Gatavotājs", "Vīna Gatavotājs"],
"fireworker" : ["Uguņošanas izmēģinājumu apgabals", "Uguņošanas apg."]
};
texts = {
"Upkeep" :"Uzturēšana",
"cityName" : "Pilsēta",
"currentlyBuilding" : "Šobrīd ceļās",
"summary" : "Kopā",
"hide_settings" : "Slēpt iestatījumus",
"show_settings" : "Rādīt iestatījumus",
"Population" : "Apdzīvotība",
"Research": "Izpēte",
"finishedBuilding" : "Pabeigta celtniecība",
"Incomes" : "Zelts",
"Trading" : "Tirzniecība",
"Wood" : "Koks",
"Wine" : "Vīns",
"Marble" : "Marmors",
"Crystal" : "Kristāls",
"Sulfur" : "Sērs"
};
};
EmpireBoard.Intl.Load_Texts_NL = function()
{
//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",
"Population": "Inwoners", "finishedBuilding": "Klaar","Incomes":"Inkomsten","Trading":"Handel",
"Wood": "Hout", "Wine": "Wijn", "Marble": "Marmer", "Crystal": "Glas", "Sulfur": "Zwavel"
};
};
EmpireBoard.Intl.Load_Texts_PK = function()
{
// Todo
this.Load_Texts_EN();
langtype = "rf";
};
EmpireBoard.Intl.Load_Texts_PL = function()
{
// thanks to Syjamek, Patibar, kiler88
langtype = "";
buildings = {
"townHall" : ["Ratusz", "Ratusz"],
"temple" : ["Świątynia", "Świątynia"],
"academy" : ["Akademia", "Akademia"],
"port" : ["Port", "Port"],
"shipyard" : ["Stocznia", "Stocznia"],
"warehouse" : ["Magazyn", "Magazyn"],
"dump" : ["Składowisko", "Składowisko"],
"wall" : ["Mur", "Mur"],
"tavern" : ["Tawerna", "Tawerna"],
"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 = {
"Upkeep" : "Koszty utrzymania",
"Growth" : "Przyrost",
"Research" : "Badania",
"cityName" : "Miasta",
"currentlyBuilding" : "W budowie",
"summary" : "Suma",
"hide_settings" : "Ukryj ustawienia",
"show_settings" : "PokaĹĽ ustawienia",
"Population" : "Populacja",
"finishedBuilding" : "Budowa zakończona",
"Incomes" : "Bilans złota",
"Trading" : "Handel",
"Wood" : "Drewno",
"Wine" : "Wino",
"Marble" : "Marmur",
"Crystal" : "Kryształ",
"Sulfur" : "Siarka"
};
};
EmpireBoard.Intl.Load_Texts_PT = function()
{
// Portuguese translation, thanks to alpha tester, Mr. Burns, Jeanipoo
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" : ["Residência 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 Arquitetura", "Arquitetura"],
"optician" : ["Oculista", "Oculista"],
"vineyard" : ["Caves de Vinho", "Caves"],
"fireworker" : ["Fábrica de Pirotecnia", "Pirotecnia"]
};
texts = {
"Upkeep" : "Manutenção",
"Growth" : "Crescimento",
"Research" : "Pesquisa",
"cityName": "Cidades",
"currentlyBuilding": "Em Construçao",
"summary": "Sumário",
"hide_settings": "Ocultar Configuraçoes",
"show_settings": "Ver Configuraçoes",
"Population": "População",
"Incomes":"Rendimento",
"Wood": "Madeira",
"Wine": "Vinho",
"Marble": "Mármore",
"Crystal": "Cristal",
"Sulfur": "Enxofre"
};
};
EmpireBoard.Intl.Load_Texts_RO = function()
{
//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",
"finishedBuilding": "Constructie Finalizata","Incomes":"Economii","Trading":"Comert",
"Wood": "Lemn", "Wine": "Vin", "Marble": "Marmura", "Crystal": "Cristal", "Sulfur": "Sulf"
};
};
EmpireBoard.Intl.Load_Texts_RS = function()
{
//serbian translation by s-a-k-a
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 = {
"Upkeep" : "Одржавање",
"cityName" : "Градови",
"currentlyBuilding" : "Тренутно се гради",
"summary" : "Кратак преглед",
"hide_settings" : "Сакриј подешавања",
"show_settings" : "Прикажи подешавања",
"Population" : "Популација",
"Research" : "Истраживање",
"finishedBuilding" : "Завршена изградња",
"Incomes" : "Приходи",
"Trading" : "Трговински",
"Wood" : "Дрво",
"Wine" : "Вино",
"Marble" : "Мермер",
"Crystal" : "Кристал",
"Sulfur" : "Сумпор"
};
};
EmpireBoard.Intl.Load_Texts_RU = function()
{
//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 = {
"Upkeep": "Содерж.",
"Growth": "Рост",
"cityName": "Название города",
"currentlyBuilding": "Текущее строительство",
"summary": "Итого",
"hide_settings": "Скрыть настройки",
"show_settings": "Показать настройки",
"Population": "Население",
"Research": "Учёные",
"finishedBuilding": "Строительство завершено",
"Incomes":"Золото",
"Trading":"Торговля",
"Wood": "Стройматериалы",
"Wine": "Виноград",
"Marble": "Мрамор",
"Crystal": "Хрусталь",
"Sulfur": "Сера"
};
};
EmpireBoard.Intl.Load_Texts_SE = function()
{
// thank Dinfur
langtype = "";
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",
"finishedBuilding": "Byggt klart","Incomes":"Inkomster","Trading":"Handlar",
"Wood": "Trä", "Wine": "Vin", "Marble": "Marmor", "Crystal": "Kristall", "Sulfur": "Svavel"
};
};
EmpireBoard.Intl.Load_Texts_SK = function()
{
//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",
"finishedBuilding" : "Dokončené stavby",
"Incomes" : "Príjmy",
"Trading" : "Obchod",
"Wood" : "Drevo",
"Wine" : "Víno",
"Marble" : "Mramor",
"Crystal" : "Sklo",
"Sulfur" : "Síra"
};
};
EmpireBoard.Intl.Load_Texts_SL = function()
{
//Slovenian translation, thanks to Americano, MazaM, kayz1
langtype = "";
buildings = {
"townHall" : ["Mestna hiša", "Mestna"],
"temple" : ["Tempelj", "Tempelj"],
"academy" : ["Akademija", "Akademija"],
"port" : ["Trgovska luka", "Luka"],
"shipyard" : ["Ladjedelnica", "Ladjedelnica"],
"warehouse" : ["Skladišče", "Skladišče"],
"dump" : ["Depot", "Depot"],
"wall" : ["Obzidje", "Obzidje"],
"tavern" : ["Krčma", "Krčma"],
"museum" : ["Muzej", "Muzej"],
"palace" : ["Palača", "Palača"],
"palaceColony" : ["Guvernerjeva rezidenca", "Guverner"],
"embassy" : ["Ambasada", "Ambasada"],
"branchOffice" : ["Tržnica", "Tržnica"],
"safehouse" : ["Skrivališče", "Skrivališče"],
"barracks" : ["Barake", "Barake"],
"workshop" : ["Delavnica", "Delavnica"],
"carpentering" : ["Tesar", "Tesar"],
"forester" : ["Gozdarska hiša", "Gozdar"],
"stonemason" : ["Kamnoseška delavnica", "Kamnosek"],
"glassblowing" : ["Steklopihač", "Steklopihač"],
"winegrower" : ["Vinogradnik", "Vinogradnik"],
"alchemist" : ["Stolp alkimista", "Alkimist"],
"architect" : ["Pisarna arhitekta", "Arhitekt"],
"optician" : ["Optika", "Optika"],
"vineyard" : ["Vinska preša", "Preša"],
"fireworker" : ["Testno območje ognjemetov", "Pirotehnik"]
};
texts = {
"Upkeep" : "Vzdrževanje",
"Growth" : "Rast",
"Research" : "Raziskave",
"cityName" : "Ime mesta",
"currentlyBuilding" : "Gradi se",
"summary" : "Povzetek:",
"hide_settings" : "Skrij nastavitve",
"show_settings" : "Pokaži nastavitve",
"Population" : "Prebivalci",
"finishedBuilding" : "Zgrajeno",
"Incomes" : "Prihodki",
"Trading" : "Trgovanje",
"Wood" : "Gradbeni material",
"Wine" : "Vino",
"Marble" : "Marmor",
"Crystal" : "Kristal",
"Sulfur" : "Žveplo"
};
};
EmpireBoard.Intl.Load_Texts_TR = function()
{
//Turkish translation, thanks to NailBey, regular6
langtype = "";
buildings = {
"townHall" : ["Belediye Binası", "Belediye"],
"temple" : ["Tapınak", "Tapınak"],
"academy" : ["Akademi", "Akademi"],
"port" : ["Ticaret Limanı", "Liman"],
"shipyard" : ["Donanma Tersanesi", "Donanma "],
"warehouse" : ["Depo", "Depo"],
"dump" : ["Yığın Sahası", "Yığın Sahası"],
"wall" : ["Sur", "Sur"],
"tavern" : ["Taverna", "Taverna"],
"museum" : ["Müze", "Müze"],
"palace" : ["Saray", "Saray"],
"palaceColony" : ["Vali Konağı", "Vali Konağı"],
"embassy" : ["Büyükelçilik", "Büyükelçilik"],
"branchOffice" : ["Ticaret Merkezi", "Ticaret Merkezi"],
"safehouse" : ["İstihbarat Merkezi", "İstihbarat Merkezi"],
"barracks" : ["Kışla", "Kışla"],
"workshop" : ["Mucit Atölyesi", "Mucit Atölyesi"],
"carpentering" : ["Marangoz Atölyesi", "Marangoz Atölyesi"],
"forester" : ["Ormancı Kulübesi", "Ormancı Kulübesi"],
"stonemason" : ["Mermer Atölyesi", "Mermer Atölyesi"],
"glassblowing" : ["Cam Eşya Atölyesi", "Cam Eşya Atölyesi"],
"winegrower" : ["Bağ Evi", "Bağ Evi"],
"alchemist" : ["Simya Kulesi", "Simya Kulesi"],
"architect" : ["Mimarlık Bürosu", "Mimarlık Bürosu"],
"optician" : ["Optik", "Optik"],
"vineyard" : ["Şarap Mahzeni", "Şarap Mahzeni"],
"fireworker" : ["Fişekçi", "Fişekçi"]
};
texts = {
"Upkeep" : "Bakım Masrafı",
"Growth" : "Büyüme",
"Research" : "Araştrma",
"cityName" : "Şehir Adı",
"currentlyBuilding" : "İnşaa Ediliyor",
"summary" : "Toplam:",
"hide_settings" : "Ayarları Gizle",
"show_settings" : "Ayarları Göster",
"Population" : "Nüfus",
"finishedBuilding" : "İnşaa Bitti",
"Incomes" : "Gelir",
"Trading" : "Ticaret",
"Wood" : "Odun",
"Wine" : "Şarap",
"Marble" : "Mermer",
"Crystal" : "Kristal",
"Sulfur" : "Sülfür"
};
};
EmpireBoard.Intl.Load_Texts_TW = function()
{
//traditional chinese translation by Whiskers, cherub
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" : ["煙火測試區域", "硫-"],
"dump" : ["貨棧","貨棧"]
};
texts = {
"cityName": "城鎮",
"currentlyBuilding": "正在建造",
"summary": "總計",
"hide_settings": "隐藏設定",
"show_settings": "顯示設定",
"Population": "人口",
"finishedBuilding": "建造完成",
"Incomes":"收入",
"Trading":"交易",
"Wood": "木材",
"Wine": "葡萄",
"Marble": "大理石",
"Crystal": "水晶",
"Sulfur": "硫磺",
"Growth":"成長率",
"Research":"研究",
"Upkeep":"軍費"
};
};
EmpireBoard.Intl.Load_Texts_UA = function()
{
//ukrainian Translation by feelimon http://www.ikariam.com.ua
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 = {
"Upkeep" :"Утримання",
"cityName": "Назва міста", "currentlyBuilding": "Поточне будівництво", "summary": "Всього",
"hide_settings": "Сховати налаштування", "show_settings": "Показати налаштування",
"Population": "Населення",
"Research": "Вчені",
"finishedBuilding": "Будівництво завершено", "Incomes":"Золото", "Trading":"Торгівля",
"Wood": "Дерево", "Wine": "Вино", "Marble": "Мармур",
"Crystal": "Кришталь", "Sulfur": "Сірка"
};
};
EmpireBoard.Intl.Load_Texts_VN = function()
{
// Vietnamese translations, thank Gafs
langtype = "";
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ố",
"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"
};
};
EmpireBoard.Init();
//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 = EmpireBoard.Str.To_Integer(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()='"+EmpireBoard.Ikariam.TwoDigit_Coords(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(),'"+EmpireBoard.Ikariam.TwoDigit_Coords(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['+EmpireBoard.Ikariam.TwoDigit_Coords(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 getCity(city_id)
{
city_id = "city_"+city_id;
if (config[city_id] == undefined)
{
config[city_id] = new Resource();
config[city_id].buildings = {};
config[city_id].units = {};
EmpireBoard.Log.Add('Create city id='+city_id);
}
return config[city_id];
}
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(';');
// by AubergineAnodyne (not used)
function findResourceCounterData(name)
{
for (var i = 0; i < aCodeLines.length; i++)
{
if (aCodeLines[i].indexOf(name + 'Counter') >= 0)
{
return aCodeLines[i].substring(aCodeLines[i].indexOf('(') + 2, aCodeLines[i].indexOf(')') - 1);
}
}
}
var sWoodLine = 0;
var sTradeGoodLine = 0;
for (var j = 0; j <= aCodeLines.length-1; j++)
{
if (aCodeLines[j].indexOf('getResourceCounter') > 0)
{
if (aCodeLines[j].indexOf('woodCounter') > 0)
{
sWoodLine = j;
if (sTradeGoodLine > 0) break;
}
if (aCodeLines[j].indexOf('tradegoodCounter') > 0)
{
sTradeGoodLine = j;
if (sWoodLine > 0) break;
}
}
}
var startResourcesDelta = 0;
if (sWoodLine > 0)
{
var sWood = aCodeLines[sWoodLine].substring(aCodeLines[sWoodLine].indexOf('(')+2,aCodeLines[sWoodLine].indexOf(')')-1);
var prodRegExp = /production: *([0-9.\E\-]+)/.exec(sWood);
if (prodRegExp != null)
{
startResourcesDelta = Math.floor(parseFloat(RegExp.$1) * 3600);
}
}
var startTradegoodDelta = 0;
var sTradeGoodName = '';
if (sTradeGoodLine > 0)
{
var sTradeGood = aCodeLines[sTradeGoodLine].substring(aCodeLines[sTradeGoodLine].indexOf('(')+2,aCodeLines[sTradeGoodLine].indexOf(')')-1);
var prodRegExp = /production: *([0-9.\E\-]+)/.exec(sTradeGood);
if (prodRegExp != null)
{
startTradegoodDelta = Math.floor(parseFloat(RegExp.$1) * 3600);
}
var sName = /valueElem: *\"(.*)\"/.exec(sTradeGood);
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));
/*
TODO:
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 getArrValue(arr, key, defaultValue) {
if (arr == undefined || arr[key] == undefined) {
return defaultValue;
}
return arr[key];
}
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 = EmpireBoard.Ikariam.Trim_Coords(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 == 'premium')
{
if (config["premium"] == undefined) config["premium"] = {};
if (config["premium"].rqtime == undefined)
{
config["premium"].rqtime = newTime;
}
else if (EmpireBoard.StartTime > config["premium"].rqtime)
{
config["premium"].rqtime = newTime;
}
else if (newTime < config["premium"].rqtime)
{
config["premium"].rqtime = newTime;
}
}
else if (view == 'researchOverview')
{
if (config["research"] == undefined) config["research"] = {};
if (config["research"].rqtime == undefined)
{
config["research"].rqtime = newTime;
}
else if (EmpireBoard.StartTime > config["research"].rqtime)
{
config["research"].rqtime = newTime;
}
else if (newTime < config["research"].rqtime)
{
config["research"].rqtime = newTime;
}
}
else 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 = '';
if (city_id == undefined) city_id = 0;
var report = false;
if ((city_id == undefined) || (city_id <= 0))
{
if (view == 'premium')
{
if (config["premium"] == undefined) config["premium"] = {};
if (config["premium"].uptime == undefined)
{
report = true;
}
else if (config["premium"].uptime == 0)
{
report = true;
}
else if ((config["premium"].rqtime != undefined) && (config["premium"].rqtime <= EmpireBoard.StartTime) && (config["premium"].rqtime > config["premium"].uptime))
{
report = true;
}
}
else if (view == 'researchOverview')
{
if (config["research"] == undefined) config["research"] = {};
if (config["research"].uptime == undefined)
{
report = true;
}
else if (config["research"].uptime == 0)
{
report = true;
}
else if ((config["research"].rqtime != undefined) && (config["research"].rqtime <= EmpireBoard.StartTime) && (config["research"].rqtime > config["research"].uptime))
{
report = true;
}
}
else 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 (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 (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
{
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 ((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))
{
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*30))
{
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))
{
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*30))
{
report = true;
}
}
// Any buildings
if (EmpireBoard.Ikariam.Get_BuildingUsage(view) != '')
{
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*30))
{
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 == 'academy')
{
if (city.buildings[view].uptime == undefined)
{
report = true;
}
else if (city.buildings[view].uptime == 0)
{
report = true;
}
}
else if (view == 'palace')
{
if (config.government == undefined)
{
report = true;
}
else 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 (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 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;
}
}
}
}
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++;
}
}
}
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 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;
}
// 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)
{
if (city.buildings[name].levels[position] != undefined)
level = city.buildings[name].levels[position];
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 "∞"+EmpireBoard.Ikariam.LocalizationStrings('hour','timeunits','short');
}
var time = Number(startTime);
while (population < maxPopulation) {
var t = getOnePeopleGrowthTime(happiness);
if (t == "NaN") {
return "∞"+EmpireBoard.Ikariam.LocalizationStrings('hour','timeunits','short');
}
time += t;
population++;
happiness--;
}
return EmpireBoard.Str.FormatRemainingTime(time - Number(startTime));
}
// Current selected city
if (current_city_id > 0)
{
var res = getCity(current_city_id);
/* Update current city */
// Stored resources
res.wood = EmpireBoard.Ikariam.currentCity('wood','resources');
if (res.wood == undefined)
res.wood = EmpireBoard.Str.To_Integer(EmpireBoard.DOM.Get_First_Node_TextContent("id('value_wood')"));
res.wine = EmpireBoard.Ikariam.currentCity('wine','resources');
if (res.wine == undefined)
res.wine = EmpireBoard.Str.To_Integer(EmpireBoard.DOM.Get_First_Node_TextContent("id('value_wine')"));
res.marble = EmpireBoard.Ikariam.currentCity('marble','resources');
if (res.marble == undefined)
res.marble = EmpireBoard.Str.To_Integer(EmpireBoard.DOM.Get_First_Node_TextContent("id('value_marble')"));
res.glass = EmpireBoard.Ikariam.currentCity('crystal','resources');
if (res.glass == undefined)
res.glass = EmpireBoard.Str.To_Integer(EmpireBoard.DOM.Get_First_Node_TextContent("id('value_crystal')"));
res.sulfur = EmpireBoard.Ikariam.currentCity('sulfur','resources');
if (res.sulfur == undefined)
res.sulfur = EmpireBoard.Str.To_Integer(EmpireBoard.DOM.Get_First_Node_TextContent("id('value_sulfur')"));
if (EmpireBoard.Ikariam.Is_Version('0.4.1'))
{
// Couldn't recognize fields
}
else
{
// 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);
if (res.buildings["townHall"] == undefined) res.buildings["townHall"] = {};
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.buildings["townHall"].population = EmpireBoard.Str.To_Integer(popReg);
res.buildings["townHall"].citizens = EmpireBoard.Str.To_Integer(cizReg);
} else {
res.buildings["townHall"].population = 0;
res.buildings["townHall"].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('finances');
setViewRqTime('militaryAdvisorMilitaryMovements');
EmpireBoard.DB.Save();
}
var n = document.getElementById("plunderbutton");
n.addEventListener("click", reportPlunder, false);
}
else if (EmpireBoard.Ikariam.View() == "transport")
{
function reportTransport()
{
setViewRqTime('merchantNavy');
EmpireBoard.DB.Save();
}
var n = document.getElementById("submit");
n.addEventListener("click", reportTransport, false);
}
else if (EmpireBoard.Ikariam.View() == 'deployment')
{
EmpireBoard.ViewIsActionDeployment();
}
else if (EmpireBoard.Ikariam.View() == 'resource')
{
EmpireBoard.ViewIsIslandResource();
}
else if (EmpireBoard.Ikariam.View() == 'tradegood')
{
EmpireBoard.ViewIsIslandTradeGood();
}
}
// If main view is a city
if (city_idmainView > 0)
{
var res = getCity(city_idmainView);
// Update city info
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')
{
var orderedBuildings = EmpireBoard.Ikariam.BuildingsList();
// 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 (orderedBuildings[name] != undefined)
{
if (res.buildings[name] == undefined)
{
res.buildings[name] = {};
}
}
else
{
if (res.buildings[name] != undefined)
{
// fix if not building...
if (delete config["city_"+city_idmainView].buildings[name])
EmpireBoard.Log.Add('Remove unknown building: '+name);
}
}
}
// Reset levels
var res = getCity(city_idmainView);
for (name in res.buildings)
{
res.buildings[name].position = -1; // Soon deprecated
res.buildings[name].level = 0; // Soon deprecated
res.buildings[name].levels = {};
res.buildings[name].link = ''; // Soon deprecated
}
// 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 (orderedBuildings[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;
}
res.buildings[name].level = res.buildings[name].level + parseInt(level); // deprecated
res.buildings[name].levels[position] = parseInt(level);
res.buildings[name].link = node.href;// link, will deprecated
}
}
// 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;
}
// Remove deleted buildings
for (name in res.buildings)
{
var buildingsNb = 0;
for (position in res.buildings[name].levels)
{
buildingsNb++;
}
if (buildingsNb == 0)
{
if (delete config["city_"+city_idmainView].buildings[name])
EmpireBoard.Log.Add('Building removed: '+name);
}
}
var res = getCity(city_idmainView);
res.citytime = EmpireBoard.StartTime;
EmpireBoard.ViewIsCity();
}
if ((EmpireBoard.Ikariam.View() == "cityMilitary-army") || (EmpireBoard.Ikariam.View() == "cityMilitary-fleet"))
{
//military-army and fleet unit counts
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 = EmpireBoard.Str.Trim(names.snapshotItem(i).title);
var unit_id = '';
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 = EmpireBoard.Str.To_Integer(c.innerHTML, 0);
if (res.units[unit_id] == undefined)
{
res.units[unit_id] = {};
}
res.units[unit_id].count = cnt;
if (cnt > 0) EmpireBoard.Log.Add('Unit['+unit_id+'] named "'+n+'": '+cnt);
}
}
if (EmpireBoard.Ikariam.View() == "cityMilitary-army")
{
res.cityMilitaryarmytime = EmpireBoard.StartTime;
}
else if (EmpireBoard.Ikariam.View() == "cityMilitary-fleet")
{
res.cityMilitaryfleettime = EmpireBoard.StartTime;
}
}
// view is a building ; common parsing
if ((EmpireBoard.Ikariam.Get_BuildingUsage(EmpireBoard.Ikariam.View()) != '') && (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] = EmpireBoard.Str.To_Integer(n.innerHTML,0);
}
EmpireBoard.Log.Add('View '+EmpireBoard.Ikariam.View()+' building level '+EmpireBoard.Str.To_Integer(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;
}
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 " + EmpireBoard.Str.To_Integer(n.innerHTML,0);
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;
}
if (EmpireBoard.Ikariam.View() == 'townHall')
{
EmpireBoard.ViewIsBuildingTownHall();
}
else if (EmpireBoard.Ikariam.View() == 'branchOffice')
{
EmpireBoard.ViewIsBuildingBranchOffice();
}
else if (EmpireBoard.Ikariam.View() == "tavern")
{
EmpireBoard.ViewIsBuildingTavern();
}
else if (EmpireBoard.Ikariam.View() == 'academy')
{
EmpireBoard.ViewIsBuildingAcademy();
}
else if (EmpireBoard.Ikariam.View() == 'temple')
{
EmpireBoard.ViewIsBuildingTemple();
}
else if (EmpireBoard.Ikariam.View() == 'museum')
{
EmpireBoard.ViewIsBuildingMuseum();
}
else if (EmpireBoard.Ikariam.View() == 'workshop')
{
EmpireBoard.ViewIsBuildingWorkshop();
}
else if (EmpireBoard.Ikariam.View() == 'palace')
{
EmpireBoard.ViewIsBuildingPalace();
}
else if ((EmpireBoard.Ikariam.View() == "barracks") || (EmpireBoard.Ikariam.View() == "shipyard"))
{
//military-army unit counts
var idx = 0;
if (EmpireBoard.Ikariam.View() == "shipyard") { idx = 13; }
if (res.units == undefined) { res.units = {}; }
var hasNotices = false;
if (document.getElementById('notices')) hasNotices = true;
// 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']");
var upkeeps = EmpireBoard.DOM.Get_Nodes("//ul[@id='units']/li[contains(@class, 'unit')]/div[@class='costs']/ul/li[@class='upkeep']");
if (names.snapshotLength == counts.snapshotLength)
{
for (var i = 0; i < names.snapshotLength; i++)
{
var node = names.snapshotItem(i);
var unit_id = '';
try
{ unit_id = node.parentNode.parentNode.getAttribute("class"); }
catch(e) { }
var uKey = EmpireBoard.Ikariam.Trim_Unit(unit_id);
var n = node.innerHTML;
config["unitnames"][unit_id] = n;
var c = counts.snapshotItem(i);
var cnt = EmpireBoard.Str.To_Integer(c.innerHTML.replace(/<.+>/g, ""), 0);
if (res.units[unit_id] == undefined)
{
res.units[unit_id] = {};
}
res.units[unit_id].count = cnt;
EmpireBoard.Log.Add('Count['+unit_id+'] = '+cnt);
// Init units under construction
res.units[unit_id].construction = 0;
if (hasNotices != true)
{
var upkeepElt = upkeeps.snapshotItem(i);
var upkeep = EmpireBoard.Str.To_Integer(upkeepElt.innerHTML.replace(/<.+>/g, ""), 0);
config["upkeeps"][uKey] = upkeep;
EmpireBoard.Log.Add('Upkeep['+uKey+'] = '+upkeep);
}
}
}
// Search units under construction
if (EmpireBoard.Ikariam.Is_Version('0.3.3'))
{
// Construction list
var ucList = EmpireBoard.DOM.Get_Nodes("//div[@id='unitConstructionList']//div[@class='army_wrapper']/div[contains(@class,'army')]/div[@class='unitcounttextlabel']");
EmpireBoard.Log.Add('Units construction lists = '+ucList.snapshotLength);
if (ucList.snapshotLength >= 1)
{
var unitsIdClass = EmpireBoard.Ikariam.UnitsClassNames();
for (var i = 0; i < ucList.snapshotLength; i++)
{
var uDIVcount = ucList.snapshotItem(i);
var uDIV = uDIVcount.parentNode;
var unit_num = EmpireBoard.Str.To_Integer(uDIV.className);
if (unitsIdClass[unit_num] != undefined)
{
var unit_id = 'unit '+unitsIdClass[unit_num];
var AmountInt = EmpireBoard.Str.To_Integer(uDIVcount.textContent, 1);
EmpireBoard.Log.Add('Construction['+unit_id+'] = '+AmountInt);
res.units[unit_id].construction = res.units[unit_id].construction + AmountInt;
}
}
if (unsafeWindow && unsafeWindow.tmppbar)
{
//var startdate = unsafeWindow.tmppbar['startdate'];
var currentdate = unsafeWindow.tmppbar['currenttime'];
var enddate = unsafeWindow.tmppbar['enddate'];
setViewRqTime(EmpireBoard.Ikariam.View(), city_idmainView, EmpireBoard.StartTime + (enddate - currentdate), true);
}
}
}
else
{
var currentUnit = EmpireBoard.DOM.Get_First_Node("//div[@id='unitConstructionList']//div[contains(@class, 'currentUnit')]");
if (currentUnit != null)
{
var currentUnit_id = 'unit '+EmpireBoard.Ikariam.Trim_Unit(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 = EmpireBoard.Str.To_Integer(Amount.textContent, 1);
var unit_id = 'unit '+EmpireBoard.Ikariam.Trim_Unit(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--)
{
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);
}
}
}
}
}
else
{
// Global views
if (EmpireBoard.Ikariam.View() == "militaryAdvisorMilitaryMovements")
{
EmpireBoard.ViewIsMilitaryMovements();
}
else if (EmpireBoard.Ikariam.View() == 'premium')
{
EmpireBoard.ViewIsPremium();
}
else if (EmpireBoard.Ikariam.View() == 'researchAdvisor')
{
EmpireBoard.ViewIsResearchAdvisor();
}
else if (EmpireBoard.Ikariam.View() == 'researchOverview')
{
EmpireBoard.ViewIsResearchOverview();
}
else if (EmpireBoard.Ikariam.View() == "finances")
{
EmpireBoard.ViewIsFinances();
}
else if (EmpireBoard.Ikariam.View() == "diplomacyAdvisorTreaty")
{
EmpireBoard.ViewIsDiplomacyAdvisorTreaty();
}
else if (EmpireBoard.Ikariam.View() == "merchantNavy")
{
if (config["arrivinggoods"] == undefined) config["arrivinggoods"] = {};
dropUndeliveredLoadingGoods();
function grab_City_ID(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;
}
EmpireBoard.Log.Add("Fetch arriving goods");
var foundLoading = false;
var takeSomething = false;
var resMi = EmpireBoard.DOM.Get_Nodes("//div[@id='mainview']//td[contains(@class, 'mission')]");
if (resMi.snapshotLength > 0)
{
EmpireBoard.Log.Add("Found "+resMi.snapshotLength+" missions");
// 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 = EmpireBoard.Ikariam.Trim_Coords(n.textContent);
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(',');
if (sParts.length >= 3)
{
var sPart0 = sParts[0].split(':');
var enddate = 1000*parseInt(EmpireBoard.Str.Trim(sPart0[1]));
var sPart1 = sParts[1].split(':');
var currentdate = 1000*parseInt(EmpireBoard.Str.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));
}
else
{
//EmpireBoard.Log.Add("Failed to fetch getCountdown");
}
}
}
}
// infos
for (var i = 0; i < resMi.snapshotLength; i++)
{
var nMi = resMi.snapshotItem(i);
var tr = nMi.parentNode;
var tds = tr.getElementsByTagName("td");
var tdslength = tds.length;
//var tds = tr.childNodes;
var nSource = tds[1];
var nTarget = tds[3];
if (tdslength == 6)
{
// pillaging under 0.4.3
var nETA = tds[4];
var nRET = tds[4];
var nAc = tds[5];
}
else if (EmpireBoard.DOM.Has_ClassName(tds[4],'speed'))
{
// transport under 0.4.3
var nETA = tds[5];
var nRET = tds[5];
var nAc = tds[6];
}
else if (EmpireBoard.DOM.Has_ClassName(tds[5],'speed'))
{
// transport under 0.4.2
var nETA = tds[4];
var nRET = tds[6];
var nAc = tds[7];
}
else
{
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 = EmpireBoard.Str.To_Integer(payload[j].title);
PayloadGoods[rKey] = rAmnt;
}
}
}
var citySource;
var citySourceID = 0;
var cityTarget;
var cityTargetID = 0;
var quest;
citySourceID = grab_City_ID(nSource);
cityTargetID = grab_City_ID(nTarget);
if (nMi.className.indexOf('returning') > 0)
{
quest = 'returning';
if (tr.parentNode.parentNode.parentNode.parentNode.id == 'plunderingTransports')
{
if (foundGoods == true)
{
citySource = EmpireBoard.Str.Trim(nTarget.textContent);
cityTarget = citySourceID;
if (citiesNames[cityTargetID] == undefined)
{
citySource = EmpireBoard.Ikariam.Trim_PlayerName(nSource.textContent);
cityTarget = cityTargetID;
}
}
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 = EmpireBoard.Str.Trim(nTarget.textContent);
cityTarget = citySourceID;
//if (foundArmy == false) addTransport(citiesIDs[EmpireBoard.Ikariam.Trim_PlayerName(nSource.textContent)], nETA.id, mTimers[nETA.id]);
if (foundGoods == false) continue;
}
}
else if ((nMi.className.indexOf('gotoown') > 0) || (citiesNames[cityTargetID] != undefined))
{
if (foundArmy == true)
{
continue;
}
else
{
citySource = EmpireBoard.Ikariam.Trim_PlayerName(nSource.textContent);
cityTarget = cityTargetID;
quest = 'gotoown';
if (mTimers[nETA.id] == undefined)
{
mTimers[nETA.id] = EmpireBoard.StartTime + (1 * 20 * 60 * 1000);
quest = 'loading';
}
else if (nAc.innerHTML == '')
{
citySource = EmpireBoard.Ikariam.Trim_PlayerName(nTarget.textContent);
cityTarget = citySourceID;
quest = 'halfturn';
}
//addTransport(citiesIDs[EmpireBoard.Ikariam.Trim_PlayerName(nSource.textContent)], 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[EmpireBoard.Ikariam.Trim_PlayerName(nSource.textContent)], nETA.id, mTimers[nRET.id]);
}
else if (mTimers[nETA.id] != undefined)
{
//addTransport(citiesIDs[EmpireBoard.Ikariam.Trim_PlayerName(nSource.textContent)], nETA.id, mTimers[nETA.id]);
}
else
{
//addTransport(citiesIDs[EmpireBoard.Ikariam.Trim_PlayerName(nSource.textContent)], nETA.id, EmpireBoard.StartTime + (1000*60*15));
}
if ((foundGoods == true) && (nAc.innerHTML != ''))
{
continue;
}
else if ((foundGoods == true) && (nAc.innerHTML == '') && (mTimers[nETA.id] == undefined))
{
citySource = EmpireBoard.Str.Trim(nTarget.textContent);
cityTarget = citySourceID;
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.ViewIsMerchantNavy();
}
}
/**************************************************************************************************
* Render tables
*************************************************************************************************/
function renderTables()
{
var s = "";
if (EmpireBoard.DB.Options.Prefs.TABLE_BUILDINGS == true)
{
s += "<div id='EmpireBoardBuildings' class='Table'>";
s += EmpireBoard.Renders.Buildings_Table_Content();
s += "<p class='Caption'>"+
"<span dir='ltr'>(<span class=Green>1-"+(EmpireBoard.Ikariam.Get_MaxBuildings()-1)+"</span>)</span> available free spaces for new buildings."+
" <span dir='ltr'>(<span class=Red>!</span>)</span> require your attention to update overview's data."+
"</p>";
s += "</div>";
}
if (EmpireBoard.DB.Options.Prefs.TABLE_RESOURCES == true)
{
s += "<div id='EmpireBoardResources' class='Table'>";
s += EmpireBoard.Renders.Resources_Table_Content();
s += "<p class='Caption'>"+
"<span dir='ltr'>(<span class=Green>1-9</span>)</span> available action points."+
" <span dir='ltr'>(<span class=Red>!</span>)</span> require your attention to update overview's data."+
" <span dir='ltr'>(<img src='skin/layout/icon-wall.png' class='Safe' />)</span> resources safe against pillaging."+
" <span dir='ltr'>(<span class=Green>*</span>)</span> some resources delivered."+
"</p>";
s += "</div>";
}
if (EmpireBoard.DB.Options.Prefs.TABLE_ARMYFLEET == true)
{
s += "<div id='EmpireBoardArmy' class='Table'><table class='Overview Army'>";
s += EmpireBoard.Renders.ArmyFleet_Table_Content();
s += "<p class='Caption'>"+
"<span dir='ltr'>(<span class=Green>1-9</span>)</span> available action points."+
" <span dir='ltr'>(<span class=Red>!</span>)</span> require your attention to update overview's data."+
"</p>";
s + "</div>";
}
var body = EmpireBoard.DOM.Get_First_Node("//body");
var span = document.getElementById(EmpireBoard.MainID);
if (span == null)
{
span = document.createElement('div');
span.id = EmpireBoard.MainID;
span.setAttribute("version", EmpireBoard.Version);
if (EmpireBoard.Intl.LangDir() == "rtl")
{
span.setAttribute("dir", "rtl");
span.setAttribute("class", "RtoL");
}
else
{
span.setAttribute("dir", "ltr");
span.setAttribute("class", "LtoR");
}
span.innerHTML = s;
body.appendChild(span);
}
else
{
if (EmpireBoard.Intl.LangDir() == "rtl")
{
span.setAttribute("dir", "rtl");
span.setAttribute("class", "RtoL");
}
else
{
span.setAttribute("dir", "ltr");
span.setAttribute("class", "LtoR");
}
span.innerHTML = s;
}
//settings table
function reset_all_data()
{
var answer = confirm(EmpireBoard.ScriptName+":\n\nAre you sure you want to delete ALL stored data ?");
if (answer)
{
config = {};
EmpireBoard.DB.Save();
EmpireBoard.DB.Options = {};
EmpireBoard.DB.Save_Options();
window.location.href = window.location.href;
}
}
function myChkEventHandler()
{
this.value = (this.value == '1' ? '0' : '1');
EmpireBoard.DB.Options.Prefs[this.lang] = (this.value == '1');
EmpireBoard.DB.Save_Options();
}
function myChgEventHandler()
{
EmpireBoard.DB.Options.Prefs[this.lang] = this.value;
EmpireBoard.DB.Save_Options();
}
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 = EmpireBoard.MainID+"Settings";
t.setAttribute("style", "display: none;");
t.setAttribute("align", "right");
t.appendChild(createRowChk("Show resources table:", "TABLE_RESOURCES", EmpireBoard.DB.Options.Prefs.TABLE_RESOURCES));
t.appendChild(createRowChk("Show buildings table:", "TABLE_BUILDINGS", EmpireBoard.DB.Options.Prefs.TABLE_BUILDINGS));
t.appendChild(createRowChk("Show army and fleet table:", "TABLE_ARMYFLEET", EmpireBoard.DB.Options.Prefs.TABLE_ARMYFLEET));
t.appendChild(createRowSlct("Resource progress bar mode:", "PROGRESS_BAR_MODE", EmpireBoard.DB.Options.Prefs.PROGRESS_BAR_MODE, {off: "off", time: "based on remaining time", percent: "based on fullness percentage"}));
t.appendChild(createRowSlct("Language:", "LANGUAGE", EmpireBoard.DB.Options.Prefs.LANGUAGE, EmpireBoard.Intl.Languages()));
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);
function show_hide_table()
{
var n = document.getElementById(EmpireBoard.MainID+"Settings");
var m = document.getElementById(EmpireBoard.MainID+"Addons");
if (n.style.display == 'none')
{
n.style.display = 'table';
m.style.display = 'block';
this.value = EmpireBoard.Intl.TT("hide_settings");
}
else
{
n.style.display = 'none';
m.style.display = 'none';
this.value = EmpireBoard.Intl.TT("show_settings");
}
}
//now adds table
span.appendChild(t);
var ul = document.createElement('ul');
ul.id = EmpireBoard.MainID+'Addons';
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> <span dir="ltr">(<span>v. <i>' + EmpireBoard.Version + '</i></span> - <a target="_blank" href="http://feeds.feedburner.com/ikariam-v3-empire-board">last changes</a>)</span>. ';
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 = EmpireBoard.Intl.TT("show_settings");
n.setAttribute("class", "button");
n.addEventListener("click", show_hide_table, false);
p.appendChild(n);
// footer
span.appendChild(p);
}
if ((EmpireBoard.Ikariam.Is_Logged() == true) && (EmpireBoard.Ikariam.View() != '') && (EmpireBoard.Ikariam.View() != 'errorLoggedOut') && (EmpireBoard.Ikariam.View() != 'no-login-umod'))
{
if (EmpireBoard.Ikariam.Is_Version('0.5.0') && (EmpireBoard.Ikariam.Is_Mobile() == false))
{
// not compatible
}
else
{
EmpireBoard.Renders.Set_Common_Styles();
renderTables();
EmpireBoard.Tooltip.CreateContainer(EmpireBoard.MainID+'Tooltip', EmpireBoard.MainID);
EmpireBoard.Handlers.Attach_Events();
EmpireBoard.Handlers.Start_Timers();
EmpireBoard.DB.GarbageCollector();
}
EmpireBoard.DB.Save();
};
EmpireBoard.EndTime = new Date().getTime();
EmpireBoard.Log.Add('Ended after '+((EmpireBoard.EndTime - EmpireBoard.StartTime)/1000)+'s');