// CONSTANTS

var WORLD_LAT			= 20.00;
var WORLD_LONG			= 25.00;
var WORLD_ZOOM			= 16;

var EUROPE_LAT			= 54.00;
var EUROPE_LONG			= 3.00;
var EUROPE_ZOOM			= 14;

var FRANCE_LAT			= 46.68;
var FRANCE_LONG			= 3.09;
var FRANCE_ZOOM			= 12;

// GLOBAL VARIABLES
var dzMap = null;

// All DZ (for the search engine)
var dz = new Array();
var nbDz = 0;
var icons = new Array();

// FUNCTIONS
function goTo(map, point, zoom, gType)
{
	map.setMapType(gType);

	if (map.getZoomLevel() == zoom)
		map.recenterOrPanToLatLng(point);
	else
		map.centerAndZoom(point, zoom);
}

var rxA = /[âäà]/g;
var rxE = /[êëèé]/g;
var rxI = /[îïì]/g;
var rxO = /[ôöòó]/g;
var rxU = /[ûüù]/g;
var rxC = /[ç]/g;

function removeAccentsAndLower(str)
{
	str = str.toLowerCase();
	str = str.replace(rxA, "a");
	str = str.replace(rxE, "e");
	str = str.replace(rxI, "i");
	str = str.replace(rxO, "o");
	str = str.replace(rxU, "u");
	str = str.replace(rxC, "c");
	return str;
}

function lookFor(map, query)
{
	var dzFound = new Array();
	var nbFound = 0;

	if (query.length < 3) return dzFound;
	query = removeAccentsAndLower(query);

	for(var i=0; i<dz.length; i++)
	{
		if (dz[i][0].indexOf(query) >= 0)
		{
			dzFound[nbFound++] = dz[i][1];
		}
	}

	return dzFound;
}

function createMarker(point, html, icon, tooltip)
{
	var marker = new GxMarker(point, icon, tooltip);

	GEvent.addListener(
		marker,
		"click",
		function() {
			marker.openInfoWindowHtml(
				html
				);
			}
		);

	return marker;
}

