
// Globals
var language = 'de';
var skip = false;
 var geocoder = null;
 var current_marker = null;
var clear_city_id = 0;
var city_id2 = 0;
var place_id2 = 0;
var IE = (navigator.appName.indexOf('Microsoft')!=-1);
var city_id = 0;
var place_id = 0;
var mapCenter = null;

// http://www.onlinetools.org/articles/unobtrusivejavascript/chapter4.html
function addEvent(obj, evType, fn){
 if (obj.addEventListener) { obj.addEventListener(evType, fn, false); return true; } 
 else if (obj.attachEvent) { var r = obj.attachEvent("on"+evType, fn); return r; } 
 else return false;
}
// Add Event when page is loaded.
addEvent(window, 'load', function() {
	if (mapdomain=="") mapdomain=domain;
	
//	showNode('centerContainer');
//	if (location.hash.substr(1,location.hash.length)!='') location.href=location.hash.substr(1,location.hash.length)+'.html';
} );

function showNode(id) {
	document.getElementById(id).style.minHeight=(IE?document.documentElement.clientHeight:window.innerHeight)-80+'px';
}

function checkMobile(inputNode, mobilePrefix) {
	value = inputNode.value;
	while (value.match(/\D/)) value = value.replace(/\D/,'');
	if (value.substr(0,2) == '00') value = value.slice(2,value.length);
	if (value.substr(0,1) == '0') value = mobilePrefix + value.slice(1,value.length);
	while (value.match(/\D/)) value = value.replace(/\D/,'');
	value = '+' + value;
	ccl = countryCodeLength(value);
	if (value.substr(ccl+1,1)=='0') value = value.substr(0,ccl+1) + value.slice(ccl+2,value.length);
	inputNode.value = value;
}

function countryCodeLength(number) {
	countryCodes = [ ["1","7"],
					['20','27','30','31','32','33','34','36','40','41','43','44','45','46','47','48','49','51','52','53','54','55','56','57','58','60','61','62','63','64','65','66','81','82','84','86','90','91','92','93','94','95','98'],
					['212','213','216','218','220','221','222','223','224','225','226','227','228','229','230','231','232','233','234','235','236','237','238','239','240','241','242','243','244','245','247','248','249','250','251','252','253','254','255','256','257','258','260','261','262','263','264','265','266','267','268','269','290','291','297','298','299','350','351','352','353','354','355','356','357','358','359','370','371','372','373','374','375','376','377','378','380','381','385','386','387','389','390','396','420','421','500','501','502','503','504','505','506','507','508','509','590','591','592','593','594','595','596','597','598','599','670','671','673','674','675','676','677','678','679','680','682','684','685','686','687','688','689','691','692','850','852','853','855','856','871','872','873','874','880','886','960','961','962','963','964','965','966','967','968','971','972','973','974','975','976','977','992','993','994','995','996','998'],
					['1242','1246','1264','1268','1284','1340','1345','1441','1473','1649','1664','1758','1767','1784','1787','1809','1868','1869','1876','4175','6722','6723','6724'],
					['67210','67211','67212','67213'] ];
	for (var i=0; i<countryCodes.length; i++) {
		code = number.substr(1,i+1);
		for (var j=0; j<countryCodes[i].length; j++)
			if (code == countryCodes[i][j]) return i+1;
	}
	return 0;
}

function GetTileUrl_Mapnik(a, z) {
    return "http://tile.openstreetmap.org/" +
                z + "/" + a.x + "/" + a.y + ".png";
}

function initGoogleMaps() {
	return initGoogleMapsDiv('maps');
}

