
var map = null;

// Keep the window object clean
var Ophtec = new Object();
Ophtec.country	= null;
Ophtec.province = null;
Ophtec.city		= null;

function initEmptyMap(strid) {

	if (GBrowserIsCompatible()) {

        map = new GMap2(document.getElementById(strid));

        map.setCenter(new GLatLng(0, 0), 2);

        // nivigatie
        map.addControl(new GLargeMapControl());

        // switch satteliet / straatmap
		map.addControl(new GMapTypeControl());

		map.setMapType(map.getMapTypes()[0]);

	}

	return false;

}

function zoomProvince (areaselect, cityselect) {
	// Set selected province name
	for (var i = 0; i < areaselect.options.length; i++) {
		if (areaselect.options[i].selected) {
			Ophtec.province = areaselect.options[i].innerHTML;
		}
	}

	var coords = areaselect.getValue().split(/,/g);
	map.setCenter(new GLatLng(coords[1], coords[0]), 9);

	loadCitiesByJSON(cityselect);
}

function loadCitiesByJSON (cityselect) {
	new Ajax.Request ('http://ophtec.thijs.localhost.iwink.nl/consumer/en/refractive-lenses/refractive-surgery/refractive-surgery/$1308/getcities', {
		method : 'get',
		requestHeaders: {Accept: 'application/json'},
		parameters : {country : Ophtec.country, province : Ophtec.province},
		onSuccess : function (transport) {
			// Clear old cities
			cityselect.descendants().each(function (item) {
				item.remove();
			});

			var cities = transport.responseText.evalJSON();

			if (cities.length > 0) $('cities').show(); else $('cities').hide();

			cities.each(function (item) {
				cityselect.insert(new Element("option", {value : item}).update(item));
			});
		}
	});
}

function changeViewport (city) {
	var query = city + ', ' + Ophtec.country;
	var geocoder = new GClientGeocoder();

	geocoder.getLatLng(query,
		function(point) {
			if (!point) {
				alert(city + " cannot be located on the map");
			} else {
				map.setCenter(point, 13);
			}
		}
	);
}

function loadMarkersByXML(xmlUrl,strid) {

	if (GBrowserIsCompatible()) {

		map.clearOverlays(); // bestaande puntjes wissen

//        map = new GMap2(document.getElementById(strid));

		var bounds = new GLatLngBounds;

        map.enableDoubleClickZoom();
        map.enableContinuousZoom();

//        map.setCenter(new GLatLng(0, 0), 2);

        // nivigatie
//        map.addControl(new GLargeMapControl());

        // switch satteliet / straatmap
//		map.addControl(new GMapTypeControl());

		GDownloadUrl(xmlUrl, function(data, responseCode) {
		  var xml = GXml.parse(data);
		  var markers = xml.documentElement.getElementsByTagName("marker");

		  var prevlat = -99999.00;
		  var prevlng = -99999.00;

		  var title = '';
		  var html = '';

		  var point = false;

		  for (var i = 0; i < markers.length; i++) {

		    if (prevlat!= -99999.00 && (prevlat != parseFloat(markers[i].getAttribute("lat")) || prevlng != parseFloat(markers[i].getAttribute("lng")))) {

		    	var point = new GLatLng(prevlat,prevlng);

		    	bounds.extend(point);

		    	var tmpMarker = new GMarker(point,{
			    	title: title
			    });

			    tmpMarker.htmlInfo = html;
				GEvent.bind(tmpMarker, "click", tmpMarker, function() {
			    		this.openInfoWindowHtml(this.htmlInfo);
			    	}
				);

				 map.addOverlay(tmpMarker);

				 var title = '';
		 		 var html = '';

		    }

		    prevlat = parseFloat(markers[i].getAttribute("lat"));
		    prevlng = parseFloat(markers[i].getAttribute("lng"));

			if (title>'') {
				title += ", " + markers[i].getAttribute("title");
			} else {
				title = markers[i].getAttribute("title");
			}

		    if (html>'') {
				html += GXml.value(markers[i]);
			} else {
				html = GXml.value(markers[i]);
			}

		  }

		  if (prevlat!= -99999.00) {

		  	var point = new GLatLng(prevlat,prevlng);

	    	bounds.extend(point);

	    	var tmpMarker = new GMarker(point,{
		    	title: title
		    });

		    tmpMarker.htmlInfo = html;
			GEvent.bind(tmpMarker, "click", tmpMarker, function() {
		    		this.openInfoWindowHtml(this.htmlInfo);
		    	}
			);

			 map.addOverlay(tmpMarker);

	      }

		  var zoom = map.getBoundsZoomLevel(bounds);
		  
		  if (zoom > 10) 
			  zoom = 10;
		  
		  map.setCenter(bounds.getCenter(), zoom);

		});

		return false;

	}

}

