//the google map object
var map;

//the ajax request object
var request;

//the 'dafault' icon
var baseicon;

//array of markers so we can keep track of which to remove
var marks = new Array();

//shortcut to the message div
var m;

//is the a fetch in progress?
var running = false;

//these are for zoomin optimization (if prev zoom had all markers then no need to load them again for zooming in)
var prevZoom = -1;
var shownall = false;
var sentBounds = '';



function createMarker(point,html,icon,tel,num,site,address,cp,ville,tarif_de) {
	ii = new GIcon(baseicon);
	if (icon.length > 0) {
		ii.image = imageRoot+icon;
	}

	var marker = new GMarker(point, ii);
	html = html+'<br/>'+tel+'<br/>'+address+'<br/>'+cp+' '+ville+'<br/>Tarifs disponibles ŕ partir de : '+tarif_de+' €'+'<br/><a href="redirectsite.php?num='+num+'" target="_blank">Site Internet</a>';
	
	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml(html);
	});

	return marker;
}

function refresh_map() {
	if (running) {
		request.abort();
	}
	running = false;
	request = null;
	map.clearOverlays();
	marks = new Array();
	update_map();
}

function update_map() {
	if (running) {
		request.abort();
		running = false;
	}
	if (shownall == false || map.getZoomLevel() >= prevZoom) {
		var bounds = map.getBoundsLatLng();

		//build a list of layers to request
		var ob = document.getElementById("select_layers");
		var layers = '';
		for (var i = 0; i < ob.options.length; i++)
			if (ob.options[i].selected)
				layers = layers + '' +ob.options[i].value;

		var center = map.getCenterLatLng();
		var zoom = map.getZoomLevel();
		
		sentBounds = bounds.toString()
		
	//setup links that utalise the current map location
		document.getElementById("datalink").innerHTML='';
		
		if (layers == '') {
			m.innerHTML = "";
			map.clearOverlays();
			marks = new Array();
			running = false;
			return;
		} else {
			request = GXmlHttp.create();
			request.open("GET", "xmlcreate.php?lat="+center.y+"&lng="+center.x+"&cat="+layers, true);
		}
		
		
		if (layers == ',none') {
			m.innerHTML = "Chargement autres markers";
			map.clearOverlays();
			marks = new Array();
			running = false;
			return;
		}
		
		request.onreadystatechange = function() {
			if (request.readyState == 4 && running) {
				m.innerHTML = "Requete en cours..";
				var xmlDoc = request.responseXML;
				if (!xmlDoc.documentElement) {
					m.innerHTML = "Erreur XML";
					running = false;
					return;
				}
				var markers = xmlDoc.documentElement.getElementsByTagName("marker");
				
				//flag all current markers as old
				for (i in marks) 
					if (marks[i] != null) 
						marks[i].old = true;

				m.innerHTML = "Ajout Markers...";
				for (var i = 0; i < markers.length; i++) {
					num = markers[i].getAttribute("num");
					if (marks[num] && marks[num] != null) {
						//we have this one so lets flag it as valid
						marks[num].old = false;
					} else {
						var point = new GPoint(parseFloat(markers[i].getAttribute("lng")), parseFloat(markers[i].getAttribute("lat")));
						
						//add any extra fields to this line
						marks[num] = createMarker(point,markers[i].getAttribute("name"),markers[i].getAttribute("icon"),markers[i].getAttribute("tel"),num,markers[i].getAttribute("site"),markers[i].getAttribute("address"),markers[i].getAttribute("cp"),markers[i].getAttribute("ville"),markers[i].getAttribute("tarif_de"));
						
						map.addOverlay(marks[num]); 
						
					}
				}
				
				m.innerHTML = "Effacement des anciens markers...";
				for (i in marks) 
					if (marks[i] != null) 
						if (marks[i].old == true) {
							map.removeOverlay(marks[i]);
							marks[i] = null; //marks.splice(i,1);
						}

				//print out a message
				var count = xmlDoc.documentElement.getElementsByTagName("count");
				if (count && count.length > 0) {
					c = count[0].getAttribute("value");
					if (markers.length == c) {
						m.innerHTML = "Terminé";
						shownall = true;
					} else {
						m.innerHTML = "Terminé";
						shownall = false;
					}
				} else {
					m.innerHTML = "Terminé";
					shownall = true;
				}
				running = false;
			}
		}//end function
		m.innerHTML = "Calcul...";
		running = true;
		request.send(null);
	}
	prevZoom = map.getZoomLevel();
}
