DS Nachbardörfer Details

By C1B1 Last update Mar 8, 2009 — Installed 1,826 times.
// ==UserScript==
// @name          DS Nachbardörfer Details
// @namespace     c1b1.de
// @include       http://de*.die-staemme.de/game.php*screen=place*mode=neighbor*
// ==/UserScript==

// ds.voisinVillageDetails.user.js

// Version 0.5

/*
DS Nachbardörfer Details

(c) by C1B1SE
         info@c1b1.de
         http://c1b1.de

You may change string values if it's necessary for your language area.
Do not republish, use in other scripts, change or reproduce this code nor a part of this code without permission from C1B1SE.

This script may be forbidden in some language areas.
Please look in the respective forum for further information!
I won't take responsibility.

XML Daten von einem Dorf:
http://de[world].die-staemme.de/game.php?screen=overview&xml&village=[aim]&source=[start]
[world]       Welt
[aim]         ID des Zieldorfes (über dieses Dorf werden Infos gezeigt)
[start]       ID des Startdorfes (wegen Laufzeiten) {optional}

Gruppeninfo zusätzlich:
http://[world].die-staemme.de/groups.php?mode=village&village_id=[village]
[world]       Welt
[village]     ID des Dorfs dessen Gruppe angezeigt werden soll
*/

var world = document.location.href.split('.').shift().split('de').pop();
var village_page = document.location.href.split('&')[0].split('=').pop();

void addEvents2Villages();

function $(id) { return document.getElementById(id); };
function name(name) { return document.getElementsByName(name); };
function tag(name) { return document.getElementsByTagName(name); };
function class(name) { return document.getElementsByClassName(name); };
function d(id) { document.getElementById(id).parentNode.removeChild(document.getElementById(id)); };
function n(tag) { return document.createElement(tag); };
function t(str) { return document.createTextNode(str); };
function nimg(src) { var img = n('img'); img.setAttribute('src',src); return img; };
function stringInt(int) { if(!int) return 0; var string = parseInt(int).toString(10); var reo = new RegExp('(-?[0-9]+)([0-9]{3})'); while(reo.test(string)) string = string.replace(reo,'$1.$2'); return string; };


function addEvents2Villages()
  {
  var table = class('vis')[1];
  table.setAttribute('id','neighbor_villages_table')

  var villages = table.getElementsByTagName('tr');

  for(var i = 1; i < villages.length; i++)
    {
    var td = villages[i].getElementsByTagName('td')[0];
    var link = td.getElementsByTagName('a')[0];
    var village_id = link.getAttribute('href').split('=')[1].split('&').shift();
    td.setAttribute('title',village_id);
    td.addEventListener('mouseover',show_popUp,false);
    td.addEventListener('mouseout',hide_popUp,false);
    td.addEventListener('mousemove',move_popUp,false);
    }
  }

function show_popUp(e)
  {
  var village_id = this.getAttribute('title');

  if(!$('details_popup'))
    {
    var div = n('div');
    div.setAttribute('id','details_popup');
    div.setAttribute('style','position:absolute; background:url(../graphic/background/content.jpg); border:2px solid #804000;');
    div.style.left = 25+e.pageX + 'px';
    div.style.top = 25+e.pageY + 'px';

    var img = new Image();
    img.setAttribute('alt','Laden . . . . ');
    img.setAttribute('src','graphic/throbber.gif');
    div.appendChild(img);

    document.getElementsByTagName('body')[0].appendChild(div);
    }
  else if($('details_popup').getAttribute('title') == village_id)
    {
    var div = $('details_popup');
    div.style.left = 25+e.pageX + 'px';
    div.style.top = 25+e.pageY + 'px';
    div.style.display = 'block';
    return 0;
    }
  else
    {
    var div = $('details_popup');
    div.style.left = 25+e.pageX + 'px';
    div.style.top = 25+e.pageY + 'px';
    div.style.display = 'block';
    div.innerHTML = '';
    var img = new Image();
    img.setAttribute('alt','Laden . . . . ');
    img.setAttribute('src','graphic/throbber.gif');
    div.appendChild(img);
    }

  GM_xmlhttpRequest({
    method:"GET",
    url:"http://de"+world+".die-staemme.de/game.php?screen=overview&xml&village="+village_id+"&source="+village_page,
    onload:function(response) {
      var parserObj = new DOMParser();
      var obj = parserObj.parseFromString(response.responseText,"text/xml")
      div.setAttribute('title',village_id);
      parse_popUp(div,obj);
      }
    });

  }

