// ==UserScript==
// @name        Bahnplan Titel Trassendetails
// @namespace   BP_Trassendetails
// @include     http://www.bahnplan.de/cms/bp_fv_trassen_details.php*
// @version     1
// ==/UserScript==

/*document.title=
	(
		document.getElementsByClassName("column1-unit")[0].getElementsByTagName("h2")[0].firstChild.textContent
		+ " "
		+ (document.getElementsByClassName("column1-unit")[0].getElementsByTagName("h2")[0].textContent).match(".+Trasse ([0-9]*)")[1]
	);
*/
periods = ({id: new Array(), text: new Array(), operator: new Array()});
function setId(num, id){
periods.id[num] = id;
}
function setText(num, text){
periods.text[num] = text;
}
function fetchPeriods(){
	var req = GM_xmlhttpRequest({
		method: "GET",
		synchronous: true,
		url: "bp_fv_trassen_inhaber.php",
		headers: {
			"User-Agent": "Mozilla/5.0",    // If not specified, navigator.userAgent will be used.
			"Accept": "text/xml"            // If not specified, browser defaults will be used.
		},
	});
	var responseXML = null;
	responseXML = new DOMParser().parseFromString(req.responseText, "text/html");
	var options = responseXML.getElementsByTagName("option");
	var i;
	for (i=0; i<options.length; i++){
		setId(i, options[i].value);
		setText(i, options[i].innerHTML);
	}
}
function getOperator(trasse) {
	var i;
	for (i=0; i<periods.id.length; i++) {
		var req = new XMLHttpRequest();
		req.open('POST', 'bp_fv_trassen_inhaber.php', false);
		req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
		req.send('fpl='+periods.id[i]);
		var responseXML = null;
		responseXML = new DOMParser().parseFromString(req.responseText, "text/html");
		var trs = responseXML.getElementsByTagName("tr");
		var j;
		for (j=1;j<trs.length;j++) {
			if (trs[j].getElementsByTagName("td")[0].innerHTML.indexOf("-Trassen") < 0) {
				if (trs[j].getElementsByTagName("td")[0].getElementsByTagName("font")[1].innerHTML.substr(1) == trasse) {
					periods.operator[i] = trs[j].getElementsByTagName("td")[1].getElementsByTagName("b")[0].innerHTML;
					break;
				}			
			}
		}
	}
}
//Create structure for injecting
var newListHeader = document.createElement("li");
newListHeader.innerHTML = "Betreiberdaten:";
var newList = document.createElement("ul");
var newElement0 = document.createElement("li");
newElement0.innerHTML = "Lade....";
newList.appendChild(newElement0);
var newElement1 = document.createElement("li");
newList.appendChild(newElement1);
newElement1.innerHTML = "Lade....";
document.getElementsByClassName("column1-unit")[0].getElementsByTagName("ul")[0].insertBefore(newListHeader, document.getElementsByClassName("column1-unit")[0].getElementsByTagName("ul")[0].getElementsByTagName("li")[5]);
document.getElementsByClassName("column1-unit")[0].getElementsByTagName("ul")[0].insertBefore(newList, document.getElementsByClassName("column1-unit")[0].getElementsByTagName("ul")[0].getElementsByTagName("li")[6]);

fetchPeriods();
getOperator((document.getElementsByClassName("column1-unit")[0].getElementsByTagName("h2")[0].textContent).match(".+Trasse ([0-9]*)")[1]);

var i;
for (i=0; i<periods.id.length; i++) {
	if (i == 0) {
		newElement0.innerHTML = periods.text[i] + ": " + periods.operator[i];
	}
	else if (i == 1) {
		newElement1.innerHTML = periods.text[i] + ": " + periods.operator[i];
	}
	else {
		var newElement = document.createElement("li");	
		newElement.innerHTML = periods.text[i] + ": " + periods.operator[i];
		newList.appendChild(newElement);
	}
}