var map;
var mm;
var gmarkersAll = [];

var catagoryIcons = [];
catagoryIcons["McDonald's"] = markerIcon("M", "#2B60DE", "#FFFFFF");
catagoryIcons["McDonald's McDrive"] = markerIcon("Md", "#3BB9FF", "#FFFFFF");
catagoryIcons["FEBO"] = markerIcon("F", "#8D38C9", "#FFFFFF");
catagoryIcons["Subway"] = markerIcon("S", "#FF0000", "#FFFFFF");
catagoryIcons["New York Pizza"] = markerIcon("N", "#3B9C9C", "#FFFFFF");
catagoryIcons["Burger King"] = markerIcon("B", "#7D053F", "#FFFFFF");
catagoryIcons["Domino's"] = markerIcon("D", "#FBB917", "#FFFFFF");
catagoryIcons["Kentucky Fried Chicken"] = markerIcon("K", "#4AA02C", "#FFFFFF");
catagoryIcons["Kentucky Fried Chicken Drive"] = markerIcon("Kd", "#4CC552", "#FFFFFF");
//Pizza Hut

function markerIcon(label_text, prim_color, text_color) {
	var iconOptions = {};
	iconOptions.width = 32;
	iconOptions.height = 32;
	iconOptions.primaryColor = prim_color;
	iconOptions.label = label_text;
	iconOptions.labelSize = 0;
	iconOptions.labelColor = text_color;
	iconOptions.shape = "circle";
	return MapIconMaker.createFlatIcon(iconOptions);
}

function createMarker(point, name, address, type, zipcode, city) {
	var marker = new GMarker(point, catagoryIcons[type]);
	var chain = "chainCommon chain" + type.substring(0,1);
	if (type.indexOf("Drive")!=-1) {
		chain += "d";
	}
	var html = "<p><span class=\"" + chain + "\">" + type + "</span> " + name + "<br/>" + address + "<br/>" + zipcode + " " + city + "</p>";
	GEvent.addListener(marker, 'click', function() {
		marker.openInfoWindowHtml(html);
	});
	return marker;
}

function myMarker(marker, point, name, address, type, zipcode, city, province) {
	this.marker = marker;
	this.point = point;
	this.name = name;
	this.address = address;
	this.type = type;
	this.zipcode = zipcode;
	this.city = city;
	this.province = province;
	this.visible = true;
}

function myMarkers(title, cssStyle) {
	var points = new Array();
	var title = title;
	var cssStyle = cssStyle;
	
	var moveLat = 0.0;
	var moveLng = 0.0;
	
	var clusterSet = false;
	var label;
	
	this.isClusterSet = function() {
		return clusterSet;
	}
	
	this.getLabel = function() {
		return label;
	}
	
	this.pushPoint = function(p) {
		points.push(p);
	}
	
	this.move = function(lat,lng) {
		moveLat = lat;
		moveLng = lng;
	}
					
	this.doCluster = function() {
		if (points.length>0) {
			var sumLng = 0;
			var sumLat = 0;
			
			for (var i = 0; i < points.length; i++) {
				sumLng += points[i].lng();
				sumLat += points[i].lat();
			}
			
			var avgLng = sumLng / points.length;
			var avgLat = sumLat / points.length;
			
			var point = new GLatLng(avgLat+moveLat,avgLng+moveLng);
			
			label = new ELabel(point, "<pre>" + title + ": " + points.length + "</pre>", cssStyle,null,90,null);

			clusterSet = true;
		} else {
			clusterSet = false;
		}
	}
}

