Friday, February 4, 2011

Ikariam Bauliste


var metadata=<> 
// ==UserScript==
// @name           Bauliste
// @namespace      http://userscripts.org/scripts/show/94458
// @include        http://s*.*.ikariam.com/*
// @exclude        http://support*.ikariam.*/*
// @author         Karandaras (http://userscripts.org/users/265255)
// @require        http://userscripts.org/scripts/source/94511.user.js
// @version        1.0n
// @updater:script http://userscripts.org/scripts/source/94458.user.js
// @updater:delay  86400000
// ==/UserScript==
</>.toString();

var languages = {
 de: {
  "titel": "Bauliste",
  "upgrade": "Ausbau vormerken",
  "upgrade2": "Bau vormerken",
  "delupgrade": "Vermerk löschen",
  "ready": "ausreichend",
  "level": " St. ",
  "wait": "nicht ausreichend",
  "prod": "Stundenproduktion",
  "wood": "Bauholz: ",
  "wine": "Wein: ",
  "marble": "Marmor: ",
  "glas": "Kristallglas: ",
  "sulfur": "Schwefel: ",
  "cost": "Kosten:",
  "missing": "es fehlen",
  // Gebäudenamen
  "alchemist": "Alchemistenturm",
  "academy": "Akademie",
  "palace": "Palast",
  "palaceColony": "Statthaltersitz",
  "townHall": "Rathaus",
  "museum": "Museum",
  "safehouse": "Versteck",
  "carpentering": "Zimmerei",
  "port": "Handelshafen",
  "barracks": "Kaserne",
  "warehouse": "Lagerhaus",
  "shipyard": "Kriegswerft",
  "vineyard": "Kelterei",
  "tavern": "Taverne",
  "wall": "Stadtmauer",
  "winegrower": "Winzerei",
  "embassy": "Botschaft",
  "branchOffice": "Kontor",
  "stonemason": "Steinmetz",
  "optician": "Optiker",
  "dump": "Halde",
  "workshop": "Erfinderwerkstatt",
  "forester": "Forsthaus",
  "glassblowing": "Glasbläserei",
  "temple": "Tempel",
  "architect": "Architekturbüro",
  "fireworker": "Feuerwerksplatz"
 }
};

var href = document.location.href;
var server = getServer(href);
var lang = getLanguage(href);

// Update-Check
var update = new Updater(metadata,lang);
update.update();

var language = languages[lang];
if(language == null)
 language = languages['de'];

function getServer(href) {
 var server = href.replace(/........(\d+).*/,"$1");
 return server;
}

function getLanguage(href) {
 var language = href.replace(/........\d+.(\w+).*/,"$1");
 return language ;
}

var store = server+"_"+lang;