function dzOnLoad(dzName, dzStyle, viewPoint, zoom, maptype)
{
	if (document.getElementById("googlediv"))
	{
		dzMap = new GMap(document.getElementById("googlediv"));

		// MAIN CODE
		if (GBrowserIsCompatible())
		{
			dzMap.addControl(new GLargeMapControl());
			dzMap.addControl(new GMapTypeControl());
			dzMap.addControl(new GScaleControl());

			if (viewPoint)
			{
				dzMap.setMapType(maptype);
				dzMap.centerAndZoom(viewPoint, zoom);
			}
			else
			{
				dzMap.setMapType(G_MAP_TYPE);
				dzMap.centerAndZoom(new GPoint(FRANCE_LONG, FRANCE_LAT), FRANCE_ZOOM);
			}

			// Download the data in data.xml and load it on the map.
			var request = GXmlHttp.create();
			var url;

			if (dzName)
			{
				url = "/dropzoneXml.php" +
					"?nm=" + escape(dzName) +
					"&amp;lt=" + viewPoint.y +
					"&amp;ln=" + viewPoint.x;
				if (dzStyle) url += "&amp;st=" + dzStyle;
			}
			else
			{
				url = "/dropzonesXml.php" + dzQS;
			}

			request.open("GET", url, true);

			request.onreadystatechange = function() {
				if (request.readyState == 4)
				{
					var xmlDoc = request.responseXML;

					// Schools
					var schools = new Array();
					var nbSchools = 0;

					// Icons
					var styles = xmlDoc.documentElement.getElementsByTagName('Style');
					for(var i=0; i<styles.length; i++)
					{
						icons[styles[i].getAttribute('id')] = new GIcon();
						icons[styles[i].getAttribute('id')].image = styles[i].getElementsByTagName('href')[0].firstChild.nodeValue;
						icons[styles[i].getAttribute('id')].iconSize = new GSize(parseInt(styles[i].getElementsByTagName('w')[0].firstChild.nodeValue), parseInt(styles[i].getElementsByTagName('h')[0].firstChild.nodeValue));
						icons[styles[i].getAttribute('id')].iconAnchor = new GPoint(parseInt(styles[i].getElementsByTagName('x')[0].firstChild.nodeValue), parseInt(styles[i].getElementsByTagName('y')[0].firstChild.nodeValue));
						icons[styles[i].getAttribute('id')].infoWindowAnchor = new GPoint(parseInt(styles[i].getElementsByTagName('x')[0].firstChild.nodeValue), parseInt(styles[i].getElementsByTagName('y')[0].firstChild.nodeValue));
					}

					// Dans le cas d'une seule DZ je charge le marqueur à la main au lieu
					// de parser le KML car je n'arrive pas à parser dropzoneXml.php
					// (alors que aucun pb avec dropzonesXml.php ...)
					if (dzName)
					{
						// style
						var styleUrl;
						if (dzStyle)
							styleUrl = dzStyle;
						else
							styleUrl = "dropZone";

						// marker
						var marker = createMarker(
							viewPoint,
							"<b><font class=\"page_title\">" +
								dzName +
								"</font></b><br/>" +
								"<br/>" +
								"[<a href=\"" +
									"javascript:goTo(dzMap, new GPoint(" + viewPoint.x + "," + viewPoint.y + "), 3, G_SATELLITE_TYPE)" +
									"\">Zoom</a>]",
							icons[styleUrl],
							dzName
							);

						dzMap.addOverlay(marker);
					}
					else
					{
						// Markers
						var placemarks = xmlDoc.documentElement.getElementsByTagName('Placemark');
						for(var i=0; i<placemarks.length; i++)
						{
							// lat/lng
							var lat = parseFloat( placemarks[i].getElementsByTagName('latitude')[0].firstChild.nodeValue );
							var lng = parseFloat( placemarks[i].getElementsByTagName('longitude')[0].firstChild.nodeValue );
	
							// textes
							var name = placemarks[i].getElementsByTagName('name')[0].firstChild.nodeValue;
							var description = placemarks[i].getElementsByTagName('description')[0].firstChild.nodeValue;
	
							// style
							var styleUrl = placemarks[i].getElementsByTagName('styleUrl')[0].firstChild.nodeValue;
							if (styleUrl) styleUrl = styleUrl.substring(1);
	
							// point
							var point = new GPoint(lng, lat);
	
							// marker
							var marker = createMarker(
								point,
								"<b><font class=\"page_title\">" +
									name +
									"</font></b><br/>" +
									"<br/>" +
									description +
									"[<a href=\"" +
										"javascript:goTo(dzMap, new GPoint(" + point.x + "," + point.y + "), 3, G_SATELLITE_TYPE)" +
										"\">Zoom</a>]",
								icons[styleUrl],
								name
								);
	
							if (styleUrl=='school' || styleUrl=='schoolNo')
							{
								schools[nbSchools++] = marker;
							}
							else
							{
								dzMap.addOverlay(marker);
							}
	
							dz[nbDz] = new Array(2);
							dz[nbDz][0] = removeAccentsAndLower(name + ' ' + description);
							dz[nbDz][1] = marker;
							nbDz++;
	
						} // for()
					}

					GEvent.addListener(
						dzMap,
						'zoom',
						function(oldZoomLevel, newZoomLevel) {
							if (oldZoomLevel>3 && newZoomLevel<=3)
								for(var i=0; i<schools.length; i++)
									dzMap.addOverlay(schools[i]);
							else if (oldZoomLevel<=3 && newZoomLevel>3)
								for(var i=0; i<schools.length; i++)
									dzMap.removeOverlay(schools[i]);
						}
						);

					// On cache l'éventuel message de chargement
					if (document.getElementById('loadingBox'))
						document.getElementById('loadingBox').style.visibility = 'hidden';

				} // function()
			}

			request.send(null);
		}
	}
}