function initGoogleMapsDiv( node_name ) {
	if (!GBrowserIsCompatible()) return;

	marker = new Array();
	markers = 0;
	
	if (city_id2!=0) city_id = city_id2;
	if (place_id2) place_id = place_id2;
	place_id2 = 0;
	if (location.hash.indexOf('station')!=-1) place_id=location.hash.substr(location.hash.lastIndexOf('=')+1,10);
	if (location.hash.indexOf('city')!=-1) city_id=location.hash.substr(location.hash.lastIndexOf('=')+1,10);
	// Create our "tiny" marker icon
/*
	var myicon = new GIcon();
	myicon.image = "/uploads/tf/nextbike-icon-red-1.png";
	myicon.shadow = "/uploads/tf/nextbike-icon-shadow.png";
	myicon.iconSize = new GSize(56, 48);
	myicon.shadowSize = new GSize(56, 48);
	myicon.iconAnchor = new GPoint(26, 23);
	myicon.infoWindowAnchor = new GPoint(30, 20);
	var myicon2 = new GIcon(myicon);
	myicon2.image = "/uploads/tf/nextbike-icon-red-1.png";
	var break_icon = new GIcon(myicon);
	break_icon.image = "/uploads/tf/nextbike-icon-blue.png";
*/
	var metroradruhr_icon = new GIcon();
	metroradruhr_icon.image = "/uploads/tf/metroradruhr_icon_32x32_mit_schatten.png";
	metroradruhr_icon.iconSize = new GSize(32, 32);
	metroradruhr_icon.iconAnchor = new GPoint(16, 16);
	metroradruhr_icon.infoWindowAnchor = new GPoint(23, 10);
	var metroradruhr_break_icon = new GIcon(metroradruhr_icon);
	metroradruhr_break_icon.image = "/uploads/tf/metroradruhr_break_icon_32x32_mit_schatten.png";
	var balticbike_icon = new GIcon(metroradruhr_icon);
	balticbike_icon.image = "/uploads/tf/balticbike_icon_32x32.png";
	var balticbike_break_icon = new GIcon(metroradruhr_icon);
	balticbike_break_icon.image = "/uploads/tf/balticbike_break_icon_32x32.png";
	var usedomrad_icon = new GIcon(metroradruhr_icon);
	usedomrad_icon.image = "/uploads/tf/usedom_icon_32x32.png";
	var usedomrad_break_icon = new GIcon(metroradruhr_icon);
	usedomrad_break_icon.image = "/uploads/tf/usedom_icon_32x32.png";
	var myicon = new GIcon(metroradruhr_icon);
	myicon.image = "/uploads/tf/nextbike_icon_32x32.png";
	var break_icon = new GIcon(metroradruhr_icon);
	break_icon.image = "/uploads/tf/nextbike_break_icon_32x32.png";

	map = new GMap2(document.getElementById(node_name));
	map.addControl(new GSmallMapControl());
	map.addControl(new GMapTypeControl());
	map.enableScrollWheelZoom();
	map.setCenter(new GLatLng( 0,0),0);
	var mgr = new GMarkerManager(map, {trackMarkers: true});
	map.removeMapType(G_SATELLITE_MAP);

   var copyright = new GCopyright(1,
        new GLatLngBounds(new GLatLng(-90,-180), new GLatLng(90,180)), 0,
        '(<a rel="license" href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>)');
    var copyrightCollection =
        new GCopyrightCollection('&copy; <a href="http://www.openstreetmap.org/">OpenStreetMap</a> Contributors');
    copyrightCollection.addCopyright(copyright);

    var tilelayers_mapnik = new Array();
    tilelayers_mapnik[0] = new GTileLayer(copyrightCollection, 0, 18);
    tilelayers_mapnik[0].getTileUrl = GetTileUrl_Mapnik;
    tilelayers_mapnik[0].isPng = function () { return true; };
    tilelayers_mapnik[0].getOpacity = function () { return 1.0; };
    var mapnik_map = new GMapType(tilelayers_mapnik,
        new GMercatorProjection(19), "OSM",
        { urlArg: 'mapnik', linkColor: '#000000' });
    map.addMapType(mapnik_map);

    if (domain!='tr') map.setMapType(mapnik_map);


//	areas = new GGeoXml("http://maps.google.de/maps/ms?ie=UTF8&hl=de&oe=UTF8&msa=0&msid=117603251244312388326.000452abfa6b7d1da5348&output=kml");
//	map.addOverlay( areas );
	areas_nz = new GGeoXml("http://maps.google.de/maps/ms?ie=UTF8&hl=nz&oe=UTF8&msa=0&msid=113141097346271387613.000451f116b17f05026b5&output=kml");
	map.addOverlay( areas_nz );

	GDownloadUrl("/maps/nextbike-official.xml?domain="+domain, function(data, responseCode) {
		var xml = GXml.parse(data);
		for (var i = 0; i < xml.documentElement.childNodes.length; i++) {
			country = xml.documentElement.childNodes[i];
			marker[markers] = new GMarker(new GLatLng( parseFloat(country.getAttribute("lat")), parseFloat(country.getAttribute("lng")) ), { icon:myicon } );
			marker[markers].node = country;
			mgr.addMarker(marker[markers], 0, 3);
			if (!mapdomain) mapdomain = location.hostname.substr(location.hostname.lastIndexOf(".")+1);
			if (marker[markers].node.getAttribute('domain')==mapdomain)
				map.setCenter(marker[markers].getPoint(),parseInt(marker[markers].node.getAttribute("zoom")));
			markers ++;
			for (var j = 0; j < country.childNodes.length; j++) {
				city = country.childNodes[j];
				var cityIcon = myicon;
				var cityBreakIcon = break_icon;
				if (city.getAttribute("maps_icon")!=''&&domain!='de') {
					eval('cityIcon = '+city.getAttribute("maps_icon")+'_icon;');
					eval('cityBreakIcon = '+city.getAttribute("maps_icon")+'_break_icon;');
				}
				marker[markers] = new GMarker(new GLatLng( parseFloat(city.getAttribute("lat")), parseFloat(city.getAttribute("lng")) ), { icon:(parseInt(city.getAttribute("break"))>0?cityBreakIcon:cityIcon) } );
				marker[markers].node = city;
				mgr.addMarker(marker[markers], 4, 9);
				if (city_id) if (marker[markers].node.getAttribute('uid')==city_id||marker[markers].node.getAttribute('alias')==city_id)
					map.setCenter(marker[markers].getPoint(),parseInt(marker[markers].node.getAttribute("zoom")));
				markers ++;
				for (var k = 0; k < city.childNodes.length; k++) {
					place = city.childNodes[k];
					marker[markers] = new GMarker(new GLatLng( parseFloat(place.getAttribute("lat")), parseFloat(place.getAttribute("lng")) ),
										{ icon:(parseInt(place.getAttribute("bikes"))>0?cityIcon:cityBreakIcon) } );
					marker[markers].node = place;
					mgr.addMarker(marker[markers], 10);
					if (marker[markers].node.getAttribute('number')==place_id)
						window.setTimeout('GEvent.trigger( map, "click" , marker['+markers+'], marker['+markers+'].getPoint(), true )',100);
//						map.setCenter(marker[markers].getPoint(),16);
					markers ++;
				}
			}
		}
		if (!city_id && mapCenter) mapCenter();
	});

	GEvent.addListener(map, "click", function(mymarker, point) {
		if (mymarker) if (mymarker.node) {
			switch (mymarker.node.nodeName) {
				case 'country':
				case 'city':
					if (map.getZoom()<parseInt(mymarker.node.getAttribute("zoom"))) 
						map.setCenter(mymarker.getPoint(),parseInt(mymarker.node.getAttribute("zoom")));
					else map.panTo(mymarker.getPoint());
					break;
				case 'place':
					if (map.getZoom()<16) map.setCenter(mymarker.getPoint(),16);
					else map.panTo(mymarker.getPoint());
					available = parseInt(mymarker.node.getAttribute("bikes"));
					bike_racks = parseInt(mymarker.node.getAttribute("bike_racks"));
					switch (language) {
						case 'de': 
							official_message = ""; //(parseInt(mymarker.node.getAttribute("spot"))?" - Bikespot":"");
							station_message = (mymarker.node.getAttribute("number")?"Stationsnummer: "+mymarker.node.getAttribute("number"):"");
							available_message = (available>4?"Mehr als 4":available)+(available==1?" Rad":" Räder")+" verfügbar";
							if (bike_racks) available_message += "<br>("+bike_racks+" Ständer)";
							break;
						default: 
							official_message = ""; //(parseInt(mymarker.node.getAttribute("spot"))?" - Bikespot":"");
							station_message = (mymarker.node.getAttribute("number")?"Station number: "+mymarker.node.getAttribute("number"):"");
							available_message = (available>4?"More than 4":available)+(available==1?" bike":" bikes")+" available";
							if (bike_racks) available_message += "<br>("+bike_racks+" racks)";
							break;
					}
					current_marker = mymarker;
					window.setTimeout('current_marker.openInfoWindowHtml("<div style=\'min-height:7em\'><b>'+mymarker.node.getAttribute("name")+official_message+"</b>, "+mymarker.node.parentNode.getAttribute("name")+(station_message?"<br/>"+station_message:"")+"<br/>"+available_message+'<br/></div>")',100);
					break;
			}
   		} else {
			map.closeInfoWindow();
    	}
	});
	
	geocoder = new GClientGeocoder();
} 

