// ==UserScript==
// @name            Erweiterte Dorfinfos
// @description     Zeigt Infos aus Berichten direkt im Infopopup auf der Karte.
// @version         2.1.1b (2009-12-01 09:51)
// @author          Simon Hilz, realneode, Peety, Heinzelmaenchen
// @include         http://*.*staemme.*/game.php?*screen=map*
// @include         http://*.*staemme.*/game.php?*village=*&screen=report&mode=all*
// @include         http://*.*staemme.*/game.php?*village=*&screen=report&mode=attack*
// @include         http://*.*staemme.*/game.php?*screen=info_village&id=*
// @include         http://*.tribalwars.nl/game.php?*screen=map*
// @include         http://*.tribalwars.nl/game.php?*village=*&screen=report&mode=all*
// @include         http://*.tribalwars.nl/game.php?*village=*&screen=report&mode=attack*
// @include         http://*.tribalwars.nl/game.php?*screen=info_village&id=*
// @include         file:///*:/*dorfinfos/*.html
// @include         file:///*:/*dorpsinfo/*.html
// ==/UserScript==

var server = document.location.host.split('.')[0];
var akt_map = "mapOld"; 	
var watch_map = false; 
var watch_map_timer;
if ((document.location.href.match(/dorfinfos/)) || (document.location.href.match(/dorpsinfo/))) {
	var sicherexp = [];	
	var sicherimp = [];	
	var sichersave= [];
	sicherexp[0] = "Möchtest du jetzt alle Dorfinformationen und Einstellungen sichern";		// de
	sicherimp[0] = "Möchtest du die Dorfinformationen und Einstellungen importieren";
	sichersave[0]= "Mit 'Seite speichern unter' jetzt die Datei speichern in den Ordner 'dorfinfos'."
	sicherexp[1] = "Wil je nu alle dorpsinformatie en instellingen opslaan";				// nl
	sicherimp[1] = "Wil je alle dorpsinformatie en instellingen importeren";
	sichersave[1]= "Sla nu het bestand op met 'Pagina opslaan als...' in de map 'dorpsinfo'."
	sicherexp[2] = "Wosch du jetz aui Dorfinfos und Istellige sichere";					// ch
	sicherimp[2] = "Wosch du aui Dorfinfos und Istellige jetz iläsä";
	sichersave[2]= "Mit 'Seite speichern unter' jetz bitte d Datei spichere im Ordner 'Dorfinfos'."
}
if (server != "") { 
	var language = document.location.host.match(/^\D+/)[0];
} 
else { 
	language = "??";
}
var lang = 0;
if(language == "nl") {
	lang = 1;
	var rohstoffe = ["Hout","Leem","IJzer"];	
	var names = ["Houthakkers", "Leemgroeve", "IJzermijn", "Opslagplaats", "Schuilplaats", "Muur"];
	var ausdruck =[/Aanvaller:/,/de Verdediger/,/Verdediger:/,/Buit:/,/Toestemming/,/Spionage/,/Dorpoverzicht/];
	var bonusliste = [/houtprod/,/leemprod/,/ijzerprod/,/grondstofprod/,/opslagplaats cap/,/kazerne/,/stal/,/werkplaats/,/bevolking/,/(\d+)% [verhoog,snell,meer]/];
	var a_text = ["Toestemming","geen","geen bekend","niet bekend","Grondstoffen","Farm eenheden","Gebouwen","Bericht is ouder dan","dagen","weken","","Troepen","buiten","Info"];
	var opt_text = ["Level","Troepen aantonen","Grondstoffen aantonen","Gebouwen en toestemming","Snelheid","Waarschuwing bij oudere berichten","Dorpsinfo instellingen","Instellingen verbergen"];
	var meldungen = ["Dorpsinfomatie","Eigen dorp","Dorpsinfo","verwijderd","gedeeltelijk bijgewerkt","bijgewerkt","Dit bericht is al geïmporteerd","Dit bericht is verouderd","geregistreerd","niet verwijderd"];
	var loeschen = ["Alle dorpsinfomatie verwijderen","Dorpsinfomatie verwijderen","Geen dorpsinformatie beschikbaar"];
	var sicherheit = "Weet je zeker dat je alle dorpinformaties van deze wereld wilt verwijderen ?";
	var gamespeed = [0,1,1,1,1.5,1.5,1.5,2,1.5,1,1,1,1.5,2,1.5];	// wereld 14
	var unitspeed = [0,1,1,1,0.66,0.66,0.66,0.5,0.66,1,1,1,0.66,0.5,0.66];
	var loy_speed = [0,1,1,1,1.5,1.5,1.5,2,1.5,1,1,1,1.5,2,1.5];
}
else if(language == "ch") {
	lang = 2;
	var rohstoffe = ["Houz","Lehm","Isä"];
	var names = ["Houzfäuer","Lehmgruebe","Isemine","Spicher","Vrsteck","Wall"];
	var ausdruck =[/Agrifer:/,/vom Vrteidiger/,/Vrteidiger:/,/Beute:/,/Zuestimmig/,/Spionage/,/Dorfübersicht/];
	var bonusliste = [/Houzprod/,/Lehmprod/,/Iseprod/,/Rohstoffprod/,/Spicherkap/,/Kasärne/,/Stau/,/Wärkstatt/,/Bevöukerig/,/(\d+)% [meh,schneuer]/];
	var a_text = ["Zuestimmig","ke","ke bekannt","nid bekannt","Rohstoffe","Farmiheite","Geböide","Bricht isch meh aus","Täg","Wuche","aut","Truppe","uswärts","Info"];
	var opt_text = ["Stufe","Truppe azeige","Rohstoffe azeige","Geböide und Zuestimmig","Gschwindigkeit","Hiwis bi eutärä Bricht","Dorfinfo Optione","Optione versteckä"];
	var meldungen = ["Dorfinformation","eignigs Dorf","Dorfinfos","glösche","teuwis aktualisiert","aktualisiert"," bereits igläse","Bricht isch verautet","itreit","nid glösche"];
	var loeschen = ["Aui Dorfinformatione lösche","Dorfinformatione lösche","ke Dorfinformatione vorhande"];
	var sicherheit = "Wosch du würklech aui dorfinformatione vo derä wäut lösche ?";
	var gamespeed = [0,1,1,1,1.6,1,1,1,1.6,1.6];	// bis Waut 9
	var unitspeed = [0,1,1,1,1,1,1,1,0.625,0.625];
	var loy_speed = [0,1,1,1,1.6,1,1,1,1.6,1.6];
}
else {
	var rohstoffe = ["Holz","Lehm","Eisen"];	
	var names = ["Holzfäller", "Lehmgrube", "Eisenmine", "Speicher", "Versteck", "Wall"];
	var ausdruck =[/Angreifer:/,/des Verteidigers/,/Verteidiger:/,/Beute:/,/Zustimmung/,/Spionage/,/Dorfübersicht/];
	var bonusliste = [/Holzprod/,/Lehmprod/,/Eisenprod/,/Rohstoffprod/,/Speicherkap/,/Kaserne/,/Stall/,/Werkstatt/,/Bevölkerung/,/(\d+)% [mehr,schnell]/];
	var a_text = ["Zustimmung","keine","keine bekannt","nicht bekannt","Rohstoffe","Farmeinheiten","Gebäude","Bericht ist über","Tage","Wochen","alt","Truppen","auswärts","Info"];
	var opt_text = ["Stufe","Truppen anzeigen","Rohstoffe anzeigen","Gebäude und Zustimmung","Geschwindigkeit","Hinweis bei älteren Berichten","Dorfinfo Optionen","Optionen verstecken"];
	var meldungen = ["Dorfinfo Meldung","eigenes Dorf","Dorfinfos","gelöscht","teilweise aktualisiert","aktualisiert","Dieser Bericht wurde bereits eingelesen","Dieser Bericht ist veraltet","eingetragen","nicht gelöscht"];
	var loeschen = ["Alle Dorfinformationen löschen","Dorfinformationen löschen","keine Dorfinformationen vorhanden"];
	var sicherheit = "Möchtest du wirklich alle Dorfinformationen dieser Welt löschen ?";
	var gamespeed = [0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.6,1,1,1,1,1,1,1,1,1.6,1,1,1,1.6,1,1,1,1,1,1,1,1,1,1.6,1,1.6,1,1.6,1,1.6,1,1,1,1,1,1,1];	// bis Welt 52
	var unitspeed = [0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.625,1,1,1,1,1,1,1,1,0.625,1,1,1,1,0.625,1,1,1,1,1,1,1,1,1,0.625,1,0.625,1,0.625,1,0.625,1,1,1,1,1,1,1];
	var loy_speed = [0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.6,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.6,1,1.6,1,1.6,1,1.6,1,1,1,1,1,1,1];
}