function loadMarkersByXMLWithMaxZoom (xmlUrl,strid, maxZoom) {

	if (GBrowserIsCompatible()) {

		map.clearOverlays(); // bestaande puntjes wissen

//        map = new GMap2(document.getElementById(strid));

		var bounds = new GLatLngBounds;

        map.enableDoubleClickZoom();
        map.enableContinuousZoom();

//        map.setCenter(new GLatLng(0, 0), 2);

        // nivigatie
//        map.addControl(new GLargeMapControl());

        // switch satteliet / straatmap
//		map.addControl(new GMapTypeControl());

		GDownloadUrl(xmlUrl, function(data, responseCode) {
		  var xml = GXml.parse(data);
		  var markers = xml.documentElement.getElementsByTagName("marker");

		  var prevlat = -99999.00;
		  var prevlng = -99999.00;

		  var title = '';
		  var html = '';

		  var point = false;

		  for (var i = 0; i < markers.length; i++) {

		    if (prevlat!= -99999.00 && (prevlat != parseFloat(markers[i].getAttribute("lat")) || prevlng != parseFloat(markers[i].getAttribute("lng")))) {

		    	var point = new GLatLng(prevlat,prevlng);

		    	bounds.extend(point);

		    	var tmpMarker = new GMarker(point,{
			    	title: title
			    });

			    tmpMarker.htmlInfo = html;
				GEvent.bind(tmpMarker, "click", tmpMarker, function() {
			    		this.openInfoWindowHtml(this.htmlInfo);
			    	}
				);

				 map.addOverlay(tmpMarker);

				 var title = '';
		 		 var html = '';

		    }

		    prevlat = parseFloat(markers[i].getAttribute("lat"));
		    prevlng = parseFloat(markers[i].getAttribute("lng"));

			if (title>'') {
				title += ", " + markers[i].getAttribute("title");
			} else {
				title = markers[i].getAttribute("title");
			}

		    if (html>'') {
				html += GXml.value(markers[i]);
			} else {
				html = GXml.value(markers[i]);
			}

		  }

		  if (prevlat!= -99999.00) {

		  	var point = new GLatLng(prevlat,prevlng);

	    	bounds.extend(point);

	    	var tmpMarker = new GMarker(point,{
		    	title: title
		    });

		    tmpMarker.htmlInfo = html;
			GEvent.bind(tmpMarker, "click", tmpMarker, function() {
		    		this.openInfoWindowHtml(this.htmlInfo);
		    	}
			);

			 map.addOverlay(tmpMarker);

	      }

		  var zoom = map.getBoundsZoomLevel(bounds);
		  
//		  zoom = zoom - 1;
		 
		  if (zoom > maxZoom) 
			  zoom = maxZoom;
		  
		  map.setCenter(bounds.getCenter(), zoom);

		});

		return false;

	}

}

function initTinyMap(mapid,lat,lng,draggable, fld1,fld2,fld3) {
	if (GBrowserIsCompatible()) {

        var point = new GLatLng(parseFloat(lat),
	                            parseFloat(lng));


        tinymap = new GMap2(document.getElementById(mapid));
        tinymap.setCenter(point, 10, G_HYBRID_MAP);
        tinymap.addControl(new GOverviewMapControl());

        tinymap.enableDoubleClickZoom();
        tinymap.enableContinuousZoom();

        // nivigatie
        tinymap.addControl(new GLargeMapControl());

        // switch satteliet / straatmap
		tinymap.addControl(new GMapTypeControl());

		if (draggable) {

			var tmpMarker = new GMarker(point,{
				    	draggable: true,
				    	title: 'locatie op kaart'
				    });

			GEvent.addListener(tmpMarker, "dragstart", function() {tinymap.closeInfoWindow();});
			GEvent.addListener(tmpMarker, "dragend", function() {
             point = tmpMarker.getPoint();
             $(fld1).value = '200';
             $(fld2).value = point.y;
             $(fld3).value = point.x;
               });

		} else {

			 var tmpMarker = new GMarker(point,{
				    	title: 'locatie op kaart'
				    });

		}

		tinymap.addOverlay(tmpMarker);

	}
}

function doGeoCode(mapid,address, fld1,fld2,fld3) {

	var geocoder = new GClientGeocoder();

	var match = /^http.*ll\=([^&]+)&/i.exec(address);
	if(match) {
		address = match[1];
	}

	if (geocoder) {
        geocoder.getLatLng(
          address,
          function(point) {
            if (!point) {
              alert(address + " niet gevonden");
            } else {

			  tinymap.setCenter(point, 16);
				tinymap.clearOverlays();

				initTinyMap(mapid,point.lat(),point.lng(),true, fld1,fld2,fld3);


				$(fld1).value = '200';
				$(fld2).value = point.lat();
                $(fld3).value = point.lng();


            }
          }
        );
      }

}

//Event.observe(window,'unload',GUnload);
window.onunload = GUnload;