var upsrc = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAAUABQDASIAAhEBAxEB/8QAGQABAQADAQAAAAAAAAAAAAAAAAkFBgcI/8QAKhAAAQQCAQMDBAIDAAAAAAAAAQIDBAUGBxEACBIUISITFTFRFyMlMjP/xAAXAQEBAQEAAAAAAAAAAAAAAAAGCAcJ/8QAIhEAAgMAAgICAwEAAAAAAAAAAgMBBAUGEgARFSEHExRB/9oADAMBAAIRAxEAPwDAb7jbf2rsrYmzNi53ld3kl3eZFLQiVkdnW1tXWpswIVLSQBwKWmpQAlKQAAAPcAddt7uewC37WpunYEHcGX5x/LGt15lZfcLOfQjHpyDXerqoJRaL4pVmYeEL8FD8LSPbqt+iM/yjT0fMJ7Gn9dbDGY2Bnc5DEWzY1/oUFJSpTdfbEgefP5BCkhXI46pH3JbwvcFla7YqNQa7z0ZHg67eVIyh1KkUPKG/8XHH25SjVe55Hk38ytRaAUOoBweLYOtxjlmxt8tanXluU9735Gtbditfq2azzJlS3VjV+TVWIIhIx/HC/ZSUMjtzY49+McLc4lyzb3uW2q+5Lcx5W7WDrPdgNt7mhFhklU0K/wAz8xS6BMIhU0OvYpZDRgoEdovcx3daM1Q5rvG9g2FtjdXk1g/QtZiHMosKavk1dLzTwbKyIlt07MxuXMgQ3ABH9c7wPmenXYG4OSYzLt4b9DVocmW0u0U1CiCNHY9YG/6kMnjw8fp88foj9dOi9bkfL6tdFZPIt9akLBS1p2b6lAC4ERFa/wBpdAGBiBHsXWIiPc+vsVW3PyBl10ZtTlm+mtRWFVClal9alqSILWC1/wBB9AERGBHuXWPr3PqZ8oVslQ1pneRYZjTMb7FDeluQ2bGJFmvQ2XZ6HFQY7xZbKIIUo8MFKiABys+5OiSNk5Bw+XGKh8x2/RNfXgefjH5/0/7Dnj9/np06YbCwXqaa1gC1r0ra1gAwAAsP19FgIxAiA+56iMQI+59RHufKD0DNOjfrpMlIRaYtCFlK0pXHr0tSxmAWEf4ADAx/kee2tEaC1rs3X8PNcxp12l7dTX35DpVHbYjoEeIG4cFgRT6eEx8iyx5L8CtfyPPs6dOqM43xrjljj+M9/H8R7nZtNjXOyqDGtYaQIzYw0EZmUzMkRTJFMzMzM+bFh4GFYx8x9jFyXvdRrMa52dTa1rDUBGxjDSRmZF9kZFJFP3MzPn//2Q%3D%3D";
var unsrc = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAAE2UlEQVQ4EV1VW2xUVRTd59x77p0p05aWIlUpr3a0MOVNFBM+wB+q0YQP2kDCQzGKUT/0i6gfjAnxQ38MH8ZAIiY8Els/EIFawDAiJgoqalIElAYftNPXvB/3cc7Z7jOlxHgzN3fOvnuvs/bae5/L4H9XXw9YPX2gGQM0r4Z6Ek5ToqlVgXKCkbGJ9kPD+ZkQTAJnSdAza/Nk/10YsN5+UGc7wE30JJ6NtDZvs4VezTg2ASpLhdWKrvp/yLJ3Kvfb5NFEfzmNFAP9RACmCdwHnAG7vb1pQzQ+58PmFrGcsQpWq2WmVXBvXxuEJdCxLJbJq2yY895acDD/kWEKSUADWgM0uzBidmNbbGvLklknRESLYqmqHGFBfWO9VQxsQI06aoecax/yhVAJzqE+wqyRu/Lj9sPFF2lHkzpjM8x+7nY3z+uMnkViHypUjsttFLG8X3HfURX2vc2Yx+zqEnDklqgrt+pQOtWyDuc2cCedlu91HC3vM1g1hkcAZj/5XOyKiLK456NiNuPCYUwLkZn6sbR+9SX/9yTU0oIkFWFoS/SxxjbRxxUurJR0GBVMTPwVbl513j/HjTjrn3b31HGIFzMq1AFy7SF6RaUdKZvndkW/vrwSEgSod98Bh/SyEyerVzI3vW6/ghMYgFAVhOgsvs9g1QBR8N5ygSSQaNkWQ4cDI6kgPx5qHqoH21bFBi51wLLFn4DXPwSIL4FYcS64URoJ90cYQqmglJK48eo66OLnlkIcFS4rEaDgjE8N+y8UMvJwk8M4sdW5Cam4xraH19R9eXkZJExbpW5Nt8jd7/xPc3l9FwO0IiFyZosNnDv2fKhiPRmhVNLlsVJ4JnHK25uekscaHWZrHzE7oZStsK2lI3J6sB3aNqVA/kAsuwuQkVX8xZIAqkpzwNhCLgRGuU+19TWEPuZuXoPQaLH8jLcrndFHGwWzkTTNTColJCyaH3cHDOi6Q9N+UuKU9iiWbl/qOp4tqVyJ2EkSll60LOqE2QaQepOvOe/tHiuo4w0GlJjmppQUVUw8MN+5eDoOS42f9PXigNhRcUCHkOVZD4ZliOOSWEYkurE6sck4Xr8OFlIW61LBrvGKOl5vg03Vh0xGK7ei21ubxeeDK/ibTMHKCsXSDzwPb/Hn70DaU3jNsslgys/w1aeAZnkIghQj0CTA49+GO9I+nIgJsFEiyxZpbsrY0Wrxd6llYkqT/gEWJgvqm1rbTFXVYTPdRQ+DOolr3+iyPjAsiapMpYBf3Aj2wavhrtEATwgHqJ8RyqR5pqiVJ1FGCMUP8bPtI/B3bVJM8MAj1kAzh+5CiF5jHY9MBnhyuKBef20U/kxSv9JtZpVfSFhX6hSuLYegjUEw4PTM3y7otXvH4TYdZ9POB2bDwjVz+KUGDgsKEv0Gl7mkdaEi8SuN7Cp1XmBzeNTl0EvQjaFGacAc6t1/ynrnjlE41gf3ZnkG9P150BWPsv45FussSmp3BixqAbc4/SE2tVQlaFOsGNlLtEnOx5d3jsARA9ZLLhb5QYq6JElM3y7DWCfAcTocIgSwkubbpbwwUEAnEEBIuRFDFhJgVsGFSQ+37knD4AyYwbqvoVkkCXT/tFEfaIa2h6LwjMv4E/Q1WEBmTp8Fkpb9Wlb6i1dG4Sey1YhQnJGzdv0LYIWtrhC6s6gAAAAASUVORK5CYII%3D";
var upimg = "<img id=markUpdate style='margin:-2px 6px; float:right' src='"+upsrc+"' title='"+language["upgrade"]+"'>";
var unupimg = "<img id=unmarkUpdate style='margin:-2px 6px; float:right' src='"+unsrc+"' title='"+language["delupgrade"]+"'>";

var holz = 0;
var wein = 0;
var marmor = 0;
var glas = 0;
var schwefel = 0;
var stufe = 0;

var marks = loadArray(GM_getValue(store+'-marks',''));
var prod = loadArray(GM_getValue(store+'-prod',''));
var openimg = "data:image/gif;base64,R0lGODlhCgALANUlABMTExQUFB4eHlZWVmpqakFBQVlZWZ2dnTw8PFRUVBsbGz09PTs7O4eHhxYWFg8PD5iYmDc3NxISEhkZGU5OTh8fHx0dHTAwMI+Pj3d3d5qamhgYGCIiIhUVFTMzM01NTVNTUzIyMmJiYhERERcXFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACUALAAAAAAKAAsAAAY7wJJwSCwahwvRsRS4HCkAAMFYmXQ8RYNEoHBgiByFRRAoIB8bknrUKGkKEQYCwQgRIAcDKDEYJD4ZB0EAOw%3D%3D";
var closeimg = "data:image/gif;base64,R0lGODlhCgALANUlABMTExQUFB4eHlZWVmpqakFBQVlZWZ2dnTw8PFRUVBsbGz09PTs7O4eHhxYWFg8PD5iYmDc3NxISEhkZGU5OTh8fHx0dHTAwMI+Pj3d3d5qamhgYGCIiIhUVFTMzM01NTVNTUzIyMmJiYhERERcXFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACUALAAAAAAKAAsAAAY9wEPmkxgMEiDDAUIIMRAIRqSgKTVGpOzmsSh5CwGBRcHxejEOhUBiMHs9nUnF7SUAABS69xLQe0VdfoKCQQA7";
var hidden = GM_getValue(store+"-hide",false);

