var map;
var geocoder;
var mgr;
var baseIcon;
//var marker_groups = new Array();

function initialize() {
	if (GBrowserIsCompatible()) {
		geocoder = new GClientGeocoder();
		var latlng = new GLatLng(default_lat,default_lng);
		map = new GMap2(document.getElementById('map'));
		map.addControl(new GLargeMapControl3D());
		map.addControl(new GMenuMapTypeControl());
		map.addMapType(G_PHYSICAL_MAP);
		map.setCenter(latlng, 11, G_NORMAL_MAP);
	}
	getMarkersFromDB();
	addRoutes();
}

function dynmapcallback(mapservicelayer) {
	map.addOverlay(mapservicelayer);
}

function showAllGroups() {
	for (cat in marker_groups) {
		for (var i = 0; i < marker_groups[cat].length; i++) {
			var marker = marker_groups[cat][i];
			marker.show();
		}
	}
}

function showMarkersInCategory(cat) {
	for (var i = 0; i < marker_groups[cat].length; i++) {
		var marker = marker_groups[cat][i];
		marker.show();
	}
}

function hideMarkersInCategory(cat) {
	for (var i = 0; i < marker_groups[cat].length; i++) {
		var marker = marker_groups[cat][i];
		marker.hide();
	}
}

function setUpBaseIcon() {
	baseIcon = new GIcon(G_DEFAULT_ICON);
	baseIcon.shadow = "";
	baseIcon.iconSize = new GSize(50, 50);
	//baseIcon.shadowSize = new GSize(37, 34);
	baseIcon.iconAnchor = new GPoint(25, 50);
	baseIcon.infoWindowAnchor = new GPoint(25, 25);
}

function getMarkersFromDB() {
	var searchUrl = 'includes/create-xml.php';
	GDownloadUrl(searchUrl, function(data) {
		var geoXml = new geoXML3.parser({map: map});
		geoXml.parse(searchUrl);
		var xml = GXml.parse(data);
		var markers = xml.documentElement.getElementsByTagName('marker');
		//map.clearOverlays();
		setUpBaseIcon();
		
		var bounds = new GLatLngBounds();
		for (var i = 0; i < markers.length; i++) {
			var id = markers[i].getAttribute('id');
			var name = markers[i].getAttribute('name');
			var address = markers[i].getAttribute('address');
			var city = markers[i].getAttribute('city');
			var state = markers[i].getAttribute('state');
			var zip = markers[i].getAttribute('zip');
			var point = new GLatLng(parseFloat(markers[i].getAttribute('lat')), parseFloat(markers[i].getAttribute('lng')));
			var url = markers[i].getAttribute('url');
			var phone = markers[i].getAttribute('phone');
			var description = markers[i].getAttribute('description');
			var bike_racks = markers[i].getAttribute('bike_racks');
			var bike_lockers = markers[i].getAttribute('bike_lockers');
			var repair_locations = markers[i].getAttribute('repair_locations');
			var free_air = markers[i].getAttribute('free_air');
			var cool_spots = markers[i].getAttribute('cool_spots');
			
			var marker = createMarker(point, id, name, address, city, state, zip, url, phone, description, bike_racks, bike_lockers, repair_locations, free_air, cool_spots);
			
     		map.addOverlay(marker);
     		
     		if (bike_racks == '1') {
     			marker_groups['bike_racks'].push(marker);
     		}
     		if (bike_lockers == '1') {
     			marker_groups['bike_lockers'].push(marker);
     		}
     		if (repair_locations == '1') {
     			marker_groups['repair_locations'].push(marker);
     		}
     		if (free_air == '1') {
     			marker_groups['free_air'].push(marker);
     		}
     		if (cool_spots == '1') {
     			marker_groups['cool_spots'].push(marker);
     		}
			marker.show();
			
			bounds.extend(point);
		}
		map.setCenter(bounds.getCenter(), (map.getBoundsZoomLevel(bounds) - 0));
	});
	showAllGroups();
}

function addRoutes() {

	/*
var encodedPolyline = createRoute(
			'Minneapolis Diagonal Trail',
			"emrqGli_xPyT_Ayh@TyEdBqGqC{DHc}@{~@iEyGmDsKeB}LQgOw@sO",
			"BBBBBBBBBBBB",
			'bike-paths');
	
	map.addOverlay(encodedPolyline);
	route_groups['bike-paths'].push(encodedPolyline);
	encodedPolyline.show();
	
	var encodedPolyline2 = createRoute(
			'Route 61',
			"gnrqGrrqwPp@vmIb@h`Frb@hjBbExJ`i@nz@",
			"BBBBBB",
			'bus-routes');
			
	map.addOverlay(encodedPolyline2);
	route_groups['bus-routes'].push(encodedPolyline2);
	encodedPolyline2.show();
*/
	
}

function showRoutesInCategory(cat) {
	for (var i = 0; i < route_groups[cat].length; i++) {
		var line = route_groups[cat][i];
		line.show();
	}
}

function hideRoutesInCategory(cat) {
	for (var i = 0; i < route_groups[cat].length; i++) {
		var line = route_groups[cat][i];
		line.hide();
	}
}

function createMarker(point, id, name, address, city, state, zip, url, phone, description, bike_racks, bike_lockers, repair_locations, free_air, cool_spots) {
	
	var markerIcon = new GIcon(baseIcon);
	if (bike_racks == '1') {
		markerIcon.image = "images/icons/bike-racks.png";
	}
	if (bike_lockers == '1') {
		markerIcon.image = "images/icons/bike-lockers.png";
	}
	if (repair_locations == '1') {
		markerIcon.image = "images/icons/repair-locations.png";
	}
	if (free_air == '1') {
		markerIcon.image = "images/icons/free-air.png";
	}
	if (cool_spots == '1') {
		markerIcon.image = "images/icons/cool_spots.png";
	}

	markerOptions = { icon: markerIcon };
	
	var marker = new GMarker(point, markerOptions);
	
	var html = '<div class="markertext"><h3>' + name + '</h3>';
	if (address != '') {
		html += '<p>' + address + '<br/>' + city + ', ' + state + ' ' + zip + '</p>';
	}
	if (phone != '') {
		html += '<p>' + phone + '</p>';
	}
	html += '</div>';
	GEvent.addListener(marker, 'click', function() {
		marker.openInfoWindowHtml(html);
	});
	return marker;
}

function createRoute(name, encodedString, encodedLevels, category) {
	
	var color;
	if (category == 'bike-paths') {
		color = '#FF0000';
	}
	else if (category == 'bus-routes') {
		color = '#0000FF';
	}
	
	var encodedPolyline = new GPolyline.fromEncoded({
	    color: color,
	    weight: 10,
	    points: encodedString,
	    levels: encodedLevels,
	    zoomFactor: 32,
	    numLevels: 4
	});
	
	var html = '<div class="markertext"><h3>' + name + '</h3></div>';
	GEvent.addListener(encodedPolyline, 'click', function(latlng) {
		map.openInfoWindowHtml(latlng, html);
	});
	
	return encodedPolyline;
}