var land = GM_getValue("language",11);
if (land > 10) {
	if (language != "??"){
		GM_setValue("language", lang);
	}
	land = lang;
}
var caution = 'data:image/png;base64,' +
		'iVBORw0KGgoAAAANSUhEUgAAABAAAAAPCAYAAADtc08vAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/' +
		'oL2nkwAAAMFJREFUKM+VUcERwyAMExx71KO4kzSjJJskk9SjwCT0QUIMpU7jO99xICRZdjlnjCptz+bh' +
		'8Xq7Ec7DKuLSRnlTnfYeODoq/FYHEEWd/3RwqjOmGZhm1DHS5rJJUAFaHfuZAIC/SDoHdmDmCGlxGZAa' +
		'GiCIdfQ2i4LtHZB2sH+IOjw5V9s7SIvLiAeJdB87ItKOAV/tkAIfmmvpJkyNbUfgNnkAxALi9q5shKsL' +
		'P1zbVcUz7GDi1muuUAjv778YF3wAU2RReecthjIAAAAASUVORK5CYII=';
var grafik = ["spear","sword","axe","light","marcher","heavy"];
/* settings: Truppen,Ressis,Speer,Schwert,Axt,LKav,BB,SKav,Gebäude,'frei',Spieler-ID,Info */
var sets = (GM_getValue(server+"_settings", "1,1,1,0,1,1,0,0,1,0,0,1")).split(",");
var settings = new Array(11);
for(var i=0; i<=10; i++) { 
	settings[i] = parseInt(sets[i],10);
}
if (settings[10] > 0) { 
	var player_id = settings[10];
}
else { 
	var player_id = false;
}
settings[11] = parseInt(sets[11],10);
var show_ressis = new Boolean(settings[1]);