function move_popUp(e)
  {
  var village_id = this.getAttribute('title');
  if($('details_popup').getAttribute('title') == village_id)
    {
    var div = $('details_popup');
    div.style.left = 25+e.pageX + 'px';
    div.style.top = 25+e.pageY + 'px';
    div.style.display = 'block';
    return 0;
    }
  }

function parse_popUp(div,data)
  {
  var content = n('div')

  var xml_village = data.getElementsByTagName('village')[0];

  var values = [
  'wood',
  'stone',
  'iron',
  'trader_current',
  'trader_total',
  'pop',
  'pop_max',
  'storage_max',
  'unit_spear',
  'unit_sword',
  'unit_axe',
  'unit_archer',
  'unit_spy',
  'unit_light',
  'unit_marcher',
  'unit_heavy',
  'unit_ram',
  'unit_catapult',
  'unit_knight',
  'unit_snob',
  'time_unit_spear',
  'time_unit_sword',
  'time_unit_axe',
  'time_unit_archer',
  'time_unit_spy',
  'time_unit_light',
  'time_unit_marcher',
  'time_unit_heavy',
  'time_unit_ram',
  'time_unit_catapult',
  'time_unit_knight',
  'time_unit_snob' ];

  var data = { };
  for(var i = 0; i < values.length; i++)
    {
    if(xml_village.getElementsByTagName(values[i])[0])
      data[values[i]] = xml_village.getElementsByTagName(values[i])[0].firstChild.nodeValue;
    }

  // Resources
  var table = n('table');
  var tr = n('tr');

  var td = n('td');
  td.appendChild(nimg('graphic/holz.png'));
  td.appendChild(t( stringInt(data.wood) ));
  tr.appendChild(td);

  var td = n('td');
  td.appendChild(nimg('graphic/lehm.png'));
  td.appendChild(t( stringInt(data.stone) ));
  tr.appendChild(td);

  var td = n('td');
  td.appendChild(nimg('graphic/eisen.png'));
  td.appendChild(t( stringInt(data.iron) ));
  tr.appendChild(td);

  var td = n('td');
  td.setAttribute('style','border-left: 1px dotted;');
  td.appendChild(nimg('graphic/res.png'));
  td.appendChild(t( stringInt(data.storage_max) ));
  tr.appendChild(td);

  table.appendChild(tr);
  content.appendChild(table);

  // Merchants and Workers
  var table = n('table');
  var tr = n('tr');

  var td = n('td');
  td.appendChild(nimg('graphic/buildings/market.png'));
  td.appendChild(t( stringInt(data.trader_current) +'/'+ stringInt(data.trader_total) ));
  tr.appendChild(td);

  var td = n('td');
  td.appendChild(nimg('graphic/face.png'));
  td.appendChild(t( stringInt(data.pop) +'/'+ stringInt(data.pop_max) ));
  tr.appendChild(td);

  table.appendChild(tr);
  content.appendChild(table);

  // Units
  var table = n('table');
  var tr = n('tr');

  var td = n('td');
  td.setAttribute('style','text-align:center; ');
  td.appendChild(nimg('graphic/unit/unit_spear.png'));
  tr.appendChild(td);

  var td = n('td');
  td.setAttribute('style','text-align:center; ');
  td.appendChild(nimg('graphic/unit/unit_sword.png'));
  tr.appendChild(td);

  var td = n('td');
  td.setAttribute('style','text-align:center; ');
  td.appendChild(nimg('graphic/unit/unit_axe.png'));
  tr.appendChild(td);

  var td = n('td');
  td.setAttribute('style','text-align:center; ');
  td.appendChild(nimg('graphic/unit/unit_archer.png'));
  tr.appendChild(td);

  var td = n('td');
  td.setAttribute('style','text-align:center; ');
  td.appendChild(nimg('graphic/unit/unit_spy.png'));
  tr.appendChild(td);

  var td = n('td');
  td.setAttribute('style','text-align:center; ');
  td.appendChild(nimg('graphic/unit/unit_light.png'));
  tr.appendChild(td);

  var td = n('td');
  td.setAttribute('style','text-align:center; ');
  td.appendChild(nimg('graphic/unit/unit_marcher.png'));
  tr.appendChild(td);

  var td = n('td');
  td.setAttribute('style','text-align:center; ');
  td.appendChild(nimg('graphic/unit/unit_heavy.png'));
  tr.appendChild(td);

  var td = n('td');
  td.setAttribute('style','text-align:center; ');
  td.appendChild(nimg('graphic/unit/unit_ram.png'));
  tr.appendChild(td);

  var td = n('td');
  td.setAttribute('style','text-align:center; ');
  td.appendChild(nimg('graphic/unit/unit_catapult.png'));
  tr.appendChild(td);

  var td = n('td');
  td.setAttribute('style','text-align:center; ');
  td.appendChild(nimg('graphic/unit/unit_knight.png'));
  tr.appendChild(td);

  var td = n('td');
  td.setAttribute('style','text-align:center; ');
  td.appendChild(nimg('graphic/unit/unit_snob.png'));
  tr.appendChild(td);

  table.appendChild(tr);

  var tr = n('tr');

  var td = n('td');
  td.setAttribute('style','text-align:center; ');
  td.appendChild(t( stringInt(data.unit_spear) ));
  tr.appendChild(td);

  var td = n('td');
  td.setAttribute('style','text-align:center; ');
  td.appendChild(t( stringInt(data.unit_sword) ));
  tr.appendChild(td);

  var td = n('td');
  td.setAttribute('style','text-align:center; ');
  td.appendChild(t( stringInt(data.unit_axe) ));
  tr.appendChild(td);

  var td = n('td');
  td.setAttribute('style','text-align:center; ');
  td.appendChild(t( stringInt(data.unit_archer) ));
  tr.appendChild(td);

  var td = n('td');
  td.setAttribute('style','text-align:center; ');
  td.appendChild(t( stringInt(data.unit_spy) ));
  tr.appendChild(td);

  var td = n('td');
  td.setAttribute('style','text-align:center; ');
  td.appendChild(t( stringInt(data.unit_light) ));
  tr.appendChild(td);

  var td = n('td');
  td.setAttribute('style','text-align:center; ');
  td.appendChild(t( stringInt(data.unit_marcher) ));
  tr.appendChild(td);

  var td = n('td');
  td.setAttribute('style','text-align:center; ');
  td.appendChild(t( stringInt(data.unit_heavy) ));
  tr.appendChild(td);

  var td = n('td');
  td.setAttribute('style','text-align:center; ');
  td.appendChild(t( stringInt(data.unit_ram) ));
  tr.appendChild(td);

  var td = n('td');
  td.setAttribute('style','text-align:center; ');
  td.appendChild(t( stringInt(data.unit_catapult) ));
  tr.appendChild(td);

  var td = n('td');
  td.setAttribute('style','text-align:center; ');
  td.appendChild(t( stringInt(data.unit_knight) ));
  tr.appendChild(td);

  var td = n('td');
  td.setAttribute('style','text-align:center; ');
  td.appendChild(t( stringInt(data.unit_snob) ));
  tr.appendChild(td);

  table.appendChild(tr);

  var tr = n('tr');

  var td = n('td');
  td.setAttribute('style','text-align:center; font-size:7pt; ');
  td.appendChild(t( data.time_unit_spear ));
  tr.appendChild(td);

  var td = n('td');
  td.setAttribute('style','text-align:center; font-size:7pt; ');
  td.appendChild(t( data.time_unit_sword ));
  tr.appendChild(td);

  var td = n('td');
  td.setAttribute('style','text-align:center; font-size:7pt; ');
  td.appendChild(t( data.time_unit_axe ));
  tr.appendChild(td);

  var td = n('td');
  td.setAttribute('style','text-align:center; font-size:7pt; ');
  td.appendChild(t( data.time_unit_archer ));
  tr.appendChild(td);

  var td = n('td');
  td.setAttribute('style','text-align:center; font-size:7pt; ');
  td.appendChild(t( data.time_unit_spy ));
  tr.appendChild(td);

  var td = n('td');
  td.setAttribute('style','text-align:center; font-size:7pt; ');
  td.appendChild(t( data.time_unit_light ));
  tr.appendChild(td);

  var td = n('td');
  td.setAttribute('style','text-align:center; font-size:7pt; ');
  td.appendChild(t( data.time_unit_marcher ));
  tr.appendChild(td);

  var td = n('td');
  td.setAttribute('style','text-align:center; font-size:7pt; ');
  td.appendChild(t( data.time_unit_heavy ));
  tr.appendChild(td);

  var td = n('td');
  td.setAttribute('style','text-align:center; font-size:7pt; ');
  td.appendChild(t( data.time_unit_ram ));
  tr.appendChild(td);

  var td = n('td');
  td.setAttribute('style','text-align:center; font-size:7pt; ');
  td.appendChild(t( data.time_unit_catapult ));
  tr.appendChild(td);

  var td = n('td');
  td.setAttribute('style','text-align:center; font-size:7pt; ');
  td.appendChild(t( data.time_unit_knight ));
  tr.appendChild(td);

  var td = n('td');
  td.setAttribute('style','text-align:center; font-size:7pt; ');
  td.appendChild(t( data.time_unit_snob ));
  tr.appendChild(td);

  table.appendChild(tr);

  content.appendChild(table);

  // Group
  var table = n('table');
  var tr = n('tr');

  var td = n('td');
  td.setAttribute('id','details_popup_groupTD');
  if(!$('neighbor_villages_table_group_id_'+$('details_popup').getAttribute('title')))
    {
    getGroups($('details_popup').getAttribute('title'));
    td.appendChild(nimg('graphic/throbber.gif'));
    }
  else
    {
    td.appendChild( $('neighbor_villages_table_group_id_'+$('details_popup').getAttribute('title')).firstChild.cloneNode(true) );
    }
  tr.appendChild(td);

  table.appendChild(tr);
  content.appendChild(table);

  // (c)
  var copyr = String.fromCharCode('0169')+' c1b1.de  - You\'re cheating!';

  var c = n('din');
  c.setAttribute('style','font-size:smaller; float:right; ');
  c.setAttribute('title','DS Nachbardörfer Details - http://c1b1.de');
  c.appendChild(document.createTextNode(copyr));

  content.appendChild(c);

  div.innerHTML = '';
  div.appendChild(content);
  }


