



var oGoogleMap 	= null;
var googleMap = Class.create(
{
	initialize: function( mapElement, jsonLocationURL, detailBaseURL )
	{
		/* Element waarin we de kaart laden */
		this.mapElement = mapElement;
		/* URL waar de het resultaat kunnen ophalen in JSON formaat */

		this.jsonLocationURL = jsonLocationURL;
		/* URL waar we naar toe linken bij een click in de map (excl de ID, die wordt eraan geplakt) */
		this.detailBaseURL = detailBaseURL;
		
		//Google initieren
		//alert(mapElement.id);
		//alert(this.jsonLocationURL);
		switch(mapElement.id)
		{ 
			case 'wijkinbeeld':
			  google.load("maps", "2", {"language" : "nl", "callback" : this.requestWijkinfoInJson});			
			  break;
			case 'projecten_map':
			  google.load("maps", "2", {"language" : "nl", "callback" : this.requestProjectenInJson});			
			  break;
			case 'object_aanbod_map':
			 google.load("maps", "2", {"language" : "nl", "callback" : this.requestObjectAanbodJson});
			  break;	
			default:
			  google.load("maps", "2", {"language" : "nl", "callback" : this.requestJson});
			  break;
		} 
	},
	requestObjectAanbodJson: function()
	{	
		if (GBrowserIsCompatible()) 
		{
			if(oGoogleMap.jsonLocationURL != null)
			{
				//Ajax request naar de JSON output handler url
				new Ajax.Request(oGoogleMap.jsonLocationURL, 
				{ 
					method:'get',
	  				onSuccess: function(transport)
	  				{
	      				oGoogleMap.showResultObjectAanbodInMap( transport.responseXML.documentElement);
	    			}
	  			});
	  		}
		}
		else
    	{
    		alert('Uw browser ondersteunt googlemaps niet.');
	    } 
	},	
	test: function(sType)
	{
		var oldUrl = oGoogleMap.jsonLocationURL;
		oGoogleMap.jsonLocationURL = oGoogleMap.jsonLocationURL + '/' + sType
		this.map.clearOverlays();
		this.requestProjectenInJson();
		oGoogleMap.jsonLocationURL = oldUrl;
		
		
	},
	
	requestJson: function()
	{
		if (GBrowserIsCompatible()) 
		{
			if(oGoogleMap.jsonLocationURL != null)
			{
				//Ajax request naar de JSON output handler url
				new Ajax.Request(oGoogleMap.jsonLocationURL, 
				{ 
					method:'get',
	  				onSuccess: function(transport)
	  				{
	      				oGoogleMap.showResultInMap(transport.responseXML.documentElement);
	    			}
	  			});
	  		}
		}
		else
    	{
    		alert('Uw browser ondersteunt googlemaps niet.');
	    } 
	},	
	requestProjectenInJson: function()
	{
		if (GBrowserIsCompatible()) 
		{
			if(oGoogleMap.jsonLocationURL != null)
			{
				//Ajax request naar de JSON output handler url
				new Ajax.Request(oGoogleMap.jsonLocationURL, 
				{ 
					method:'get',
	  				onSuccess: function(transport, json)
	  				{
	      				oGoogleMap.showResultProjectenInMap(json.searchresult);
	    			}
	  			});
	  		}
		}
		else
    	{
    		alert('Uw browser ondersteunt googlemaps niet.');
	    } 
	},
	requestWijkinfoInJson :  function()
	{
		if (GBrowserIsCompatible()) 
		{
	      	oGoogleMap.showResultWijkInfoInMap();
		}
		else
    	{
    		alert('Uw browser ondersteunt googlemaps niet.');
	    } 			
	},
	showResultWijkInfoInMap: function()
	{
		this.map = new google.maps.Map2(this.mapElement, {mapTypes:[G_NORMAL_MAP,G_HYBRID_MAP]});		
    	this.map.addControl(new GSmallZoomControl(),new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(10,36)));
    	this.map.addControl(new GMapTypeControl(),new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(10,10)));  
    	
    	
    	this.map.disableDragging();
		this.bounds = new GLatLngBounds();
		
		var oElm = this;
		
		// Het centrum van de kaart mag apeldoorn zijn...
		var point = new GLatLng(52.208314,5.969622);
    	this.map.setCenter(point, 12);
    	
    	getStadsdeelPoints(this.bounds, this.map);	
	},
	showResultInMap: function(woningen)
	{
		this.map = new google.maps.Map2(this.mapElement, {mapTypes:[G_NORMAL_MAP,G_HYBRID_MAP]});
		
    	this.map.addControl(new GSmallZoomControl(),new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(10,36)));
    	this.map.addControl(new GMapTypeControl(),new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(10,10))); 	
		this.bounds = new GLatLngBounds();
		
		var oElm = this;
		
		// Het centrum van de kaart mag apeldoorn zijn...
		var point = new GLatLng(52.208314,5.969622);
    	oElm.map.setCenter(point, 12);
    	
		var items = woningen.getElementsByTagName('straatnaam');

		for (i = 0; i < items.length; i ++)
		{
			var item = items[i].parentNode;

			var latitude = item.getElementsByTagName('latitude')[0].childNodes[0].data;
			var longitude = item.getElementsByTagName('longitude')[0].childNodes[0].data;

			if(latitude && longitude)
			{
				var woning_ID = item.getElementsByTagName('ID')[0].childNodes[0].data;

				if(item.getElementsByTagName('thumbnail')[0].childNodes[0])
					var woning_thumbnail = item.getElementsByTagName('thumbnail')[0].childNodes[0].data;
				else
					var woning_thumbnail = '';	

				var woning_straatnaam = item.getElementsByTagName('straatnaam')[0].childNodes[0].data;
				var woning_buurt = item.getElementsByTagName('buurt')[0].childNodes[0].data;
				
				//Type woning
				if(item.getElementsByTagName('typewoning')[0].childNodes[0])
					var woning_typewoning = item.getElementsByTagName('typewoning')[0].childNodes[0].data;
				else
					var woning_typewoning = '';
				
				//Kamers
				if(item.getElementsByTagName('aantalkamers')[0].childNodes[0])
					var woning_aantalkamers = item.getElementsByTagName('aantalkamers')[0].childNodes[0].data;
				else
					var woning_aantalkamers = '';	
				
				//Huurprijs
				if(item.getElementsByTagName('huurprijs')[0].childNodes[0])
					var woning_huurprijs = item.getElementsByTagName('huurprijs')[0].childNodes[0].data;
				else
					var woning_huurprijs = '';	

				var point = new GLatLng(parseFloat(latitude), parseFloat(longitude));

				var marker =  new GMarker(point);
   		
				var melding = '<table><tr><td>';
	
				if(woning_thumbnail)
					melding += "<a onClick=\"changeHash('"+oGoogleMap.detailBaseURL+woning_ID+"'); return false;\"><img src='"+woning_thumbnail+"/75/40' BORDER=\"0\" /></a>";

				
				
				melding += "</td><td>&nbsp;</td>";
				melding += "<td><a onClick=\"changeHash('"+oGoogleMap.detailBaseURL+woning_ID+"'); return false;\">"+woning_straatnaam+", "+woning_buurt+"</a>";
				if(woning_typewoning)
				{
					melding +=  "<br />"+woning_typewoning;
				}
				
				if(woning_aantalkamers)
				{
					melding +=  "<br />Gem. Aantal slaapkamers: "+woning_aantalkamers;
				}	
				if(woning_huurprijs)
				{
					melding +=  "<br />Gem. Huurprijs: &euro; "+woning_huurprijs+",-";
				}						
				melding += " </td></tr></table>";
					
				marker.popupHTML = melding;    		
	
				oElm.map.addOverlay(marker);	
				oElm.bounds.extend(point);		
	
				GEvent.addListener(marker, "mouseover", function( ) 
				{
					this.openInfoWindowHtml(this.popupHTML);
				});
				GEvent.addListener(marker, "click", function( ) 
				{
					changeHash(oGoogleMap.detailBaseURL+woning.ID);
				});	
			}
		}  	
	},
	showResultObjectAanbodInMap: function(woningen)
	{
		this.map = new google.maps.Map2(this.mapElement, {mapTypes:[G_NORMAL_MAP,G_HYBRID_MAP]});
		
    	this.map.addControl(new GSmallZoomControl(),new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(10,36)));
    	this.map.addControl(new GMapTypeControl(),new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(10,10))); 	
		this.bounds = new GLatLngBounds();
		
		var oElm = this;
		
		// Het centrum van de kaart mag apeldoorn zijn...
		var point = new GLatLng(52.208314,5.969622);
    	oElm.map.setCenter(point, 12);
    	
    	
    	var items = woningen.getElementsByTagName('straatnaam');

		for (i = 0; i < items.length; i ++)
		{
			var item = items[i].parentNode;

			var latitude = item.getElementsByTagName('latitude')[0].childNodes[0].data;
			var longitude = item.getElementsByTagName('longitude')[0].childNodes[0].data;

			if(latitude && longitude)
			{
				var woning_id = item.getElementsByTagName('ID')[0].childNodes[0].data;
				var woning_straatnaam = item.getElementsByTagName('straatnaam')[0].childNodes[0].data;
				var woning_huisnummer = item.getElementsByTagName('huisnummer')[0].childNodes[0].data;
				var woning_postcode = item.getElementsByTagName('postcode')[0].childNodes[0].data;
				var woning_Plaatsnaam = item.getElementsByTagName('Plaatsnaam')[0].childNodes[0].data;
				
				
				//Afbeelding
				if(item.getElementsByTagName('afbeelding1')[0].childNodes[0])
					var woning_afbeelding1 = item.getElementsByTagName('afbeelding1')[0].childNodes[0].data;
				else
					var woning_afbeelding1 = '';	
				
				// Woningsoort
				if(item.getElementsByTagName('soort')[0].childNodes[0])
					var woning_soort = item.getElementsByTagName('soort')[0].childNodes[0].data;
				else
					var woning_soort = '';
				
				
				var point = new GLatLng(parseFloat(latitude), parseFloat(longitude));

				var marker =  new GMarker(point);
   		
				var melding = '<table><tr><td>';
	
				if(woning_afbeelding1)
					melding += "<a onClick=\"changeHash('"+oGoogleMap.detailBaseURL+woning_id+"'); return false;\"><img src='uploads/"+woning_afbeelding1+"/75/40' BORDER=\"0\" /></a>";

				melding += "</td><td>&nbsp;</td>";
				melding += "<td><a onClick=\"changeHash('"+oGoogleMap.detailBaseURL+woning_id+"'); return false;\">"+woning_straatnaam+" " + woning_huisnummer + "</a>";
				
				melding +=  "<br />"+woning_postcode + "  " + woning_Plaatsnaam;
				
				if(woning_soort)
				{
					melding +=  "<br />Soort: "+woning_soort;
				}	
				
				melding += " </td></tr></table>";
				
				
				marker.popupHTML = melding;    			
				
				oElm.map.addOverlay(marker);	
				oElm.bounds.extend(point);		
	
				GEvent.addListener(marker, "mouseover", function( ) 
				{
					this.openInfoWindowHtml(this.popupHTML);
				});
				GEvent.addListener(marker, "click", function( ) 
				{
					changeHash(oGoogleMap.detailBaseURL+woning_ID);
				});		
			}
		}
	},
	showResultProjectenInMap: function(projects)
	{
		this.map = new google.maps.Map2(this.mapElement, {mapTypes:[G_NORMAL_MAP,G_SATELLITE_MAP]});
		
    	this.map.addControl(new GSmallZoomControl(),new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(10,36)));
    	this.map.addControl(new GMapTypeControl(),new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(10,10))); 
   	
		this.bounds = new GLatLngBounds();

		var oElm = this;
		// Het centrum van de kaart mag apeldoorn zijn...
		var point = new GLatLng(52.208314,5.969622);
    	oElm.map.setCenter(point, 12);
		
		projects.each(function(project)
    	{
    		var point = new GLatLng(parseFloat(project.latitude), parseFloat(project.longitude));
    		//oElm.map.setCenter(point, 13);
  			var icon = new GIcon();
			icon.image = "/images/navigatie/schep.png";

			if(project.DGW_ProjectCategoryID == 5)
			{
				icon.image = "/images/navigatie/schep2.png";
			}
		
			icon.iconSize = new GSize(22, 36);
			icon.iconAnchor = new GPoint(0, 20);
			icon.infoWindowAnchor = new GPoint(0, 0);
    		
    		var marker =  new GMarker(point,icon);
    		marker.icon = icon;
			marker.popupHTML = "<table><tr><td><a onClick=\"changeHash('"+oGoogleMap.detailBaseURL+project.ID+"'); return false;\"><img src='/uploads/"+project.thumbnail+".160x100.jpg' WIDTH=\"100\" BORDER=\"0\" /></a></td><td>&nbsp;</td><td><a onClick=\"changeHash('"+oGoogleMap.detailBaseURL+project.ID+"'); return false;\">"+project.title+"</a><br />"+project.projectCategoryTitle+"<br /><br /><br /></td></tr></table>";
			
			oElm.map.addOverlay(marker);	
			oElm.bounds.extend(point);	

			GEvent.addListener(marker, "mouseover", function( ) 
			{
				this.openInfoWindowHtml(this.popupHTML);
			});

			GEvent.addListener(marker, "click", function( ) 
			{
				changeHash(oGoogleMap.detailBaseURL+project.ID);
			});				
    	}); 
    	//var zoomLevel = this.map.getBoundsZoomLevel(this.bounds);
    	//this.map.setZoom(13);
    	//this.map.panTo(this.bounds.getCenter());
    	//this.map.setCenter(this.bounds.getCenter());
    	//bestFitWithMargin(this.map, this.bounds, 0.01);
    	
	}
});









