var req;

// URL of the XML getter
var flight_map_connections = '/shared/xml/flight_map_connections.xml';
// URL of the XML getter
var flight_map_locations_de = '/shared/xml/flight_map_locations_de.xml';

if (window.addEventListener) {
	window.addEventListener('load', loadXMLDoc, false);
} else if (window.attachEvent){
	window.attachEvent('onload', loadXMLDoc);
}

var xmlDoc;
var xmlDoc_language;
var names_array = new Array();
var dest_array = new Array();
var dep_array = new Array();

Array.prototype.in_array = function (str) {
	var arSub = 0;
	for (var i in this) {
		if (typeof this[i] == 'string' && this[i].indexOf(str) != -1) arSub++;
	}
	return arSub;
};

function get_request_object() {
	var req = false;
	if (window.XMLHttpRequest && !(window.ActiveXObject)) {
		try {
			req = new XMLHttpRequest();
		} catch(e) {
			req = false;
		}
	} else if (window.ActiveXObject) {
		try {
			req = new ActiveXObject('Msxml2.XMLHTTP');
		} catch(e) {
			try {
				req = new ActiveXObject('Microsoft.XMLHTTP');
			} catch(e) {
				req = false;
			}
		}
	}
	return req;
}

function loadXMLDoc() { 
	var new_req = get_request_object();
	new_req.open('GET', flight_map_connections, true);
	new_req.send(null);
	new_req.onreadystatechange = function() {
		if (new_req.readyState == 4) {
			if (new_req.status == 200) {
				xmlDoc = new_req.responseXML;
				new_req.abort();
				process_loc_xml();
			} 
		}
	}
}

function process_loc_xml() {
	var new_req = get_request_object();
	new_req.onreadystatechange = function () {
		if (new_req.readyState == 4) {
			if (new_req.status == 200) {
				xmlDoc_language = new_req.responseXML;
				loadXML();
			}
		}
	};
	new_req.open('GET', flight_map_locations_de, true);
	new_req.send(null);
}

function loadXML() {
	var sd = document.getElementById('select_departure');
	if (sd) {
		parse_language_document();
		parse_connections();		
		build_dep_select();
		get_destination(sd);
	}	
}

function parse_language_document() {
	var names = xmlDoc_language.getElementsByTagName('names').item(0).childNodes;
	for (var i=0; i<names.length; i++) {
		if (names.item(i).nodeType == 1) {
			names_array[names.item(i).nodeName] = names.item(i).firstChild.data;
		}
	}
}

function build_dep_select() {
	dep_array.sort(compare);
	for (var i=0; i < dep_array.length; i++) {
		var opt = document.createElement('option');
		opt.value = dep_array[i][0]; //names.item(i).nodeName;
		if (dep_array[i][0] == 'RLG') {
			opt.selected = 'selected';
		}
		var text = document.createTextNode(dep_array[i][1]);
		opt.appendChild(text);
		document.getElementById('select_departure').appendChild(opt);
	}
}

function parse_connections() {
	var x = xmlDoc.documentElement.childNodes;
	for (var i=0; i < x.length; i++) {
		if (x.item(i).nodeType == 1) {
			if (names_array[x.item(i).nodeName]) {
				dep_array.push(new Array(x.item(i).nodeName, names_array[x.item(i).nodeName]));
				dest_array[x.item(i).nodeName] = new Array();
				var childs = x.item(i).childNodes;
				for (var y = 0; y < childs.length; y++) {
					if (childs.item(y).nodeType == 1) {
						dest_array[x.item(i).nodeName].push(childs.item(y).nodeName);
					}
				}
			}
		}
	}
}

function get_destination(id) {
	var dest_box = document.getElementById('select_destination');
	while (dest_box.firstChild) {
		dest_box.removeChild(dest_box.firstChild);
	}
	var first_opt = document.createElement('option');
	first_opt.value = '';
	var first_opt_text = document.createTextNode('Bitte Zielflughafen auswählen');
	first_opt.appendChild(first_opt_text);
	dest_box.disabled = false;
	 
	document.getElementById('select_destination').appendChild(first_opt);
	var values = new Array();
	var appears = new Array();
	for (var i = 0; i < dest_array[id.value].length; i++) {
		if (!appears.in_array(dest_array[id.value][i]) && names_array[dest_array[id.value][i]]) {
			values[i] = new Array(dest_array[id.value][i], names_array[dest_array[id.value][i]]);
			appears.push(dest_array[id.value][i]);
		}
	}

	values.sort(compare);
	for (var j = 0; j < values.length; j++) {
		if (values[j]) {
			var opt = document.createElement('option');
			opt.value = values[j][0];
			var text = document.createTextNode(values[j][1]);
			opt.appendChild(text);
			document.getElementById('select_destination').appendChild(opt);				
		}
	}
}

function compare(a, b) {
	if (a[1] < b[1]) return -1;
	if (a[1] > b[1]) return 1;
	return 0;
}