GoogleMap = Class.create();

GoogleMap.prototype = {
	
	initialize: function () {
		Event.observe(window,"unload",function () { GUnload(); });
	},
	
	init: function (mapContainer,ggeoXml,mapDatasXml,onXmlParsed) {
		if (GBrowserIsCompatible()) {
			this.mapContainer = $(mapContainer);
			this.myGMap2 = new GMap2(this.mapContainer);
			//this.show(false);
			this.onXmlParsed = onXmlParsed || null;
			this.ggeoXml = new GGeoXml(ggeoXml);
			var myGMap2 = this.myGMap2;
			GEvent.addListener(this.ggeoXml, "load", function (){ 
				/*for (var i in this) {
					alert(i+' // '+this[i]);
				}
				if (this.loadedCorrectly()) {
					this.gotoDefaultViewport(myGMap2);
				  }*/
			});			
			this.myGMap2.addOverlay(this.ggeoXml);
			GDownloadUrl(mapDatasXml,this.parseXml.bind(this));
			this.myGMap2.setCenter(new GLatLng(0,0),1);
		}
	},
	
	show: function (showing) {
		this.mapContainer.style.visibility = (showing) ?"visible" :"hidden";
	},
	
	parseXml: function (data,responseCode) {
		if (responseCode == 200) {
			this.ggeoXmlDatas = GXml.parse(data);
			this.ggeoXmlPlaceMarks = this.ggeoXmlDatas.documentElement.getElementsByTagName("Placemark");
			this.placeMarks = [];
			for (var i=0;i<this.ggeoXmlPlaceMarks.length;i++) {
				this.placeMarks[this.placeMarks.length] = {
					name:GXml.value(this.ggeoXmlPlaceMarks[i].getElementsByTagName("name")[0]),
					coords:GXml.value(this.ggeoXmlPlaceMarks[i].getElementsByTagName("coordinates")[0]).split(",")
				};
				/*var marker = new GMarker(this.ggeoXmlPlaceMarks[i].getElementsByTagName("coordinates")[0]);
				this.myGMap2.addOverlay(marker);*/
			}
			if (this.onXmlParsed!=null) { this.onXmlParsed(); }
		} 
  		else if (responseCode == -1) { alert("Data request timed out. Please try later."); } 
 		else { alert("Request resulted in error. Check XML file is retrievable."); }
	},
	
	enableScrollWheelZoom: function () {
		this.myGMap2.enableScrollWheelZoom();
	},
	
	addSmallMapControl: function () {
		this.myGMap2.addControl(new GSmallMapControl());
	},
	
	gotoCoords: function (lt,lg,zoom) {
		this.myGMap2.setCenter(new GLatLng(lt,lg),zoom);
		this.show(true);
	},
	
	gotoToNameLabel: function (label,zoom) {
		var finding = false;
		for (var i=0;i<this.placeMarks.length&&!finding;i++) {
			if (this.placeMarks[i].name==label) {
				this.gotoCoords(this.placeMarks[i].coords[1],this.placeMarks[i].coords[0],zoom);
				finding = true;
			}
		}
	}

}