if(document.body.innerHTML.match(/input name=\"sid_refresh_password/)) {
	return;
}
else if(document.location.href.match (/screen=map/)) {
	window.clearInterval(watch_map_timer);
	var koor_start = document.body.innerHTML.match(/\((\d+\|\d+)\)/);
	scan_map();
	var map_container = getElementsByClassName("map_container")[0];
	var tds = map_container.getElementsByTagName("td");
	tds[1].addEventListener("click",function() {check_map_move(akt_map);}, true);
	tds[3].addEventListener("click",function() {check_map_move(akt_map);}, true);
	tds[(tds.length - 4)].addEventListener("click",function() {check_map_move(akt_map);}, true);
	tds[(tds.length - 2)].addEventListener("click",function() {check_map_move(akt_map);}, true);
	var insertpos = getElementsByClassName("map_container")[1];
	insertpos = insertpos.parentNode.parentNode;
	var main = getElementsByClassName("main")[0];
	var div = document.createElement("div");
	div.setAttribute("style","text-align:left; margin: 0px auto;");

	var hr = document.createElement("hr");
	div.appendChild(hr);

	var table = document.createElement("table");
	table.setAttribute("id",'extended_dorfinfo_settings');
	table.setAttribute("class","small");
	table.setAttribute("style","display:none;");
	var p = document.createElement("p");
	p.setAttribute("class","small");
	p.setAttribute("align","center");
	p.setAttribute("style","font-size:88%;");

	var a = document.createElement("a");
	a.setAttribute("href","javascript:void(0);");
	a.addEventListener("click",function() {show_settings();}, false);
	a.appendChild(document.createTextNode("» "+opt_text[6]+" «"));
	p.appendChild(a);
	div.appendChild(p);

	var row, td, check;

	show_einstellung("showtroups_0",opt_text[1],0);
	show_einstellung("showressis_1",opt_text[2],1);

	row = document.createElement("tr");
	td = document.createElement("td");
	td.setAttribute("style","text-indent:20px;");
	td.appendChild(document.createTextNode(a_text[5]+" (max. 4): "));
	br = document.createElement("br");
	td.appendChild(br);

	for(i=2; i<8; i++) {
		var obj = grafik[i-2];
		img = document.createElement("img");
		img.setAttribute("alt", "");
		img.setAttribute("src", "graphic/unit/unit_"+obj+".png");
		check = document.createElement("input");
		check.setAttribute("type", "Checkbox");
		check.setAttribute("name", "showunits_"+i);
		check.checked = settings[i];
		check.addEventListener("change",function() {edit_setting(this.name, this.checked);}, false);
		td.appendChild(check);
		td.appendChild(img);
	}
	row.appendChild(td);
	table.appendChild(row);

	show_einstellung("showwall_8",opt_text[3],8);
//	show_einstellung("speed_9",opt_text[4]+" 1.6-fach?",9);
	show_einstellung("showinfo_11",opt_text[5],11);

	div.appendChild(table);
	hr = document.createElement("hr");
	div.appendChild(hr);
	insertpos.appendChild(div);
}
else if((document.location.href.search(/&screen=report&mode=all&view/) > -1)||(document.location.href.search(/.+&screen=report&mode=attack&view/) > -1)) {
	var report = readReport();
	if (report) {
		report = report.split(",");
/* report: Holz, Lehm, Eisen, Holzmine , Lehmmine, Eisenmine, Speicher, Versteck, Wall, Dorf-ID, Datum, neuste Bericht-ID, (Zustimmung) */
		var report_id = document.location.href.split('=');
		var rep_id = parseInt(report_id[report_id.length-1]);
		var vil_id = report[9];
		if (report[0] == -1) {			// eigenes Dorf
			var old = GM_getValue(server+"_"+vil_id, false);
			if (old) {
				del_village(vil_id);
				show_meldung(meldungen[1]+", "+meldungen[2]+" "+meldungen[3]);	// eigenes Dorf, Dorfinfos gelöscht);
			}
			else {
				show_meldung(meldungen[1]);
			}
		}
		else {
			var old = GM_getValue(server+"_"+vil_id, false);
			if (old) {
				var old_report = old.split(",");
				var old_rep_id = old_report[11];
			}
			else {
				var old_rep_id = 0;
			}
			if(old && (old_rep_id > 0)) {
				if(rep_id > old_rep_id) {		// aktueller Bericht ist neuer
					var marker = false;
					for (i=3;i<9;i++) {
						if (report[i] == -1) {
						/* alte Gebäudestufen behalten */
							report[i] = old_report[i];
							marker = true;
						}
					}
					report[11] = rep_id;
					GM_setValue(server + "_" + vil_id, ""+report);
					GM_setValue(server + "_truppen_" + vil_id, getTroups());
					if (marker) show_meldung(meldungen[2]+" "+meldungen[4]);	// Dorfinfos teilweise aktualisiert
					else  show_meldung(meldungen[2]+" "+meldungen[5]);	// Dorfinfos aktualisiert
				}
				else {
					if (rep_id == old_rep_id) show_meldung(meldungen[6]);	// Bericht bereit eingelesen
					else show_meldung(meldungen[7]);					// Bericht ist veraltet
				}
			}
			else {
				report[11] = rep_id;
				GM_setValue(server + "_" + vil_id, ""+report);
				GM_setValue(server + "_truppen_" + vil_id, getTroups());
				show_meldung(meldungen[2]+" "+meldungen[8]);				// Dorfinfos eingetragen
			}
		}
	}
}
else if(document.location.href.match (/screen=info_village&id=/)) {
	if(document.body.innerHTML.match(ausdruck[6])) {						// Dorfübersicht, eigenes Dorf
		if (player_id == false) {
			player_id = document.body.innerHTML.match(/screen=info_player&amp;id=(\d+)/)[1];
			edit_setting("playerid_10", player_id);
		}
	}
	var tab = document.evaluate('//table[@class="main"]/tbody/tr/td/table[@class="vis left"]/tbody',document,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null).snapshotItem(0);
	var new_row_0 = document.createElement("tr");
	var new_row_2 = document.createElement("tr");
	var new_cell_0 = document.createElement("td");
	var new_cell_2 = document.createElement("td");
	var new_Link = document.createElement("a");
	var new_Link2 = document.createElement("a");
	new_cell_0.setAttribute("colspan","2");
	new_cell_2.setAttribute("colspan","2");

/* Die Funktionen per Eventhandler an die Links koppeln */
	new_Link.innerHTML = "»  "+loeschen[1];							// Dorfinformationen löschen
	new_Link.href = "javascript: void()";
	new_Link.addEventListener('click', function() {
		var id = location.href.split("id=")[1].replace(/\&.+/,"");
		if(GM_getValue(server + "_" + id, false)) {
			del_village(id);
			new_Link.innerHTML = "»  "+meldungen[2]+" "+meldungen[3];	// Dorfinformationen gelöscht
		}
		else { 
			new_Link.innerHTML = "»  "+loeschen[2];					// keine Dorfinformationen vorhanden
		}
	}, false); 

	new_Link2.innerHTML = "»  "+loeschen[0];						// Alle Dorfinformationen löschen
	new_Link2.href = "javascript: void()";
	new_Link2.addEventListener('click', function() {
		var liste = [];
		liste = GM_listValues();
		var sicher;
		sicher = window.confirm(sicherheit);
		if (sicher) {
			var counter = 0;
			for (var i=0; i<liste.length; i++){
				if (liste[i].split("_")[0] == server) {
					GM_deleteValue(liste[i]);
					counter++;
				}
			}
			new_Link2.innerHTML = "» "+counter+" "+meldungen[2]+" "+meldungen[3];	// Dorfinformationen gelöscht
		}
		else {
			new_Link2.innerHTML = "»  "+meldungen[2]+" "+meldungen[9];			// Dorfinformationen nicht gelöscht
		}
	}, false); 
	new_cell_0.appendChild(new_Link);
	new_cell_2.appendChild(new_Link2);
	new_row_0.appendChild(new_cell_0);
	new_row_2.appendChild(new_cell_2);
	tab.appendChild(new_row_0);
	tab.appendChild(new_row_2);
}
else if ((document.location.href.match(/dorfinfos/)) || (document.location.href.match(/dorpsinfo/))) {
	/* Daten sichern / einlesen */
	var liste = []; 
	var einlesen = false;
	try {
		liste = document.body.innerHTML;
		if (liste) {
			einlesen = true;
		}
	} catch(e) {liste = "";}
	if (einlesen){
		liste = liste.split('<br>');
		if (liste[0] == "Dorfinfos;") {
			var sicher = window.confirm(sicherimp[land]+" ?");
			if (sicher){
				for (var i=1; i < liste.length-1; i++) {
					liste[i] = liste[i].split(";");
					if (liste[i][1] == "false"){
						GM_setValue(liste[i][0],false);
					}
					else {
						if (liste[i][1] == "true"){
							GM_setValue(liste[i][0],true);
						}
						else {
							GM_setValue(liste[i][0],liste[i][1]);
						}
					}
				}
			}
			else { liste = "";}
		}
		else { liste = "";}
	}
	if ((liste == "")) {
		var sicher2 = window.confirm(sicherexp[land]+" ?");
		if (sicher2){
			liste = GM_listValues();
			var ausgabe = "";
			for (var i=0; i < liste.length; i++){
				ausgabe += liste[i]+";";
				ausgabe += GM_getValue(liste[i])+"<br>";
			}
			document.body.innerHTML = "Dorfinfos;<br>"+ausgabe;
			alert(sichersave[land]);
		}
	}

}

window.clearInterval(watch_map_timer); watch_map = false;  stop				// ende


function show_meldung(msg) {
	var row = document.createElement("tr");
	var td1 = document.createElement("td");
	var td2 = document.createElement("td");
	td1.innerHTML = meldungen[0];
	td2.innerHTML = msg;
	row.appendChild(td1);
	row.appendChild(td2);

	if(document.body.innerHTML.match(/DS Report/)) { var spoo = 1;}
	else	{ var spoo = 0;}
	var tab = getElementsByClassName("vis")[2 + spoo].getElementsByTagName("tbody")[0].getElementsByTagName("tr")[1];
	tab.parentNode.insertBefore(row, tab);
}


function show_einstellung(msg,msg2,wert) {
	row = document.createElement("tr");
	td = document.createElement("td");
	check = document.createElement("input");
	check.setAttribute("type","checkbox");
	check.setAttribute("name",msg);
	check.checked = settings[wert];
	check.addEventListener("change",function() {edit_setting(this.name, this.checked);}, false);
	td.appendChild(check);
	td.appendChild(document.createTextNode(msg2));
	row.appendChild(td);
	table.appendChild(row);
}


function show_settings() {
	$('extended_dorfinfo_settings').setAttribute("style", "");
	a.removeEventListener("click",function(){show_settings();}, false);
	a.addEventListener("click",function(){hide_settings();}, false);
	a.innerHTML = "« "+opt_text[7]+" »";
}


function hide_settings() {
	$('extended_dorfinfo_settings').setAttribute("style", "display:none;");
	a.removeEventListener("click",function(){hide_settings();}, false);
	a.addEventListener("click",function(){show_settings();}, false);
	a.innerHTML = "» "+opt_text[6]+" «";
}


function edit_setting(set, new_value) {
	if (set == "playerid_10") {
		settings[10] = new_value;
	} 
	else {
		var wert = 1;
		if ((new_value == false) || (new_value == "false")) wert = 0;
		settings[set.split("_")[1]] = wert;
	}
	GM_setValue(server+"_settings", ""+settings);
}


function check_map_move(akt_map_loc) {
	var groesse = $('map').getElementsByTagName("tr").length;
	if(!watch_map) {
		watch_map_timer = window.setInterval(check_map_move,300,akt_map);
		watch_map = true;
		return false;
	}
	var obj = $(akt_map_loc);
	if (obj) {
		var obj1 = obj.style.left; 
		var obj2 = obj.style.top;
		if(obj1 == (groesse*53)*(-1)+"px" || obj1 == (groesse*53)+"px" || obj2 == (groesse*38)*(-1)+"px" || obj2 == (groesse*38)+"px")
		{
			switch(akt_map_loc)
			{
				case "mapOld":
					akt_map = "mapNew";
					break;
				case "mapNew":
					akt_map = "mapOld";
					break;
			}
			scan_map();
			window.clearInterval(watch_map_timer);
			watch_map = false;
		}
	}
}


function readReport() {
	var player = ["",""];
	var bericht = false;
	var beute_x = 0;
	/* handelt es sich um einen Bericht?  */
	for(var x = 0, h4 = document.getElementsByTagName("th"); x < h4.length; x++) {
		if(h4[x].innerHTML.search(ausdruck[2]) > -1) {
			bericht = true;
		}
	/* Spieler-ID auslesen */
		if(bericht && (h4[x].innerHTML.match(/screen=info_player&amp;id=\d+">\w+</))) {
			player = h4[x].innerHTML.match(/screen=info_player&amp;id=(\d+)">\w+</);
		}
	/* Beute */
		if(h4[x].innerHTML.search(ausdruck[3]) > -1) {
			beute_x = x;
		}
	}

/* Dorf-ID auslesen */
	try {
		var hit = document.body.innerHTML.match(/info_village&amp;id=(\d+)/g);
		if (hit[1]) {
			var vilId = hit[1].split("=")[1];
		}
	} catch(e) { return false;}

	if (player[1] == player_id) {				// Prüfen ob Spieler selbst
		output = "-1,-1,-1,-1,-1,-1,-1,-1,-1,"+vilId+",0,0";
		return output;
	}
/* Bericht-ID auslesen */
	if(document.location.href.search(/&screen=report&mode=all/) > -1) {
		var berId = document.location.href.match(/&screen=report&mode=all&view=(\d+)/)[1];
	}
	else {
		var berId = document.location.href.match(/&screen=report&mode=attack&view=(\d+)/)[1];
	}
/* Datum + Zeit auslesen */
	var tab = document.evaluate('//table[@class="main"]/tbody/tr/td/table/tbody/tr/td/table/tbody/tr/td/table[@class="vis"]/tbody',document,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null).snapshotItem(1);
	var date = tab.getElementsByTagName("tr")[1].getElementsByTagName("td")[1].innerHTML;

/* Spähbericht oder Adelsbericht?  */
	var adel = false;
	var xx = 0;
	for(var x = 0, h4 = document.getElementsByTagName("h4"), spy = false; x < h4.length; x++) {
		if(h4[x].innerHTML.match(ausdruck[5])) {
			spy = true; 
			xx = x;
			break;
		}
		if(bericht && (h4[x].innerHTML.search(ausdruck[1]) > -1)) {
			adel = true;
		}
	}
	if (adel) {
		var bericht1 = 0;
		var ths = document.getElementsByTagName("th");
		for(var x = 0; x < ths.length; x++) {
			if(ths[x].innerHTML.search(ausdruck[0])>-1) {
				bericht1 = x;
			}
		}
		if(bericht1 > 0) {
		/* Angreifer-ID auslesen */
			if(ths[bericht1+1].innerHTML.match(/screen=info_player&amp;id=\d+/)) {
				var player1 = ths[bericht1+1].innerHTML.match(/screen=info_player&amp;id=(\d+)/);
				if (player1[1] == player_id) {
					output = "-1,-1,-1,-1,-1,-1,-1,-1,-1,"+vilId+",0,"+berId+",25";
					return output;
				}
			}
		}
		output = "0,0,0,-1,-1,-1,-1,-1,-1,"+vilId+","+date+","+berId+",25";	// fremder Adelsbericht
		return output;
	}

	if (spy) 	{
	/* Rohstoffe auslesen */
		var tab1 = h4[xx].nextSibling.nextSibling;
		var res = [];
		var html = tab1.getElementsByTagName("td")[0].innerHTML.replace(/<span class="grey">\.<\/span>/g, "");
		res[0] = (html.match(/holz\.png/)) ? html.split("title=\""+rohstoffe[0]+"\" alt=\"\">")[1].split(" <img")[0] : 0;
		res[1] = (html.match(/lehm\.png/)) ? html.split("title=\""+rohstoffe[1]+"\" alt=\"\">")[1].split(" <img")[0] : 0;
		res[2] = (html.match(/eisen\.png/)) ? html.split("title=\""+rohstoffe[2]+"\" alt=\"\">")[1].replace(/ /, "") : 0;

		if (!tab1.getElementsByTagName("td")[1]) {
			var output = res[0]+","+res[1]+","+res[2]+",-1,-1,-1,-1,-1,-1,"+vilId+","+date+","+berId; //  -1  damit Gebäudestufen nicht gelöscht werden
			output = zustimmung(output);
			return output;
		}
	/* Gebäude auslesen */
		var code = tab1.getElementsByTagName("td")[1].innerHTML;
		var buildings = [0,0,0,0,0,0];
		var marker = 0;
		for(var x = 0; x < names.length; x++) {
			if(code.match(names[x]))	{
				buildings[x] = code.split(names[x] + " <b>("+opt_text[0]+" ")[1].split(")</b>")[0];
				marker += buildings[x];
			}
		}
		if (marker == 0) {
		/* Gebäude konnten nicht ausgelesen werden */
			for(var x = 0; x < names.length; x++){
				buildings[x] = -1;  				// Gebäudestufen aus altem Bericht behalten
			}
		}
		var output = res+","+buildings+","+vilId+","+date+","+berId;
		output = zustimmung(output);
		return output;
	}
	else { 	/* (keine Spionage) */
		if(bericht){
			var beute = "0";
			if (beute_x > 0) {
				var res_beute = new Array(3);
				for(var beute_x = 0, h4 = document.getElementsByTagName("th"); beute_x < h4.length; beute_x++) {
					if(h4[beute_x].innerHTML.search(ausdruck[3]) > -1) {
						res_beute = h4[beute_x].nextSibling.nextSibling.nextSibling.nextSibling.innerHTML.match(/(\d+)\/(\d+)/);
					}
				}
				if (parseInt(res_beute [1]) == parseInt(res_beute[2])) {  	// Res sind nicht leer
					beute = "-1";
				}
			}
		 	var output = "0,"+beute+",0,-1,-1,-1,-1,-1,-1,"+vilId+","+date+","+berId;
			output = zustimmung(output);
			return output;
		}
		return false;
	}
}


function zustimmung(output) {
	for(var x = 0, th = document.getElementsByTagName("th"), zs = false; x < th.length; x++) {
		if(th[x].innerHTML.match(ausdruck[4])) {
			zs = true;
			var ZS = th[x].nextSibling.nextSibling.getElementsByTagName("b")[1].innerHTML;
			break;
		}
	}
  	if(!zs) {
		return output;
	}
	var ZS = th[x].nextSibling.nextSibling.getElementsByTagName("b")[1].innerHTML;
	if (parseInt(ZS) <= 0) ZS = 25;
	output += "," + ZS;
	return output;
}


function getTroups() {
/* Liest die Truppen aus einem Bericht aus */
	var units = [];	// inside troups
	var stand = [];
	var tab = document.evaluate('//table[@class="main"]/tbody/tr/td/table/tbody/tr/td/table/tbody/tr/td/table[@class="vis"]/tbody/tr/td/table/tbody/tr/td/table[@class="vis"]/tbody',document,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null).snapshotItem(1);
	if(tab) {
		stand = tab.getElementsByTagName("tr")[1].getElementsByTagName("td");
		var loose = tab.getElementsByTagName("tr")[2].getElementsByTagName("td");

		for(var x = 1; x < stand.length; x++) {
			var diff = stand[x].innerHTML-loose[x].innerHTML;
			units.push(diff);
		}
	}
	var unitsa = [];	// outside troups
	var tab = document.evaluate('//table[@class="main"]/tbody/tr/td/table/tbody/tr/td/table/tbody/tr/td/table[@class="vis"]/tbody/tr/td/table/tbody/tr/td/table/tbody',document,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null).snapshotItem(3); 
	if(tab) {
		var tds = tab.getElementsByTagName("td"); 
		for(var x = 0; x < tds.length; x++) {
			unitsa[x] = tds[x].innerHTML;
		}
	}
	return (units+";"+unitsa);
}


function del_village(id) {
	GM_deleteValue(server + "_" + id);
	GM_deleteValue(server + "_truppen_" + id);
}


function trennzeichen(zahl) {
	zahl=Math.floor(zahl);
	var ausgabe = "";
	if (zahl>1000) {
		ausgabe += Math.floor(zahl/1000);
		ausgabe += ".";
		if (zahl%1000<100) {
			if (zahl%1000<10) {
				ausgabe += "00" + zahl%1000;
			}
			else {
				ausgabe += "0" + zahl%1000;
			}
		}
		else {
			ausgabe += zahl%1000;
		}
	}
	else {
		ausgabe+=zahl;
	}
	return ausgabe;
}


function getElementsByClassName(classname, node) {
	if(!node) node = document.getElementsByTagName("body")[0];
	var a = [];
	var re = new RegExp('\\b' + classname + '\\b');
	var els = node.getElementsByTagName("*");
	for(var i=0,j=els.length; i<j; i++) {
		if(re.test(els[i].className)) {
			a.push(els[i]);
		}
	}
	return a;
}


function $(id) {
	var object = document.getElementById(id);
	return object;
}


function scan_map() {
	var cont_tb = $('info_content').getElementsByTagName("tbody")[0];
	remove_info(cont_tb);

	switch(getElementsByClassName("map").length) {
	case 1:
		map = getElementsByClassName("map")[0];
		break;

	case 2:
		map = getElementsByClassName("map")[1];
		break;
	}
	var tds = map.getElementsByTagName("td");
	for(var j = 0; j<tds.length;j++) {
		if(tds[j].getElementsByTagName('a').length == 1) {
			tds[j].getElementsByTagName("img")[0].setAttribute("id",j);
			tds[j].getElementsByTagName("img")[0].addEventListener("mouseover",function(e) {add_info_to_map(e.target.id);}, false);
		}
	}
}


function diffhour (last_att) {
	var att_time = last_att.split(" ")[1].split(":");
	var att_date = last_att.split(" ")[0].split(".");
	var att = new Date(("20"+att_date[2]),(att_date[1]-1),att_date[0],att_time[0],att_time[1],0);
	var now = new Date();
	var diff_h = (now.getTime() - att.getTime()) /1000 /3600;
	return diff_h;
}


function remove_info(cont_tb) {
	if($('last_att_units')) cont_tb.removeChild($('last_att_units'));
	if($('last_att_ressis')) cont_tb.removeChild($('last_att_ressis'));
	if($('next_att_units')) cont_tb.removeChild($('next_att_units'));
	if($('last_att_zustimmung')) cont_tb.removeChild($('last_att_zustimmung'));
	if($('last_att_wall')) cont_tb.removeChild($('last_att_wall'));
	if($('last_date')) cont_tb.removeChild($('last_date'));
}


function add_info_to_map(k) {
	var cont_tb = $('info_content').getElementsByTagName("tbody")[0];
	remove_info(cont_tb);

	var trs = cont_tb.getElementsByTagName("tr");
	var hidden = 0;
	for(var j = 0; j < trs.length;j++) {
		if(trs[j].style.display == "none") hidden++;
	}
	if ($('info_bonus_image')) {
		$('info_bonus_image').setAttribute("rowspan",(8 - (hidden -1)));   // testen
	}
	var map = getElementsByClassName("map")[0];
	var tds = map.getElementsByTagName("td");
	var link = tds[k].getElementsByTagName("a")[0];
	var akt_id = link.href.split("info_village&id=")[1];
	var koor_target = tds[k].innerHTML.match(/\((\d+\|\d+)\)/);
	var grau = tds[k].innerHTML.match(/, null, null, false,/);
	var report = GM_getValue(server+"_"+akt_id, false);
	if (report) {
/* report: Holz, Lehm, Eisen, Holzmine , Lehmmine, Eisenmine, Speicher, Versteck, Wall, Dorf-ID, Datum, neueste Bericht-ID, (Zustimmung) */
		var report = report.split(",");
		var ressis = [report[0], report[1], report[2]];
		var show_troups = Boolean(settings[0]);
		var show_ressis = Boolean(settings[1]);
		var show_wall = Boolean(settings[8]);
		var server_speed = Boolean(settings[9]);
		var show_info = Boolean(settings[11]);
		var diff_h = diffhour(report[10]);

		var world = server.match(/(\d+)/)[1];
		var speed = gamespeed[world];
		var speed1 = unitspeed[world]; if (speed1 == 0.66) {speed1 = 0.66666666666;}
		var speed2 = loy_speed[world];		//speed für Zustimmung

		if (show_ressis) {
		/* Bonusdörfer ermitteln */
			var bonuswert = 0.0;
			var bonustyp = 9;
			var bonus = false;
			if (tds[k].innerHTML.match(/\/bonus\//)) {
				for (var i=0; i < bonusliste.length; i++) {
					if (tds[k].innerHTML.match(bonusliste[i])) {
						if (i < 5) {
							bonus = true;			// hat Einfluss auf die Ressi-Produktion
							bonustyp = i;
							bonuswert = tds[k].innerHTML.match(bonusliste[9])[1];
							bonuswert = bonuswert/100;
						}
						break;
					}
				}
			}
		}

	/* Truppen */
		var truppen = ""+GM_getValue(server + "_truppen_" + akt_id, false);
		var truppenHeim = false;
		var truppenAus = false;
		var troops = false;
		if (truppen) {
			truppen = truppen.split(";");
			truppenHeim = truppen[0];
			if (truppen[1]) {
				truppenAus = truppen[1];
			}
			if (!show_troups) {
				if ((truppenHeim != "0,0,0,0,0,0,0,0,0,0,0,0") || ((truppenAus != "") && (truppenAus != "0,0,0,0,0,0,0,0,0,0,0,0"))){
					troops = true;
				}
			}
		}
		if (show_troups) {
			if (truppenHeim) {
				truppenHeim = truppenHeim.split(",");
				row = document.createElement("tr");
				row.setAttribute("id",'last_att_units');
				td1 = document.createElement("td");
				td1.innerHTML = a_text[11]+": ";					// Truppen
				if (truppenAus) {
					truppenAus = truppenAus.split(",");
					td1.innerHTML = "<br>"+a_text[11]+": <br><br>+ "+a_text[12]+": ";	//Truppen auswärts
				}
				td2 = document.createElement("td");
				td2.setAttribute("valign","top");
				td2.setAttribute("colspan","2");

				if (truppenHeim.length == 12) {
					var einheiten = ["spear","sword","axe","archer","spy","light","marcher","heavy","ram","catapult","knight","snob"];
				}
				else if (truppenHeim.length == 11) {
					var einheiten = ["spear","sword","axe","archer","spy","light","marcher","heavy","ram","catapult","snob"];
				}
				else if (truppenHeim.length == 9) {
					var einheiten = ["spear","sword","axe","spy","light","heavy","ram","catapult","snob"];
				}

				var	code = "<tr class=\"center\">";
				var counter = 0;
				for (var i=0; i < truppenHeim.length; i++) {
					if ((truppenHeim[i] >0) || (truppenAus && (truppenAus[i] >0))) {
						counter++;
						code += "<td width=\"35\"><img src=\"/graphic/unit/unit_" + einheiten[i] + ".png\"></td>";
					}
				}

				if (counter >0) {
					code += "</tr><tr class=\"center\">";
				}
				for (var i=0; i < truppenHeim.length; i++) {
					if (parseInt(truppenHeim[i]) == 0) {
						if (truppenAus[i] >0) {
							code += "<td width=\"35\">" + ""+truppenHeim[i] + "</td>";
						}
					}
					else {
						code += "<td width=\"35\">" + ""+truppenHeim[i] + "</td>";
					}
				}
				if (counter == 0) {		// keine Truppen
					if (grau) {
						code += a_text[1];
					}
					else {
						code += a_text[2];;
					}
				}
				code += "</tr>";
				if (truppenAus) {
					code += "<tr class=\"center\">";
					for (var i=0; i < truppenAus.length; i++)
					{
						if (parseInt(truppenAus[i]) == 0) {
							if (truppenHeim[i] >0) {
								code += "<td width=\"35\">" + ""+truppenAus[i] + "</td>";
							}
						} 
						else {
							code += "<td width=\"35\">" + ""+truppenAus[i] + "</td>";
						}
					}
					code += "</tr>";
				}
				var table = document.createElement("table");
				table.setAttribute("class","vis");
				table.innerHTML = code;
				td2.appendChild(table);
				row.appendChild(td1);
				row.appendChild(td2);
				cont_tb.appendChild(row);
			}
		}

	/* Rohstoffe */
		var ResPerHour = [5,30,35,41,47,55,64,74,86,100,117,136,158,184,214,249,289,337,391,455,530,616,717,833,969,1127,1311,1525,1774,2063,2400];
		var speicher = [0,1000,1229,1512,1859,2285,2810,3454,4247,5222,6420,7893,9705,11932,14670,18037,22177,27266,33523,41217,50675,62305,76604,94184,115798,142373,175047,215219,264611,325337,400000];
		var speicherstufe = parseInt(report[6]);
		var versteck = [0,150,200,267,356,474,632,843,1125,1500,2000];
		var versteckstufe = parseInt(report[7]);
		var maxres = speicher[speicherstufe] - versteck[versteckstufe] - (versteckstufe>0 && speicherstufe<30);
		if (bonustyp == 4) {
			maxres += Math.floor(speicher[speicherstufe] * bonuswert);
		}
		var ressis1 = [1.0,1.0,1.0];  		// Res Bericht
		var graphic = ["holz","lehm","eisen"];
		var tragen1 = [25,15,10,80,50,50]; 	// Beute tragen
		var duration1 = [18.0,22.0,18.0,10.0,10.0,11.0]; 	// Standard-Dauer 
		var ressis2 = [1.0,1.0,1.0];			// für errechnete Ressis
		var graphicname = ["","","",""];
		var tragen = [0,0,0,0];
		var duration = [0.0,0.0,0.0,0.0];
		var anzahl_werte = 0;
		for (var i=0; (i<6) && (anzahl_werte < 4); i++) {
			obj = grafik[i];
			if (settings[i+2] == 1) {
				duration[anzahl_werte] = duration1[i] * speed1 / speed;  // Dauer pro Feld = Standarddauer mal Einheitengeschw. durch gamespeed
				tragen[anzahl_werte] = tragen1[i];
				graphicname[anzahl_werte] = grafik[i];
				anzahl_werte++;
			}
		}

	/*  Berechnen der Ressis zur aktuellen Zeit (mit Bonusdörfern) */
		var ausgabe = "";
		var unknown = (parseInt(ressis[1]) == -1);
		for (var i=0; i<=2; i++) {
			ressis1[i] = parseInt(ressis[i],10); 	//vorhandene Res
			if (maxres > 100) {					// Res-Berechnung ist möglich
					ressis2[i] += (diff_h * ResPerHour[report[i+3]] * speed);	//berechnete Res
				if (bonus) {
					if ((bonustyp == i) || (bonustyp == 3)) {
						ressis2[i] += (ressis2[i] * bonuswert)	// Bonus addieren
					}
				}
				ressis2[i] += ressis1[i];  		// vorhandene und berechnete addieren
				ausgabe += "<img src=\"/graphic/"+graphic[i]+".png\">";
				if (maxres <= ressis2[i]){
					ausgabe += "<a style=\"color:#FF0000\">";
				}
				else if (0.8*maxres <=ressis2[i]) {
					ausgabe += "<a style=\"color:#EE8000\">";
				}
				else if (bonus) {
					if ((bonustyp == i) || (bonustyp == 3)) {
						ausgabe += "<a style=\"color:#005000\">";
					}
				}
				ressis2[i] = Math.min(maxres, Math.ceil(ressis2[i]));
				if (ressis2[i] >0) {
					ausgabe += trennzeichen(ressis2[i])+" ";
				}
				if ((0.8 * maxres <= ressis2[i]) || (bonustyp == i) || (bonustyp == 3)) {
					ausgabe += "</a>";
				}
			}
			else {  								// keine Res-Berechnung möglich
				ausgabe += "<a style=\"color:#0000B0\"><img src=\"/graphic/"+graphic[i]+".png\" alt=\"\">";
				if (unknown) {
					ausgabe += "<b>?</b></a> ";
				}
				else {
					ausgabe += ressis1[i]+"</a> ";
				}
			}
		}
		if ((show_ressis) && (speicherstufe != 0)) {   		// Rohstoffe anzeigen
			row = document.createElement("tr");
			row.setAttribute("id",'last_att_ressis');
			td1 = document.createElement("td");
			td1.innerHTML = a_text[4]+": ";
			td2 = document.createElement("td");
			td2.setAttribute("colspan","2");
			td2.innerHTML = ausgabe;
			row.appendChild(td1);
			row.appendChild(td2);
			cont_tb.appendChild(row);
		}
		if(anzahl_werte > 0){						// Farmeinheiten anzeigen
			row = document.createElement("tr");
			row.setAttribute("id",'next_att_units');
			td1 = document.createElement("td");
			td1.innerHTML = a_text[5]+": ";
			td2 = document.createElement("td");
			td2.setAttribute("colspan","2");

		/* Berechnen der Ressis für die Laufzeit zum Zieldorf (mit Bonusdörfern) */
			var vstart = koor_start[1].split("|");		// Koordinaten Startdorf  und Zieldorf
			var vtarget = koor_target[1].split("|");
			var fields  = laufzeitfaktor(vstart[0],vstart[1],vtarget[0],vtarget[1]);
			var bedarf  = [0,0,0,0];
			var bedarf1 = [0,0,0,0];
			var ressis3 = [1,1,1,1]; 				//Einheiten
			ausgabe = "";
			for (var i=0; i < anzahl_werte; i++) {
				ressis3[i] = [0,0,0];				// Holz, Lehm, Eisen
				for (var j=0; j <=2; j++) {
					ressis3[i][j] = (fields * duration[i] * ResPerHour[report[j+3]]/60.0);  // Felder mal Laufzeit/Feld mal Ressis/min
					if (bonus) {
						if ((bonustyp == 3) || (bonuswert == j)) {
							ressis3[i][j] =+ (ressis3[i][j] * bonuswert);
						}
					}
					bedarf[i] += Math.min(maxres,Math.ceil(ressis2[j] + ressis3[i][j]));
				}
				bedarf1[i]= Math.ceil(bedarf[i] / tragen[i]);
				ausgabe += " <img src=\"/graphic/unit/unit_"+graphicname[i]+".png\">";
				if (bedarf1[i] >0){
					ausgabe +=trennzeichen(bedarf1[i])+" ";
				}
				else {
					ausgabe += "<b>?</b> ";
				}
			}
			td2.innerHTML = ausgabe;
			row.appendChild(td1);
			row.appendChild(td2);
			cont_tb.appendChild(row);
		}

	/* Gebäude */
		if (show_wall) {
			row = document.createElement("tr");
			row.setAttribute("id",'last_att_wall');
			td1 = document.createElement("td");
			td1.innerHTML = a_text[6]+": ";
			td2 = document.createElement("td");
			td2.setAttribute("colspan","2");
			var counter = 0;
			var ausgabe = "";
			if (speicherstufe > 0) {
				ausgabe = "<img src=\"/graphic/res.png\">";
				ausgabe += speicherstufe+" ";
				if (bonustyp == 4) {
					ausgabe += "<a style=\"color:#005000\">";
				}
				ausgabe += " ("+trennzeichen(maxres)+") ";
				if (bonustyp == 4) {
					ausgabe += "</a>";
				}
				if (versteckstufe > 0) {
					ausgabe += " <img src=\"/graphic/buildings/hide.png\">"+ versteckstufe;
				}
			}
			else {
				for (var x = 3; x < 8; x++) {
					counter += parseInt(report[x]);
				}
			}
			if (counter == -5){
				ausgabe += a_text[3];
			}
			if (report[8] != -1) {
				ausgabe += " <img src=\"/graphic/buildings/wall.png\"> "+report[8];
			}
			if (report.length == 13) {
				var zustimmung = parseInt(report[12]);
				zustimmung += diff_h * speed2;
				zustimmung = Math.min(Math.floor(zustimmung),100);
				ausgabe += " / "+a_text[0]+" " + zustimmung;
			}
			td2.innerHTML = ausgabe;
			row.appendChild(td1);
			row.appendChild(td2);
			cont_tb.appendChild(row);
		}

		if (show_info || troops) {
			var alter = parseInt(diff_h/24);
			if (troops || (alter >= 2)) {
				var ausgabe = "";
				row = document.createElement("tr");
				row.setAttribute("id",'last_date');
				td1 = document.createElement("td");
				td1.innerHTML = a_text[13]+": ";			// Info
				td2 = document.createElement("td");
				td2.setAttribute("colspan","2");
			}
			if (troops) {
				tr_img = document.createElement("img");
				tr_img.setAttribute("src", caution);
				tr_img.setAttribute("style", "vertical-align: bottom");
				td2.appendChild(tr_img);
				td2.appendChild(document.createTextNode(" "+a_text[11]+"! ")); 
			}
			if (alter >= 2) {
				ausgabe += a_text[7];									// Bericht ist über
				if (alter < 14) {
					ausgabe += " <b>"+alter+"</b> "+a_text[8]+" "+a_text[10];	// Tage alt
				}
				else {
					ausgabe += "<a style=\"color:#DD2200\"> <b>"+parseInt(alter/7)+" "+a_text[9]+"</b></a> "+a_text[10]+"!";	// Wochen alt
				}
			}
			if (troops || (alter >= 2)) {
				td2.innerHTML += ausgabe;
				row.appendChild(td1);
				row.appendChild(td2);
				cont_tb.appendChild(row);
			}
		}
	}
}


function laufzeitfaktor(x1,y1,x2,y2) {
	var Ergebnis = (x1-x2)*(x1-x2);
	Ergebnis += (y1-y2)*(y1-y2);
	Ergebnis = Math.sqrt(Ergebnis);
	return Ergebnis;
}

