var map = null;

var defaultZoom    = 17;

var pinPoint = null;
var pinPixel = null;
var loadMapFirstTime = true;

/**
 * Creates a map with a pushpin on the given location.
 * 
 * @param float _lat - The latitude coödinate of the location.
 * @param float _long - The longtitude coödinate of the location.
 * @return void.
 */
function GetMap(_lat, _long){
	lat = parseFloat(_lat);
	long = parseFloat(_long);
	map = new VEMap('myMap');
	var positie = new VELatLong(lat, long);
	map.LoadMap(positie, defaultZoom,VEMapStyle.Hybrid, false, VEMapMode.Mode2D, false, 0);
	map.SetMapStyle(VEMapStyle.Hybrid);
	map.SetBirdseyeScene(positie, VEOrientation.East, defaultZoom);
	
	AddPin(_lat, _long);			
}

/**
 * Create a map with multiple points.
 * @param array points - An array with all the points.
 * @param float avglat - The average latitude of the points.
 * @param float avglong - The average longitude of the points.
 * @param int zoom - The zoom level of the map.
 * @return void.
 */
function MapMultiplePoint(points, avglat, avglong,zoom){
	map = new VEMap('map-result');        
	avglat = parseFloat(avglat);
	avglong = parseFloat(avglong);
	position = new VELatLong(avglat,avglong);
	map.LoadMap(position, zoom, 'h', false);
	map.SetScaleBarDistanceUnit(VEDistanceUnit.Kilometers);
	
	for(i = 0; i < points.length; i++){
		var pushPin = points[i].latlong;
		var shape = new VEShape(VEShapeType.Pushpin, pushPin);

		var html  = '<div class="map-popup">';
		if(points[i].foto)
   		html += '<img align="right" src="./photos/rooms/thumbs/thumb_'+points[i].foto+'" alt"" />';
     	html += '<h3>'+points[i].straat+'</h3><h4>'+points[i].plaats+'</h4>';
     	html += '<ul><li><strong>oppervlakte: </strong> '+points[i].oppervlakte+'m<sup>2</sup></li><li><strong>prijs: </strong>&euro; '+points[i].huurprijs+'</li></ul>';
     	html += '<p><a href="'+points[i].link+'">Bekijk de kamer</a></p></div>';

		shape.SetDescription(html);
		map.AddShape(shape);		
	}
	map.SetMapStyle(VEMapStyle.Hybrid);
}

/**
 * Places a pushpin on specified location.
 * @param float lat - The latitude coödinate of the location.
 * @param long - The longtitude coödinate of the location.
 * @return void.
 */
function AddPin(lat, long){
	// Add a new pushpin to the center of the map.
	pinPoint = new VELatLong(lat,long)	;
	pinPixel = map.LatLongToPixel(pinPoint);
	map.AddPushpin(pinPoint);
}

/**
 * Calculate the avarage lat and long in an array of points.
 * @param points - the array with lat and long coordinates.
 * @return.
 */
function avgLatLong(points){
	var lat, long, counter;
	lat=long=counter=0;

	for(var i=1;i<points.length;i++){
		if(points[i]['lat']>0 && points[i]['lat']!=null && points[i]['lat']!='' && points[i]['long']>0 && points[i]['long']!=null && points[i]['long']!=''){
			lat+=points[i]['lat'];
			long += points[i]['long'];
			counter++;
		}
	}
	var avgLat =lat/counter;
	var avgLong=long/counter;
	var avg = new Array();
	avg['avglat']=avgLat;
	avg['avgLong']=avgLong;
	return avg;
}