Function.prototype.bind = function() {
	var __method = this, args = $A(arguments), object = args.shift();
	return function() {
		return __method.apply(object, args.concat($A(arguments)));
	}
}

var $A = Array.from = function(iterable) {
	if (!iterable) return [];
	if (iterable.toArray) {
		return iterable.toArray();
	} else {
		var results = [];
		for (var i = 0, length = iterable.length; i < length; i++) results.push(iterable[i]);
		return results;
	}
}


Tropo = {
	init: function() {
		if (GBrowserIsCompatible()) {
			var xmlLoadCounter = 0;
			function xmlLoaded() {
				xmlLoadCounter++;
				if (xmlLoadCounter == tropos.length) document.getElementById("menu").style.visibility = "visible";
			}

			_mSvgEnabled = true;
			_mSvgForced = true;
			_mPreferMetric = true;

			this.map = new GMap2(document.getElementById("map"));
			this.map.addControl(new GMapTypeControl());
			this.map.addControl(new GLargeMapControl());
			this.map.addControl(new GScaleControl(200));
			this.map.addMapType(G_PHYSICAL_MAP)
			this.map.addMapType(G_SATELLITE_3D_MAP)
			this.map.enableScrollWheelZoom();
			this.map.enableContinuousZoom();
			this.map.setCenter(new GLatLng(48.0,13.0),5,G_HYBRID_MAP);

			var tropos = document.getElementsByTagName("input");
			for (var i=0,j=tropos.length; i<j; i++) {
				tropos[i].geoXml = new GGeoXml("http://rammstein.dfmk.hu/~s200/tropo/"+tropos[i].id+".kmz", xmlLoaded);
				tropos[i].onclick = this.onclick.bind(this, tropos[i]);
			}

			if (location.hash) {
				if (preset = document.getElementById(location.hash.replace("#",""))) {
					preset.checked = true;
					setTimeout(this.onclick.bind(this, preset), 0);
				}
			}
		}
	},

	onclick: function(input) {
		if (input.checked) {
			if (input.geoXml.isHidden()) input.geoXml.show();
			else this.map.addOverlay(input.geoXml);
			input.geoXml.gotoDefaultViewport(this.map);
		} else input.geoXml.hide();
	}
}

window.onload = Tropo.init.bind(Tropo);
