// ==UserScript==
// @name           DS Entfernung
// @description    Zeigt die Entfernung vom aktuellen Dorf zum ausgewählen Dorf an
// @author         Michael Richter
// @namespace      http://osor.de/
// @include        http://de*.die-staemme.de/game.php?*village=*&screen=info_village&id=*
// @include        http://de*.die-staemme.de/game.php?*village=*&screen=map
// ==/UserScript==

// -----------------------------------------------------------------------------
//      Modifikationen und Weiterverbreitung dieses Scripts benötigen die 
//                           Zustimmung des Autors.
// -----------------------------------------------------------------------------

(function(){

	// XPath helper
	var $x = function(p, context) {
		if(!context)
			context = document;
		var i, arr = [], xpr = document.evaluate(p, context, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
		for (i = 0; item = xpr.snapshotItem(i); i++)
			arr.push(item);
		return arr;
	};
	
	var createRow = function(dist) {
		var tr = document.createElement('tr');
		var td1 = document.createElement('td');
		td1.textContent = 'Entfernung:';
		var td2 = document.createElement('td');
		td2.id = 'info_dist';
		td2.textContent = ((Math.round(dist * 10) / 10) + '').replace(/\./, ',');
		tr.appendChild(td1);
		tr.appendChild(td2);
		return tr;
	};
	
	var vil1 = $x('//tr[@id="menu_row2"]/td/b');
	var v1 = /\((\d+)\|(\d+)\)/.exec(vil1[0].textContent);
	
	if(/screen=info_village&id=/.test(location.href)) {

		var vil2 = $x('//td[.="Koordinaten:"]/following-sibling::td');
		var v2 = /(\d+)\|(\d+)/.exec(vil2[0].textContent);
		var dist = Math.sqrt(Math.pow(v1[1] - v2[1], 2) + Math.pow(v1[2] - v2[2], 2));
		
		var tr = createRow(dist);
		vil2[0].parentNode.parentNode.insertBefore(tr, vil2[0].parentNode.nextSibling);
		
	} else if(/screen=map/.test(location.href)) {
	
		var tr = createRow(dist);
		var points = document.getElementById('info_points');
		points.parentNode.parentNode.insertBefore(tr, points.parentNode);
		
		var vils = $x('//a[contains(@onmouseover,"map_popup(")]');
		for(var i = 0; i < vils.length; i++) {
			vils[i].addEventListener('mouseover', function(evt){
				var m = /map_popup\('.*? \((\d+)\|(\d+)\) K\d+'/.exec(evt.target.parentNode.getAttribute('onmouseover'));
				if(m) {
					var dist = document.getElementById('info_dist');
					dist.textContent = ((Math.round(Math.sqrt(Math.pow(v1[1] - m[1], 2) + Math.pow(v1[2] - m[2], 2)) * 10) / 10) + '').replace(/\./, ',');
				}
			}, true);
		}
		
	}

})();