function loadFastfoodChainIntoMemory() {

	GDownloadUrl("./pois/markers", function(data, responseCode) {

		if(responseCode == 200) {
			var noPerChain = [];
			var xml = GXml.parse(data);
			var markers = xml.documentElement.getElementsByTagName("marker");
			for (var i = 0; i < markers.length; i++) {
				var name = markers[i].getAttribute("name");
				var address = markers[i].getAttribute("address");
				var type = markers[i].getAttribute("type");
				var zipcode = markers[i].getAttribute("zipcode");
				var city = markers[i].getAttribute("city");
				var province = markers[i].getAttribute("province");
				var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),parseFloat(markers[i].getAttribute("lng")));
				var marker = createMarker(point, name, address, type, zipcode, city);

				var mijnMarker = new myMarker(marker, point, name, address, type, zipcode, city, province);

				gmarkersAll.push(mijnMarker);
				
				if (noPerChain[type]==null) {
					noPerChain[type] = 1;
				} else {
					noPerChain[type]++;
				}
			}
			
			showFastfoodChain("All", true);
			
			for(type in noPerChain) {
				var chainId = "chain" + type.substring(0,1);
				if (type.indexOf("Drive")!=-1) {
					chainId += "d";
				}
				chainId += "No";
				document.getElementById(chainId).innerHTML = "(" + noPerChain[type] + ")";
			}						
			document.getElementById("chainNo").innerHTML = "(" + gmarkersAll.length + ")";

		} else if(responseCode == -1) {
			//alert("Data request timed out. Please try later.");
		} else { 
			//alert("Request resulted in error. Check if XML file is retrievable.");
		}

	});

}

function showFastfoodChain(type, doShow) {
	var gmarkersCountry = new myMarkers("Nederland", "countryLabel");
	var gmarkersProvince = [];
	var gmarkersZipcode = [];
	mm.clearMarkers();
	
	for(var i=0;i<gmarkersAll.length;i++) {
		var mijnMarker = gmarkersAll[i];
		if ((mijnMarker.type==type) || (type=="All")) {
			if (doShow) {
				//mijnMarker.marker.show();
			} else {
				//mijnMarker.marker.hide();
				mijnMarker.marker.closeInfoWindow();
			}
			mijnMarker.visible = doShow;
		}
		
		if (mijnMarker.visible) {
			var zipcodeStart = mijnMarker.zipcode.substring(0,2);
																
			if (gmarkersProvince[mijnMarker.province]==null) {
				gmarkersProvince[mijnMarker.province] = new myMarkers(mijnMarker.province, "provinceLabel");
			}
			gmarkersProvince[mijnMarker.province].pushPoint(mijnMarker.point);
			
			if (gmarkersZipcode[zipcodeStart]==null) {
				gmarkersZipcode[zipcodeStart] = new myMarkers(zipcodeStart + "xx", "zipcodeLabel");
			}
			gmarkersZipcode[zipcodeStart].pushPoint(mijnMarker.point);
			gmarkersCountry.pushPoint(mijnMarker.point);
			
			mm.addMarker(mijnMarker.marker,13,19);
		}
	}
	
	for(province in gmarkersProvince) {
		if (province=="Friesland") { gmarkersProvince[province].move(-0.04,0); }
		if (province=="Groningen") { gmarkersProvince[province].move(0.02,0); }
		if (province=="Noord-Holland") { gmarkersProvince[province].move(-0.095,-0.55); }
		if (province=="Flevoland") { gmarkersProvince[province].move(0.08,-0.015); }
		if (province=="Overijssel") { gmarkersProvince[province].move(-0.04,0.55); }
		if (province=="Zuid-Holland") { gmarkersProvince[province].move(-0.06,-0.6); }
		if (province=="Gelderland") { gmarkersProvince[province].move(-0.05,0.5); }
		if (province=="Zeeland") { gmarkersProvince[province].move(0,-0.05); }
		
		gmarkersProvince[province].doCluster();
		if (gmarkersProvince[province].isClusterSet()) {
			mm.addMarker(gmarkersProvince[province].getLabel(),7,9);
		}
	}
	
	for(var i=0;i<gmarkersZipcode.length;i++) {
		if (gmarkersZipcode[i]!=null) {
			gmarkersZipcode[i].doCluster();
			if (gmarkersZipcode[i].isClusterSet()) {
				mm.addMarker(gmarkersZipcode[i].getLabel(),10,12);
			}
		}
	}
	
	gmarkersCountry.doCluster();
	if (gmarkersCountry.isClusterSet()) {
		mm.addMarker(gmarkersCountry.getLabel(),0,6);
	}
}

function initialize() {

	if (GBrowserIsCompatible()) {
	
		_mPreferMetric=true; //to make size sure for IE too
		map = new GMap2(document.getElementById("map_canvas"));

		map.setCenter(new GLatLng(52.412472, 5.333862), 5);
		map.setUIToDefault();
		map.zoomIn();
		
		mm = new MarkerManager(map, {borderPadding:1});
		
		loadFastfoodChainIntoMemory();

	} else {
		//Browser doesn't support google maps.
	}
}