function findNextbike( myadressField ) {
   myadressField.style.background = '#fff';
   geocoder.getLatLng( myadressField.value, function(point) {
     if (point) {
       var minindex = 0;
       var dist = new Array();
       for (i=0; i<markers; i++) {
         dist[i] = (marker[i].getPoint().lng() - point.lng()) * (marker[i].getPoint().lng() - point.lng());
         dist[i] += (marker[i].getPoint().lat() - point.lat()) * (marker[i].getPoint().lat() - point.lat());
         if (dist[i]<dist[minindex]) if (marker[i].node.nodeName=='place') minindex = i;
       }
       var zoom = 1;
       if (dist[minindex] < 50) zoom = 3;
       if (dist[minindex] < 30) zoom = 4;
       if (dist[minindex] < 15) zoom = 5;
       if (dist[minindex] < 5) zoom = 6;
       if (dist[minindex] < 2) zoom = 7;
       if (dist[minindex] < 0.5) zoom = 8;
       if (dist[minindex] < 0.05) zoom = 9;
       if (dist[minindex] < 0.006) zoom = 10;
       if (dist[minindex] < 0.002) zoom = 11;
       if (dist[minindex] < 0.0006) zoom = 12;
       if (dist[minindex] < 0.0002) zoom = 13;
       if (dist[minindex] < 0.00006) zoom = 14;
       if (dist[minindex] < 0.00002) zoom = 15;
       map.setCenter(point, zoom);
       window.setTimeout('GEvent.trigger( map, "click" , marker['+minindex+'], marker['+minindex+'].getPoint(), true )',100);
     } else {
       myadressField.style.background = '#fdd';
     }
   });
}
function showCity(cityId, pageId) {
	city_id = cityId;
	if (clear_city_id) window.clearTimeout(clear_city_id);
	location.href = 'index.php?id='+pageId+'&L='+language+'&city_id='+city_id;
	clear_city_id = window.setTimeout('city_id=0',5000);
	return false;
}


