var req = null;
var reqTimeout = null;
var airports;
var loc = [];
var selected;
var myInput;
var lastInput;
var lastSent;

function format(value) {
	value = Math.ceil(value);
	if (value < 1000)
		return value;
	else {
		return (value/1000).toFixed(3)
	}
}

function AutoSuggest(elem, lang) {
	var me = this;
	this.ename = elem;
	this.lang = lang;
	this.elem = document.getElementById(elem);
	this.inputText = null;
	this.highlighted = -1;
	this.blockSearch = false;
	this.m_rpc = null;
	this.div = document.getElementById('list_'+elem);
	if (this.elem == null || this.div == null) return;
	this.elem.setAttribute("autocomplete","off");
	this.elem.onkeydown = function(ev) {
		var key = me.getKeyCode(ev);
		switch(key) {
		case 13:
		case 9:
			me.useSuggestion();
			break;
		case 27:
			me.hideDiv();
			break;
		case 38:
			if (me.highlighted > 0) {
				me.highlighted--;
			}
			me.changeHighlight();
			break;
		case 40:
			if (me.highlighted < (me.data.result.length - 1)){
				me.highlighted++;
			}
			me.changeHighlight();
			break;
		}
	};
	this.elem.onkeyup = function(ev) {
		var key = me.getKeyCode(ev);
		switch(key) {
		case 9:
		case 27:
		case 38:
		case 40:
			break;
		default:
			if (this.value != me.inputText && this.value.length > 0) {
				me.inputText = this.value;
				me.getAirports();
			}
			else {
				me.hideDiv();
			}
		}
	};
	this.useSuggestion = function() {
		if (this.highlighted > -1) {
			loc[this.ename] = [this.data.result[this.highlighted][1], this.data.result[this.highlighted][2]];
			this.blockSearch = true;
			this.elem.value = this.data.result[this.highlighted][0].replace(/<\/?strong>/g, '');
			this.hideDiv();
			setTimeout("document.getElementById('" + this.ename + "').focus()",0);
			calcDistance();
		}
	}
	this.showDiv = function() {
		this.div.style.display = 'block';
	};
	this.hideDiv = function() {
		this.div.style.display = 'none';
		this.highlighted = -1;
	};
	this.changeHighlight = function() {
		var listLI = this.div.getElementsByTagName("li");
		for (i in listLI) {
			var li = listLI[i];
			if (this.highlighted == i) {
				li.className = "selected";
			}
			else {
				li.className = "";
			}
		}
	};
	this.createDiv = function() {
		var ul = document.createElement('ul');
		me.highlighted = 0;
		var list = "";
		for(i in this.data.result) {
			list+= "<li \""+((i==this.highlighted)? " class=\"selected\"": "")+">"+this.data.result[i][0]+"</li>\n";
		}
		ul.innerHTML = list;
		this.div.replaceChild(ul, this.div.childNodes[0]);
		ul.onmouseover = function(ev) {
			var target = me.getEventSource(ev);
			while (target.parentNode && target.tagName.toUpperCase() != 'LI') {
				target = target.parentNode;
			}
			var lis = me.div.getElementsByTagName('LI');
			for (i in lis) {
				var li = lis[i];
				if (li == target) {
					me.highlighted = i;
					break;
				}
			}
			me.changeHighlight();
		}
		ul.onclick = function(ev) {
			me.useSuggestion();
			me.hideDiv();
			me.cancelEvent(ev);
			return false;
		}
	}
	this.getKeyCode = function(ev) {
		if (!ev)
			ev = window.event;
		if (ev.which) {
			return ev.which;
		} else if (ev.keyCode) {
			return ev.keyCode;
		}
	};
	this.getEventSource = function(ev) {
		if (ev) {
			return ev.target;
		}
		if (window.event) {
			return window.event.srcElement;
		}
	};
	this.cancelEvent = function(ev) {
		if (ev) {
			ev.preventDefault();
			ev.stopPropagation();
		}
		if (window.event) {
			window.event.returnValue = false;
		}
	}
	this.handleAirports = function() {
		switch (this.readyState) {
		case 4:
			if(this.status!=200) {
				alert("Fehler:"+this.status); 
			}
			else {
				//clearTimeout(rpcTimeout);
				me.data = eval('(' + this.responseText + ')');
				me.createDiv();
				me.showDiv();
				me.m_rpc = null;
			}
			break;
		default:
			return false;
			break;
		}
	}
	this.getAirports = function () {
		if (this.blockSearch) {
			this.blockSearch = false;
		}
		else {
			if (this.m_rpc == null) {
				try {
					this.m_rpc = new XMLHttpRequest();
				}
				catch (ms) {
					try {
						this.m_rpc = new ActiveXObject("Msxml2.XMLHTTP");
					}
					catch (nonms) {
						try{
							this.m_rpc = new ActiveXObject("Microsoft.XMLHTTP");
						}
						catch (failed) {
							this.m_rpc = null;
						}
					}
				}
				if (this.m_rpc != null) {
					var url = "http://www.naturefund.de/applets/co2flug/airports.php?lang="+me.lang+"&str="+me.inputText;
					this.m_rpc.open("GET", url, true);
					this.m_rpc.onreadystatechange = this.handleAirports;
					this.m_rpc.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
					this.m_rpc.send(null);
					//reqTimeout=setTimeout("ajaxTimeout();",5000);
				}
			}
		}
	}
}

function calcDistance() {
	if (typeof loc['start'] != "undefined" && typeof loc['ziel'] != "undefined") {
		var eradius = 6378.137;
		var trips = 2;
		var distanz = Math.ceil(Math.acos(Math.sin(loc['ziel'][0]/180*Math.PI)*Math.sin(loc['start'][0]/180*Math.PI) + Math.cos(loc['ziel'][0]/180*Math.PI)*Math.cos(loc['start'][0]/180*Math.PI)*Math.cos(loc['ziel'][1]/180*Math.PI-loc['start'][1]/180*Math.PI) ) * eradius)
		if (isNaN(distanz)) distanz = 0;
		if (document.getElementById('return_1').checked) trips = 1;
		distanz = distanz * trips;
		sdistanz = String(distanz);
		if (sdistanz.length > 3) {
			sdistanz = sdistanz.replace(/(\d+)(\d{3})/, '$1.$2');
		}
		document.getElementById('dist').value = sdistanz;
		co2 = (distanz * 0.369);
		document.getElementById('co2').value = format(co2);
		trees = co2/600;
		document.getElementById('trees').value = String(trees.toFixed(2)).replace(/\./g,",");
		document.getElementById('plant').href = plantLink+"&trees="+Math.floor(trees);
	}
}

