/**
 * jQuery placemap map plugin file.
 */

;(function($) {
	$.placemap = {
		infoUrl: '',
		map: null,
		places: [],
		markers: [],
		lat: '45.397775',
		lng: '-72.420853',
		element: null,
		refresh: function() {
			if($.placemap.map==null)
				$.placemap.create();
		},
		create: function() {
			var map = new google.maps.Map2($.placemap.element);
			$.placemap.map = map;
			map.addControl(new GLargeMapControl3D);
			map.addControl(new GMapTypeControl);
			$.placemap.showPlaces();
		},

		createMarker: function(place) {
			var iconOptions = {};
			iconOptions.primaryColor = "#66FF66";
			iconOptions.strokeColor = "#000000";
			iconOptions.label = place.label;
			iconOptions.labelColor = "#000000";
			iconOptions.addStar = false;
			iconOptions.starPrimaryColor = "#FFFF00";
			iconOptions.starStrokeColor = "#0000FF";
			var icon = MapIconMaker.createLabeledMarkerIcon(iconOptions);
			var marker = new GMarker(new GLatLng(place.lat, place.lng), {'icon': icon});
			$.placemap.markers.push(marker);

			GEvent.addListener(marker, 'click',	function() {
				$.placemap.showInfoWindow(place, marker);
			});

			$.placemap.map.addOverlay(marker);
			return marker;
		},

		showPlaces: function() {
			if($.placemap.map==null)
				return;
			$.placemap.map.clearOverlays();
			$.placemap.markers=[];
			var i;
			if($.placemap.places.length>0) {
				var minLat=parseFloat($.placemap.lat);
				var maxLat=parseFloat($.placemap.lng);
				var minLng=parseFloat($.placemap.lat);
				var maxLng=parseFloat($.placemap.lng);
				for(i=0;i<$.placemap.places.length;++i) {
					var lat=parseFloat($.placemap.places[i].lat);
					var lng=parseFloat($.placemap.places[i].lng);
					if(lat<minLat) minLat=lat;
					if(lat>maxLat) maxLat=lat;
					if(lng<minLng) minLng=lng;
					if(lng>maxLng) maxLng=lng;
				}

				var bounds = new GLatLngBounds(
					new GLatLng(minLat, minLng),
					new GLatLng(maxLat, maxLng)
				);
				$.placemap.map.setCenter(bounds.getCenter(), $.placemap.map.getBoundsZoomLevel(bounds));
			}
			else {
				$.placemap.map.setCenter(new GLatLng(parseFloat($.placemap.lat), parseFloat($.placemap.lng)), 9);
			}

			for(i=0;i<$.placemap.places.length;++i) {
				$.placemap.createMarker($.placemap.places[i]);
			}

			if($.placemap.markCenter) {
				var marker = new GMarker(new GLatLng(parseFloat($.placemap.lat), parseFloat($.placemap.lng)),{zIndexProcess:function(){return 10;}});
				$.placemap.map.addOverlay(marker);
			}
		},

		showPlace: function(id) {
			var i;
			for(i=0;i<$.placemap.places.length;++i) {
				var place=$.placemap.places[i];
				var marker=$.placemap.markers[i];
				if($.placemap.places[i].label==id) {
					$.placemap.showInfoWindow(place, marker);
					break;
				}
			}
		},

		showInfoWindow: function(place, marker) {
			$.ajax({
				'url':$.placemap.infoUrl,
				'data':{cat:place.cat, id:place.id},
				'dataType':'text',
				'success':function(data,status) {
					// build DOM tree first so that we can use superbox
					var dom=$(data);
					var a=$('#tool-detail',dom);
					marker.openInfoWindowTabsHtml([
						new GInfoWindowTab('Info', $('.map-place',dom)[0]),
						new GInfoWindowTab(tce.lang=='en' ? 'Directions' : 'Itinéraire', $('.map-directions',dom)[0])
					]);
					if(a.length) {
						// this is a hack of superbox
						a[0]._relSettings=a.attr('rel');
						a.superbox('ajax',{boxId: 'superbox', boxClasses: ' php'});
					}
				}
			});
		}
	};

	$.extend($.fn, {
		placemap: function(settings) {
			settings = $.extend({
					lat: '45.397775',
					lng: '-72.420853',
					markCenter: true,
					places: []
				},
				settings || {}
			);
			$.placemap.lat=settings.lat;
			$.placemap.lng=settings.lng;
			$.placemap.places=settings.places;
			$.placemap.markCenter=settings.markCenter;
			$.placemap.element=$(this)[0];
		}
	});

})(jQuery);