function hide_popUp()
  {
  if(document.getElementById('details_popup'))
    {
    var obj = document.getElementById('details_popup');
    obj.style.display = 'none';
    }
  }

function getGroups(id)
  {
  GM_xmlhttpRequest({
    method:"GET",
    url:"http://de"+world+".die-staemme.de/groups.php?mode=village&village_id="+id,
    onload:function(response) {
      var obj = n('div');
      obj.setAttribute('style','display:none;');
      obj.innerHTML = response.responseText.split('<form method="post" action="/groups.php?action=village">').pop().split('</form>').shift();
      tag('body')[0].appendChild(obj);
      var groups = [ ];
      for(var i = 0,elist = obj.getElementsByTagName('input'); i < elist.length; i++)
        {
        if(elist[i].checked)
          {
          groups.push(elist[i].nextSibling.nodeValue);
          }
        }
      var text = t ( 'Gruppen: ' + groups.join(', ') );
      $('details_popup_groupTD').replaceChild(text,$('details_popup_groupTD').getElementsByTagName('img')[0]);

      // Add group to table:
      if(!$('neighbor_villages_table_group_id_'+id))
        {
        var table = $('neighbor_villages_table');
        var villages = table.getElementsByTagName('tr');

        for(var i = 1; i < villages.length; i++)
          {
          var td = villages[i].getElementsByTagName('td')[0];
          var link = td.getElementsByTagName('a')[0];
          var village_id = link.getAttribute('href').split('=')[1].split('&').shift();
          if(village_id == id)
            {
            var td = n('td');
            td.setAttribute('id','neighbor_villages_table_group_id_'+id)
            td.appendChild( t ( 'Gruppen: ' + groups.join(', ') ) );
            villages[i].appendChild(td);
            break;
            }
          }
        }
      }
    });
  }