if(document.getElementById('value_wood')) {
 var ch = parseInt(document.getElementById('value_wood').innerHTML.replace(/\./g,""));
 var cw = parseInt(document.getElementById('value_wine').innerHTML.replace(/\./g,""));
 var cm = parseInt(document.getElementById('value_marble').innerHTML.replace(/\./g,""));
 var cg = parseInt(document.getElementById('value_crystal').innerHTML.replace(/\./g,""));
 var cs = parseInt(document.getElementById('value_sulfur').innerHTML.replace(/\./g,""));
 
 var h = 0;
 var w = 0;
 var m = 0;
 var g = 0;
 var s = 0;
 
 if(document.getElementById('value_wood').nextSibling.nextSibling.firstChild.nextSibling.innerHTML.indexOf(language["prod"],0) != -1)
  h = parseInt(document.getElementById('value_wood').nextSibling.nextSibling.firstChild.nextSibling.nextSibling.nodeValue.replace(/\./g, ""));
 if(document.getElementById('value_wine').nextSibling.nextSibling.firstChild.nextSibling.innerHTML.indexOf(language["prod"],0) != -1)
  w = parseInt(document.getElementById('value_wine').nextSibling.nextSibling.firstChild.nextSibling.nextSibling.nodeValue.replace(/\./g, ""));
 if(document.getElementById('value_marble').nextSibling.nextSibling.firstChild.nextSibling.innerHTML.indexOf(language["prod"],0) != -1)
  m = parseInt(document.getElementById('value_marble').nextSibling.nextSibling.firstChild.nextSibling.nextSibling.nodeValue.replace(/\./g, ""));
 if(document.getElementById('value_crystal').nextSibling.nextSibling.firstChild.nextSibling.innerHTML.indexOf(language["prod"],0) != -1)
  g = parseInt(document.getElementById('value_crystal').nextSibling.nextSibling.firstChild.nextSibling.nextSibling.nodeValue.replace(/\./g, ""));
 if(document.getElementById('value_sulfur').nextSibling.nextSibling.firstChild.nextSibling.innerHTML.indexOf(language["prod"],0) != -1)
  s = parseInt(document.getElementById('value_sulfur').nextSibling.nextSibling.firstChild.nextSibling.nextSibling.nodeValue.replace(/\./g, ""));
 
 if(prod[getCurrentId()] == null)
  prod[getCurrentId()] = new Object();
 
 prod[getCurrentId()]["Holz"] = ch;
 prod[getCurrentId()]["Wein"] = cw;
 prod[getCurrentId()]["Marmor"] = cm;
 prod[getCurrentId()]["Glas"] = cg;
 prod[getCurrentId()]["Schwefel"] = cs;
 
 prod[getCurrentId()]["Holz+"] = h;
 prod[getCurrentId()]["Wein+"] = w;
 prod[getCurrentId()]["Marmor+"] = m;
 prod[getCurrentId()]["Glas+"] = g;
 prod[getCurrentId()]["Schwefel+"] = s;
 
 var d = new Date();
 var time = d.getFullYear()+"/"+d.getMonth()+"/"+d.getDate()+"/"+d.getHours()+"/"+d.getMinutes();
 
 prod[getCurrentId()]["update"] = time;
 
 GM_setValue(store+'-prod',storeArray(prod));
}

