var map;
var addrs_sch = new Array();
var addrs_res = new Array();
var bubble;
var clic_opt = {action:'bubble'};
var bounds = {};

function initialize(map_id,addrs) {
	var myLatlng = new google.maps.LatLng(46.1700, 285.415370);
	var zoom = 9;
	var mapTypeControl = true;
	var streetViewControl = true;
	bounds = new google.maps.LatLngBounds();
	switch( map_id ) {
		case 'profile_map_canvas':
			if( parseFloat(addrs[0].lat) ) {
				var lat = parseFloat(addrs[0].lat);
				var lng = parseFloat(addrs[0].lng);
				var myLatlng = new google.maps.LatLng(lat,lng);
				var zoom = 10;
				var mapTypeControl = false;
				var streetViewControl = false;
			}
			clic_opt = { action: 'location', url: '/'+WS_LANG+'/item/{id}/?show_map=big' };
			break;
		case 'profile_big_map_canvas':
			if( parseFloat(addrs[0].lat) ) {
				var lat = parseFloat(addrs[0].lat);
				var lng = parseFloat(addrs[0].lng);
				var myLatlng = new google.maps.LatLng(lat,lng);
				var zoom = 10;
			}
			break;
		case 'map_canvas':
			mapTypeControl = false;
			streetViewControl = false;
			break;
	}
	var myOptions = {
	  zoom: zoom,
	  center: myLatlng,
	  mapTypeId: google.maps.MapTypeId.ROADMAP,
	  scrollwheel: false,
	  mapTypeControl: mapTypeControl,
	  streetViewControl: streetViewControl
	}
	map = new google.maps.Map(document.getElementById(map_id), myOptions);
	// load points
	for( var e in addrs ) {
		var v = addrs[e];
		var lat = parseFloat(v.lat);
		var lng = parseFloat(v.lng);
		if( lat && lng ) {
			//console.log([lat,lng]);
			v.lat = lat;
			v.lng = lng;
			add_marker(v);
			bounds.extend(new google.maps.LatLng(lat,lng));
		} else if( addrs_sch.length <= 10 ) {
			//console.log(e);
			//console.log(v);
			addrs_sch.push(v);
		}
	}
	//console.log(addrs_sch);
	
	// translate addr in geo point
	if( addrs_sch.length > 0 ) {
		for( e in addrs_sch ) {
			geocode( addrs_sch[e] );
		}
	}
	
	if( addrs.length > 1 ) {
		map.fitBounds(bounds);
	}
}

function add_marker(v) {
	var latlng = new google.maps.LatLng( v.lat, v.lng);
	var marker = new google.maps.Marker({
		map: map, 
		position: latlng,
		wsid: v.id
	});
	google.maps.event.addListener(marker, 'click', function() {
		if( clic_opt.action == 'bubble' ) {
			show_bubble( marker , v );
		} else {
			window.location.href = clic_opt.url.replace('{id}',v.id);
		}
	});
}

function geocode(v) {
	//console.log(v);
	var geocoder = new google.maps.Geocoder();	
	geocoder.geocode( { 'address': v.addr}, function(results, status) {
		var result = {id:v.id, lat:'', lng:'' };
		if (status == google.maps.GeocoderStatus.OK) {
			result.lat = results[0].geometry.location.lat();
			result.lng = results[0].geometry.location.lng();			
			v.lat = result.lat;
			v.lng = result.lng;
			add_marker(v);
		} else {
		  try { console.log("Geocode was not successful for the following reason: " + status); } catch(err) {}
		}
		addrs_res.push( result );
		if( addrs_sch.length == addrs_res.length ) {
			save_geocode();
		}
	});
}

function save_geocode(){
	var datastr = '';
	for( var e in addrs_res ) {
		datastr += datastr ? ',' : '';
		datastr += addrs_res[e].id+'+'+addrs_res[e].lat+'+'+addrs_res[e].lng;
	}
	$.post('/map_save.php',{data:datastr});
}

function show_bubble( marker , v ){
	var html = '<table><tr>';
	if( v.photo ) {
		html += '<td><a href="/'+WS_LANG+'/item/'+v.id+'/"><img src="'+v.photo+'" width="80" border="1" /></a></td>';
	}
	html += '<td width="155" height="80">';
	html += txt('price_asked')+': <b>'+v.price+'</b><br/>';
	html += ''+v.address+'<br/>';
	html += '<a href="/'+WS_LANG+'/item/'+v.id+'/">Voir la propiété &gt;&gt;</a>';
	html += '<br/></td>';
	html += '</tr></table>';
	
	if( bubble ) {
		bubble.close();
		bubble.setContent(html);
	} else {
		bubble = new google.maps.InfoWindow({content: html});		
	}
	bubble.open(map,marker);
}


