rsenderakgmail.com / WF horizontal fleet direction

// ==UserScript==
// @name           WF horizontal fleet direction
// @namespace      sk.seko
// @description    Displays horizontal fleet direction ("o'clock"); for new UI 
// @include        http://*.war-facts.com/fleet.php*
// @version        1.1
// @grant          none
// ==/UserScript==

// Version 1.0 = Initial version
// Version 1.1 = fixed (removed) forgotten alert dialog

var globalRegex = /^\s*(\-*\d+)[,\s]+(\-*\d+)[,\s]+(\-*\d+)/

function parse_xyz(s) {
	return s.match(globalRegex);
}

function rad2deg(angle) {
  return angle * 57.29577951308232; // angle / Math.PI * 180
}

function clock(p1, p2) {
	var dx = p2[1] - p1[1]
	var dy = p2[2] - p1[2]
	var dxy = Math.round(4000* Math.sqrt(dx*dx + dy*dy));
	if (dxy > 0) {
		horiz = Math.round((rad2deg(Math.atan2(-dy, dx)) - 90 + 180) / 360 * 12);
		if (horiz < 0) {
			horiz += 12;
		} else if (horiz < 1) {
			horiz = 12;
		}
		return horiz;
	} else {
		return '-';
	}
}

function later() {
	// table title element
	var pos1 = document.evaluate("//div[@id='navData']/div[2]/div[2]/div[last()]/a/text()",
		document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
	var pos2 = document.evaluate("//div[@id='mCoordinates']/a[last()]/text()",
		document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
	if (pos2 == null) {	
		setTimeout(later, 1000)
	} else {
		if (pos1.textContent.indexOf(" global") > -1 && pos2.textContent.indexOf(" global") > -1) {
			var eta = document.evaluate("//span[@id='mEta']",
				document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
			t1 = parse_xyz(pos1.textContent);
			t2 = parse_xyz(pos2.textContent);
			c = clock(t1, t2)
			eta.appendChild(document.createTextNode(', H.dir: ' + c + " o'clock")); 
		}
	}
}

setTimeout(later, 1000)