var upgrade = document.getElementById('buildingUpgrade');
if(upgrade) {
 var lis = upgrade.getElementsByTagName('ul')[0].getElementsByTagName('li');
 for(var i=0; i<lis.length; i++) {
  if(lis[i].getAttribute('class') == "wood"|| lis[i].getAttribute('class') == "wood alt")
   holz = parseInt(lis[i].innerHTML.replace(/<span class=\"textLabel\">\w+: <\/span>/,"").replace(/\./g,""));
  else if(lis[i].getAttribute('class') == "wine" || lis[i].getAttribute('class') == "wine alt")
   wein = parseInt(lis[i].innerHTML.replace(/<span class=\"textLabel\">\w+: <\/span>/,"").replace(/\./g,""));
  else if(lis[i].getAttribute('class') == "marble" || lis[i].getAttribute('class') == "marble alt")
   marmor = parseInt(lis[i].innerHTML.replace(/<span class=\"textLabel\">\w+: <\/span>/,"").replace(/\./g,""));
  else if(lis[i].getAttribute('class') == "glass" || lis[i].getAttribute('class') == "glass alt")
   glas = parseInt(lis[i].innerHTML.replace(/<span class=\"textLabel\">\w+: <\/span>/,"").replace(/\./g,""));
  else if(lis[i].getAttribute('class') == "sulfur" || lis[i].getAttribute('class') == "sulfur alt") {
   schwefel = parseInt(lis[i].innerHTML.replace(/<span class=\"textLabel\">\w+: <\/span>/,"").replace(/\./g,""));
  }
 }
 
 stufe = document.getElementsByTagName('h4')[0].innerHTML.substring(document.getElementsByTagName('h4')[0].innerHTML.lastIndexOf(" ")).replace(/:/,"");

 if(isMarked())
  document.getElementsByTagName('h4')[0].innerHTML += unupimg;
 else
  document.getElementsByTagName('h4')[0].innerHTML += upimg;
 if(document.getElementById('markUpdate'))
  document.getElementById('markUpdate').addEventListener('click', markUpdate, true);
 if(document.getElementById('unmarkUpdate'))
  document.getElementById('unmarkUpdate').addEventListener('click', unmarkUpdate, true);
 upgrade.getElementsByTagName('ul')[1].getElementsByTagName('li')[0].addEventListener('click', unmarkUpdate, true);
}

var buildings = document.getElementById('buildings');
if(buildings) {
 var lis = buildings.getElementsByTagName('li');
 var m_ids = new Array();
 var u_ids = new Array();
 for(var i = 0; i<lis.length; i++) {
  if(lis[i].getAttribute('class').indexOf('building ') >= 0) {
   var t_name = lis[i].getElementsByTagName('h4')[0].innerHTML;
   var t_holz = 0;
   var t_wein = 0;
   var t_marmor = 0;
   var t_glas = 0;
   var t_schwefel = 0;
   var t_position = getPosition(href);
   
   var j=i+1;
   
   while(lis[j].getAttribute('class') != "time") {
    if(lis[j].getAttribute('class') == "wood"|| lis[j].getAttribute('class') == "wood alt") {
     t_holz = parseInt(lis[j].innerHTML.replace(/<span class=\"textLabel\">\w+: <\/span>/,"").replace(/\./g,""));
    }
    else if(lis[j].getAttribute('class') == "wine" || lis[j].getAttribute('class') == "wine alt")
     t_wein = parseInt(lis[j].innerHTML.replace(/<span class=\"textLabel\">\w+: <\/span>/,"").replace(/\./g,""));
    else if(lis[j].getAttribute('class') == "marble" || lis[j].getAttribute('class') == "marble alt")
     t_marmor = parseInt(lis[j].innerHTML.replace(/<span class=\"textLabel\">\w+: <\/span>/,"").replace(/\./g,""));
    else if(lis[j].getAttribute('class') == "glass" || lis[j].getAttribute('class') == "glass alt")
     t_glas = parseInt(lis[j].innerHTML.replace(/<span class=\"textLabel\">\w+: <\/span>/,"").replace(/\./g,""));
    else if(lis[j].getAttribute('class') == "sulfur" || lis[j].getAttribute('class') == "sulfur alt")
     t_schwefel = parseInt(lis[j].innerHTML.replace(/<span class=\"textLabel\">\w+: <\/span>/,"").replace(/\./g,""));
    
    j++;
   }

   if(isMarked2(t_name, t_position)) {
    lis[i].getElementsByTagName('h4')[0].innerHTML += unup2(t_name+"_"+t_position+"_"+getCurrentId());
    u_ids.push('unmarkUpdate2_'+t_name+"_"+t_position+"_"+getCurrentId());
   }
   else {
    lis[i].getElementsByTagName('h4')[0].innerHTML += up(t_name, t_holz,t_wein, t_marmor, t_glas, t_schwefel);
    m_ids.push(t_name+"_"+t_holz+"_"+t_wein+"_"+t_marmor+"_"+t_glas+"_"+t_schwefel);
   }
   
   if(lis[i].getElementsByTagName('a')[1]) {
    if(lis[i].getElementsByTagName('a')[1].getAttribute('class') == "button build") {
     var span = lis[i].getElementsByTagName('a')[1].firstChild;
     span.id = "unmarkUpdate_"+t_name+"_"+t_position+"_"+getCurrentId()+"_1";
     span.addEventListener('click', unmarkUpdate2, true);
     var a = lis[i].getElementsByTagName('a')[1];
     a.id = "unmarkUpdate_"+t_name+"_"+t_position+"_"+getCurrentId()+"_2";
     a.addEventListener('click', unmarkUpdate2, true);
    }
   }
  }
 }

 for(var k=0;k<u_ids.length;k++)
  document.getElementById(u_ids[k]).addEventListener('click', unmarkUpdate2, true);

 for(var k=0;k<m_ids.length;k++)
  document.getElementById(m_ids[k]).addEventListener('click', markUpdate2, true);
}


var city = document.getElementById('locations');
var info = document.getElementById('information');

var upgrd = document.getElementById('buildingUpgrade');
var backto = document.getElementById('backTo');

var show = false;
if(info && city) {
 if(info.innerHTML.search(/<li class="owner">/) == -1)
  show=true;
}
else if(upgrd) {
 show=true;
}
else if(document.getElementById('transportGoods')) {
 info=backto;
 show=true;
}
 
var bauliste = document.createElement('div');
bauliste.setAttribute('id','bauliste');
bauliste.setAttribute('class','dynamic');
bauliste.innerHTML = "<h3 class=\"header\">"+language["titel"]+" <a href=# id=showHideBauliste><img style='display:inline' id=\""+(hidden?"showBauliste":"hideBauliste")+"\" src=\""+(hidden?openimg:closeimg)+"\"></a></h3>";
var baulisteContent = document.createElement('div');
baulisteContent.setAttribute('class','content');
baulisteContent.setAttribute('id','baulisteContent');
if(hidden)
 baulisteContent.style.display = "none";
if(hasMarks())
 baulisteContent.innerHTML = buildList();

bauliste.appendChild(baulisteContent);
bauliste.innerHTML += "<div class=\"footer\"></div>";

if(show || buildings) {
 GM_addStyle("#baulisteContent ul li div{position:absolute;left:40px;display:none;background-color:#f1d7ad;border:1px solid #be8d53;border-top-width:4px;font-size:11px;line-height:1em;color:#542c0f;width:auto;white-space:nowrap;padding:4px 8px;z-index:9999999}");
 GM_addStyle("#baulisteContent ul li:hover div{display:block}");
 
 if(show) {
  if(upgrd)
   upgrd.parentNode.insertBefore(bauliste, upgrd.nextSibling);
  else if(info)
   info.parentNode.insertBefore(bauliste, info.nextSibling);
  

 }
 else {
  var bread = document.getElementById('breadcrumbs');

  bread.parentNode.insertBefore(bauliste, bread.nextSibling);
 }

 activateList();
 document.getElementById('showHideBauliste').addEventListener('click',showHide,true);
}

function buildList() {
 var out = "";
 var cities = getCityNames(); 
 for(var city in cities) {
  if(marks[city] != null && marks[city].length>0) {
   out += "<p style='line-height: 18px; margin: auto 5px'><b>"+cities[city]+"</b></p><ul>";
   
   for(var i in marks[city]) {
    if(marks[city][i]["Name"] != null) {
     var titel = language["cost"];
     var titel2 = language["missing"];
     if(titel != "" && titel.substring(titel.lastIndexOf(" ")) != " ")
      titel += " ";
     if(titel2 != "" && titel2.substring(titel2.lastIndexOf(" ")) != " ")
      titel2 += " ";

     var show_titel2 = false;

     if(marks[city][i]["Holz"]>0) {
      titel += language["wood"]+marks[city][i]["Holz"];
      if(Math.max(parseInt(marks[city][i]["Holz"])-parseInt(prod[city]["Holz"]), 0) > 0) {
       titel2 += language["wood"]+Math.max(parseInt(marks[city][i]["Holz"])-parseInt(prod[city]["Holz"]), 0);
       show_titel2 = true;
      }
     }
     if(titel != "" && titel.substring(titel.lastIndexOf(" ")) != " ")
      titel += " ";
     if(titel2 != "" && titel2.substring(titel2.lastIndexOf(" ")) != " ")
      titel2 += " ";
     if(marks[city][i]["Wein"]>0) {
      titel += language["wine"]+marks[city][i]["Wein"];
      if(Math.max(parseInt(marks[city][i]["Wein"])-parseInt(prod[city]["Wein"]), 0) > 0) {
       titel2 += language["wine"]+Math.max(parseInt(marks[city][i]["Wein"])-parseInt(prod[city]["Wein"]), 0);
       show_titel2 = true;
      }
     }
     if(titel != "" && titel.substring(titel.lastIndexOf(" ")) != " ")
      titel += " ";
     if(titel2 != "" && titel2.substring(titel2.lastIndexOf(" ")) != " ")
      titel2 += " ";
     if(marks[city][i]["Marmor"]>0) {
      titel += language["marble"]+marks[city][i]["Marmor"];
      if(Math.max(parseInt(marks[city][i]["Marmor"])-parseInt(prod[city]["Marmor"]), 0) > 0) {
       titel2 += language["marble"]+Math.max(parseInt(marks[city][i]["Marmor"])-parseInt(prod[city]["Marmor"]), 0);
       show_titel2 = true;
      }
     }
     if(titel != "" && titel.substring(titel.lastIndexOf(" ")) != " ")
      titel += " ";
     if(titel2 != "" && titel2.substring(titel2.lastIndexOf(" ")) != " ")
      titel2 += " ";
     if(marks[city][i]["Glas"]>0) {
      titel += language["glas"]+marks[city][i]["Glas"];
      if(Math.max(parseInt(marks[city][i]["Glas"])-parseInt(prod[city]["Glas"]), 0) > 0) {
       titel2 += language["glas"]+Math.max(parseInt(marks[city][i]["Glas"])-parseInt(prod[city]["Glas"]), 0);
       show_titel2 = true;
      }
     }
     if(titel != "" && titel.substring(titel.lastIndexOf(" ")) != " ")
      titel += " ";
     if(titel2 != "" && titel2.substring(titel2.lastIndexOf(" ")) != " ")
      titel2 += " ";
     if(marks[city][i]["Schwefel"]>0) {
      titel += language["sulfur"]+marks[city][i]["Schwefel"];
      if(Math.max(parseInt(marks[city][i]["Schwefel"])-parseInt(prod[city]["Schwefel"]), 0) > 0) {
       titel2 += language["sulfur"]+Math.max(parseInt(marks[city][i]["Schwefel"])-parseInt(prod[city]["Schwefel"]), 0);
       show_titel2 = true;
      }
     }

 //    if(show_titel2)
 //     titel = titel+" / "+titel2;

     "";



     var color=getColor(marks[city][i], prod[city]);

     out += "<li style='"+color+"line-height: 22px; margin: auto 7px'>"+marks[city][i]["Name"]+language["level"]+marks[city][i]["Stufe"]+calcTime(marks[city][i],prod[city])+unup(marks[city][i]["Name"], marks[city][i]["Position"], city)+"<div><span class=\"textLabel\" style='position:static;display:inline;left:0;height:auto;overflow:visible'>"+titel+"</span>";
     if(show_titel2)
      out += "<br/><span class=\"textLabel\" style='position:static;display:inline;left:0;height:auto;overflow:visible'>"+titel2+"</span>";
     out += "</div></li>";
    }
   }
   
   out += "</ul>";
  }
 }
 
 return out;
}

function activateList() {
 var cities = getCityNames();
 for(var city in cities) {
  for(var i in marks[city]) {
   document.getElementById('unmarkUpdate_'+marks[city][i]["Name"]+'_'+marks[city][i]["Position"]+'_'+city).addEventListener('click', unmarkUpdate2, true);
  }
 }
}

function hasMarks() {
 for(var i in marks)
  if(marks[i].length > 0)
   return true
 
 return false;
}

function showHide() {
 var showBauliste = document.getElementById('showBauliste');
 var hideBauliste = document.getElementById('hideBauliste');
 if(showBauliste) {
  document.getElementById('baulisteContent').style.display = "block";
  showBauliste.src = closeimg;
  showBauliste.id = "hideBauliste";
  GM_setValue(store+"-hide",false);
 }
 else if(hideBauliste){
  document.getElementById('baulisteContent').style.display = "none";
  hideBauliste.src = openimg;
  hideBauliste.id = "showBauliste";
  GM_setValue(store+"-hide",true);
 }
}

function getColor(obj,prod) {
 if(!prod) {
  var cur_holz = parseInt(document.getElementById('value_wood').innerHTML.replace(/\./g,""));
  var cur_wein = parseInt(document.getElementById('value_wine').innerHTML.replace(/\./g,""));
  var cur_marmor = parseInt(document.getElementById('value_marble').innerHTML.replace(/\./g,""));
  var cur_glas = parseInt(document.getElementById('value_crystal').innerHTML.replace(/\./g,""));
  var cur_schwefel = parseInt(document.getElementById('value_sulfur').innerHTML.replace(/\./g,""));
 }
 else {
  var d = new Date();
  var time = d.getFullYear()+"/"+d.getMonth()+"/"+d.getDate()+"/"+d.getHours()+"/"+d.getMinutes();
  var cur_holz = prod["Holz"]+calcProd(time,prod["update"],prod["Holz+"]);
  var cur_wein = prod["Wein"]+calcProd(time,prod["update"],prod["Wein+"]);
  var cur_marmor = prod["Marmor"]+calcProd(time,prod["update"],prod["Marmor+"]);
  var cur_glas = prod["Glas"]+calcProd(time,prod["update"],prod["Glas+"]);
  var cur_schwefel = prod["Schwefel"]+calcProd(time,prod["update"],prod["Schwefel+"]);
 }

 if(obj["Holz"] <= cur_holz && obj["Wein"] <= cur_wein && obj["Marmor"] <= cur_marmor && obj["Glas"] <= cur_glas && obj["Schwefel"] <= cur_schwefel)
  return "color: #00AB00;";
 else if (calcTime(obj, prod, true) == "")
  return "color: #AB0000;";
 else
  return "";
}

function calcTime(obj, prod, color) {
 if(prod == null) {
  var cur_holz = parseInt(document.getElementById('value_wood').innerHTML.replace(/\./g,""));
  var cur_wein = parseInt(document.getElementById('value_wine').innerHTML.replace(/\./g,""));
  var cur_marmor = parseInt(document.getElementById('value_marble').innerHTML.replace(/\./g,""));
  var cur_glas = parseInt(document.getElementById('value_crystal').innerHTML.replace(/\./g,""));
  var cur_schwefel = parseInt(document.getElementById('value_sulfur').innerHTML.replace(/\./g,""));

  if(obj["Holz"] <= cur_holz && obj["Wein"] <= cur_wein && obj["Marmor"] <= cur_marmor && obj["Glas"] <= cur_glas && obj["Schwefel"] <= cur_schwefel)
   return "";

  var h = 0;
  var w = 0;
  var m = 0;
  var g = 0;
  var s = 0;

  if(document.getElementById('value_wood').nextSibling.nextSibling.firstChild.nextSibling.innerHTML.indexOf(language["prod"],0) != -1)
   var h = parseInt(document.getElementById('value_wood').nextSibling.nextSibling.firstChild.nextSibling.nextSibling.nodeValue.replace(/\./g, ""));
  if(document.getElementById('value_wine').nextSibling.nextSibling.firstChild.nextSibling.innerHTML.indexOf(language["prod"],0) != -1)
   var w = parseInt(document.getElementById('value_wine').nextSibling.nextSibling.firstChild.nextSibling.nextSibling.nodeValue.replace(/\./g, ""));
  if(document.getElementById('value_marble').nextSibling.nextSibling.firstChild.nextSibling.innerHTML.indexOf(language["prod"],0) != -1)
   var m = parseInt(document.getElementById('value_marble').nextSibling.nextSibling.firstChild.nextSibling.nextSibling.nodeValue.replace(/\./g, ""));
  if(document.getElementById('value_crystal').nextSibling.nextSibling.firstChild.nextSibling.innerHTML.indexOf(language["prod"],0) != -1)
   var g = parseInt(document.getElementById('value_crystal').nextSibling.nextSibling.firstChild.nextSibling.nextSibling.nodeValue.replace(/\./g, ""));
  if(document.getElementById('value_sulfur').nextSibling.nextSibling.firstChild.nextSibling.innerHTML.indexOf(language["prod"],0) != -1)
   var s = parseInt(document.getElementById('value_sulfur').nextSibling.nextSibling.firstChild.nextSibling.nextSibling.nodeValue.replace(/\./g, ""));
 }
 else {
  var h = prod["Holz+"];
  var w = prod["Wein+"];
  var m = prod["Marmor+"];
  var g = prod["Glas+"];
  var s = prod["Schwefel+"];

  var d = new Date();
  var time = d.getFullYear()+"/"+d.getMonth()+"/"+d.getDate()+"/"+d.getHours()+"/"+d.getMinutes();
  var cur_holz = prod["Holz"]+calcProd(time,prod["update"],h);
  var cur_wein = prod["Wein"]+calcProd(time,prod["update"],w);
  var cur_marmor = prod["Marmor"]+calcProd(time,prod["update"],m);
  var cur_glas = prod["Glas"]+calcProd(time,prod["update"],g);
  var cur_schwefel = prod["Schwefel"]+calcProd(time,prod["update"],s);

  if(obj["Holz"] <= cur_holz && obj["Wein"] <= cur_wein && obj["Marmor"] <= cur_marmor && obj["Glas"] <= cur_glas && obj["Schwefel"] <= cur_schwefel)
   return "";

 }
 
 
 
 var time = new Array(-1,-1,-1,-1,-1);
 
 if(parseInt(obj["Holz"])-cur_holz <= 0)
  time[0] = 0;
 else if(h>0)
  time[0] = (parseInt(obj["Holz"])-cur_holz)/h;
 if(parseInt(obj["Wein"])-cur_wein <= 0)
  time[1] = 0;
 else if(w>0)
  time[1] = (parseInt(obj["Wein"])-cur_wein)/w;
 if(parseInt(obj["Marmor"])-cur_marmor <= 0)
  time[2] = 0;
 else if(m>0)
  time[2] = (parseInt(obj["Marmor"])-cur_marmor)/m;
 if(parseInt(obj["Glas"])-cur_glas <= 0)
  time[3] = 0;
 else if(g>0)
  time[3] = (parseInt(obj["Glas"])-cur_glas)/g;
 if(parseInt(obj["Schwefel"])-cur_schwefel <= 0)
  time[4] = 0;
 else if(s>0)
  time[4] = (parseInt(obj["Schwefel"])-cur_schwefel)/s;
  
 if(Math.min(time[0],time[1],time[2],time[3],time[4]) == -1 && color)
  return "";
 
 var t = Math.max(time[0],time[1],time[2],time[3],time[4]);
 
 if(t==-1)
  return "";
 
 var d = parseInt(Math.floor(t/24));
 var t = t-d*24;
 var h = parseInt(Math.floor(t));
 var t = t-h;
 var m = parseInt(Math.floor(t*60));

 var out_d = d+"d ";
 if(d==0)
  out_d="";

 var out_h = h+"h ";
 if(h<10 && d!=0)
  out_h= "0"+out_h;
 
 if(h==0 && d==0)
  out_h= "";
 

 var out_m = m+"m"; 
 if(m<10 && d!=0 && h!=0)
  out_m= "0"+out_m;
 if(m==0 && d==0 && h==0)
  return "";

 return " <font size=-2>("+out_d+out_h+out_m+")</font>";
}

function isMarked() {
 var name=language[document.body.getAttribute('id')];
 var position=getPosition(href);
 
 for(var i in marks[getCurrentId()]) {
  if(marks[getCurrentId()][i]["Name"] == name && marks[getCurrentId()][i]["Position"] == position)
   return true;
 }
 
 return false;
}

function isMarked2(name, position) {
 for(var i in marks[getCurrentId()]) {
  if(marks[getCurrentId()][i]["Name"] == name && marks[getCurrentId()][i]["Position"] == position)
   return true;
 }
 
 return false;
}

function indexOf(name, position) {
 for(var i in marks[getCurrentId()]) {
  if(marks[getCurrentId()][i]["Name"] == name && marks[getCurrentId()][i]["Position"] == position)
   return i;
 }
 
 return -1;
}

function markUpdate() {
 var name=language[document.body.getAttribute('id')];
 var position=getPosition(href);
 
 if(marks[getCurrentId()] == null)
  marks[getCurrentId()] = new Array();
  
 var mark = new Object();
 
 mark["Name"] = name;
 mark["Position"] = position;
 mark["Stufe"] = stufe;
 mark["Holz"] = holz;
 mark["Wein"] = wein;
 mark["Marmor"] = marmor;
 mark["Glas"] = glas;
 mark["Schwefel"] = schwefel;
 
 marks[getCurrentId()].push(mark);
 
 GM_setValue(store+"-marks",storeArray(marks));
 
 document.getElementById('markUpdate').src = unsrc;
 document.getElementById('markUpdate').title = language["delupgrade"];
 document.getElementById('markUpdate').removeEventListener('click', markUpdate, true);
 document.getElementById('markUpdate').addEventListener('click', unmarkUpdate, true);
 document.getElementById('markUpdate').id = "unmarkUpdate";
 document.getElementById('baulisteContent').innerHTML = buildList();
 activateList();
}

function markUpdate2(event) {
 var data = event.target.id.split("_");
 var position=getPosition(href);
 
 if(marks[getCurrentId()] == null)
  marks[getCurrentId()] = new Array();
  
 var mark = new Object();
 
 mark["Name"] = data[0];
 mark["Position"] = position;
 mark["Stufe"] = 1;
 mark["Holz"] = data[1];
 mark["Wein"] = data[2];
 mark["Marmor"] = data[3];
 mark["Glas"] = data[4];
 mark["Schwefel"] = data[5];
  
 marks[getCurrentId()].push(mark);
 
 GM_setValue(store+"-marks",storeArray(marks));
 
 event.target.src = unsrc;
 event.target.title = language["delupgrade"];
 event.target.removeEventListener('click', markUpdate2, true);
 event.target.addEventListener('click', unmarkUpdate2, true);
 event.target.id = "unmarkUpdate2_"+data[0]+"_"+position+"_"+getCurrentId();
 document.getElementById('baulisteContent').innerHTML = buildList();
 activateList();
}

function unmarkUpdate() {
 var name=language[document.body.getAttribute('id')];
 var position=getPosition(href);

 for(var i in marks[getCurrentId()]) {
  if(marks[getCurrentId()][i]["Name"] == name && marks[getCurrentId()][i]["Position"] == position)
   marks[getCurrentId()].splice(i,1);
 }

 GM_setValue(store+"-marks",storeArray(marks));


 document.getElementById('unmarkUpdate').src = upsrc;
 document.getElementById('unmarkUpdate').title = language["upgrade"];
 document.getElementById('unmarkUpdate').removeEventListener('click', unmarkUpdate, true);
 document.getElementById('unmarkUpdate').addEventListener('click', markUpdate, true);
 document.getElementById('unmarkUpdate').id = "markUpdate";
 document.getElementById('baulisteContent').innerHTML = buildList();
 activateList();
}

function unmarkUpdate2(event) {
 var data = event.target.id.split("_");
 var name = data[1];
 var position=data[2];
 var city = data[3];

 var tname=language[document.body.getAttribute('id')];
 var cpos=getPosition(href)

 var upgrade = document.getElementById('buildingUpgrade');
 if(upgrade) {
  if(isMarked() && tname==name && getCurrentId()==city && position==cpos) {
   document.getElementById('unmarkUpdate').src = upsrc;
   document.getElementById('unmarkUpdate').title = language["upgrade"];
   document.getElementById('unmarkUpdate').removeEventListener('click', unmarkUpdate, true);
   document.getElementById('unmarkUpdate').addEventListener('click', markUpdate, true);
   document.getElementById('unmarkUpdate').id = "markUpdate";
  }
 }
 var buildings = document.getElementById('buildings');
 if(buildings) {
  if(isMarked2(name, position) && getCurrentId()==city && position==cpos) {
   document.getElementById('unmarkUpdate2_'+name+'_'+position+'_'+city).src = upsrc;
   document.getElementById('unmarkUpdate2_'+name+'_'+position+'_'+city).title = language["upgrade"];
   document.getElementById('unmarkUpdate2_'+name+'_'+position+'_'+city).removeEventListener('click', unmarkUpdate2, true);
   document.getElementById('unmarkUpdate2_'+name+'_'+position+'_'+city).addEventListener('click', markUpdate2, true);
   document.getElementById('unmarkUpdate2_'+name+'_'+position+'_'+city).id = name+"_"+marks[city][indexOf(name,position)]["Holz"]+"_"+marks[city][indexOf(name,position)]["Wein"]+"_"+marks[city][indexOf(name,position)]["Marmor"]+"_"+marks[city][indexOf(name,position)]["Glas"]+"_"+marks[city][indexOf(name,position)]["Schwefel"];
  }
 }
 
 if(data[0].indexOf("2") != -1) {
  event.target.src = upsrc;
  event.target.title = language["upgrade"];
  event.target.removeEventListener('click', unmarkUpdate2, true);
  event.target.addEventListener('click', markUpdate2, true);
  event.target.id = name+"_"+marks[city][indexOf(name,position)]["Holz"]+"_"+marks[city][indexOf(name,position)]["Wein"]+"_"+marks[city][indexOf(name,position)]["Marmor"]+"_"+marks[city][indexOf(name,position)]["Glas"]+"_"+marks[city][indexOf(name,position)]["Schwefel"];
 }
 
 for(var i in marks[city]) {
  if(marks[city][i]["Name"] == name && ""+marks[city][i]["Position"] == position)
   marks[city].splice(i,1);
 }

 GM_setValue(store+"-marks",storeArray(marks));

 document.getElementById('baulisteContent').innerHTML = buildList();
 activateList();
}

function getPosition(href) {
 var pos = href.substring(href.indexOf("position"));
 if(href.indexOf("position")<=0)
  pos="0";
 else
  pos=pos.substring(pos.indexOf("=")+1);
  
 if(pos.indexOf("&")>=0)
  pos=pos.substring(0,pos.indexOf("&"));
  
 return pos;
}

function storeArray(array) {
 return array.toSource();
}

function loadArray(string) {
 if(string=="")
  return new Object();
 else
  return eval(string);
}

function getCurrentId() {
 return document.getElementById('citySelect').value;
}

function sumMarks() {
 var sums = new Object();
 sums["Holz"] = 0;
 sums["Wein"] = 0;
 sums["Marmor"] = 0;
 sums["Glas"] = 0;
 sums["Schwefel"] = 0;
 for(var i in marks[getCurrentId()]) {
  sums["Holz"] += marks[getCurrentId()][i]["Holz"];
  sums["Wein"] += marks[getCurrentId()][i]["Wein"];
  sums["Marmor"] += marks[getCurrentId()][i]["Marmor"];
  sums["Glas"] += marks[getCurrentId()][i]["Glas"];
  sums["Schwefel"] += marks[getCurrentId()][i]["Schwefel"];
 }
 
 return sums;
}

function up(n, h, w, m, g, s) {
 return "<img id="+n+"_"+h+"_"+w+"_"+m+"_"+g+"_"+s+" style='margin: auto 510px;' src='"+upsrc+"' title='"+language["upgrade2"]+"'>";
}

function unup2(name) {
 return "<img id='unmarkUpdate2_"+name+"' style='margin: auto 510px;' src='"+unsrc+"' title='"+language["delupgrade"]+"'>";
}

function unup(name, position, city) {
 return "<img id='unmarkUpdate_"+name+"_"+position+"_"+city+"' style='float:right; margin:auto 0px; width:12px; height:12px' src='"+unsrc+"' title='"+language["delupgrade"]+"'>";
}

function getCityIds() {
 var cities = document.getElementById('citySelect').getElementsByTagName('option');
 var result = Array();
 
 for(var i=0; i<cities.length; i++)
  result[i]=cities[i].getAttribute('value');
  
 return result;
}

function getCityNames() {
 var cities = document.getElementById('citySelect').getElementsByTagName('option');
 var result = new Object();
 
 for(var i=0; i<cities.length; i++)
  result[cities[i].getAttribute('value')]=cities[i].innerHTML.replace(/&nbsp;/g," ");
  
 return result;
}

function calcProd(time1, time2, perh) {
 if(!time1 || !time2 || !perh)
  return 0;
 var DSTAdjust = 0;
 // constants used for our calculations below
 oneMinute = 1000 * 60;
 var oneHour = oneMinute * 60;
 // equalize times in case date objects have them
 var date1 = new Date();
 date1.setYear(parseInt(time1.split("/")[0]));
 date1.setMonth(parseInt(time1.split("/")[1]));
 date1.setDate(parseInt(time1.split("/")[2]));
 date1.setHours(parseInt(time1.split("/")[3]));
 date1.setMinutes(parseInt(time1.split("/")[4]));
 date1.setSeconds(0);
 var date2 = new Date();
 date2.setYear(parseInt(time2.split("/")[0]));
 date2.setMonth(parseInt(time2.split("/")[1]));
 date2.setDate(parseInt(time2.split("/")[2]));
 date2.setHours(parseInt(time2.split("/")[3]));
 date2.setMinutes(parseInt(time2.split("/")[4]));
 date2.setSeconds(0);
 // take care of spans across Daylight Saving Time changes
 if (date2 > date1) {
 DSTAdjust = 
     (date2.getTimezoneOffset() - date1.getTimezoneOffset()) * oneMinute;
 } else {
 DSTAdjust = 
     (date1.getTimezoneOffset() - date2.getTimezoneOffset()) * oneMinute;    
 }
 var diff = Math.abs(date2.getTime() - date1.getTime()) - DSTAdjust;
 return Math.floor(diff/oneHour*perh);
}

0 comments:

Post a Comment