(function($) {
    $.fn.jQGmap = function(options) {
    	
    		var MarkerArray = Array();
    	
			var defaults = {
				OT_id: "",
				MAPwidth: "230px",
				MAPheight: "450px",
				CenterLAT: "45.5537481",
				CenterLNG: "5.7438056",
				P_id: "",
				OBT_identifiant: "",
				zoomBar: "small",
				targetFiche:"_self",
				dDebut:"",
				dFin:""
			};
					
			var opts = $.extend(defaults, options);
			$(this).width(opts.MAPwidth);
			$(this).height(opts.MAPheight);
			
			var m = $(this)[0];
			var start = new google.maps.LatLng(opts.CenterLAT,opts.CenterLNG);
			var zoomLevel = 11;
			
			if(opts.zoomBar=='small')
			{
				var MyToolBar = 'SMALL';
			}
			else
			{
				var MyToolBar = 'ZOOM_PAN';
			}
			
			var baseOptions = { 
				zoom: zoomLevel, 
				center: start, 
				navigationControl: true, 
				navigationControlOptions: {style: google.maps.NavigationControlStyle.MyToolBar},
				mapTypeId: google.maps.MapTypeId.ROADMAP 
			}; 

			var map = new google.maps.Map(m, baseOptions);
			var myPoly="";

			$.ajax({
				type: "GET",
				dataType: "xml",
				cache: "false",
				url: "/ajax.req.php?id=TraceGPS",
				data: {"OT_id": opts.OT_id},
				success: function(dataReturn) {
					
					var Trace = Array();
					var Lng = "";
					var Lat = "";
					var bounds = new google.maps.LatLngBounds();
					var PolyPoints = "";
					
					$(dataReturn).find('coords').each(function(){
						Lng = $(this).find('Lng').text();
						Lat = $(this).find('Lat').text();
						PolyPoints = new google.maps.LatLng(Lat,Lng);
						Trace.push(PolyPoints);	
						bounds.extend(PolyPoints);
					});

					myPoly = new google.maps.Polygon({
						strokeWeight: 2,
						strokeColor:'#e28a00',
						fillColor:'#6BAB06',
						fillOpacity: 0.2
					});
					
					myPoly.setMap(map);
					myPoly.setPaths(Trace);
					
					// Zoom Opti pour les petites cartes pour chaque OT
					if(opts.MAPwidth == '230px')
					{
						// Zoom Optimaux par OT			
						if(opts.OT_id==1) var OptiZoom = 11;
						if(opts.OT_id==2) var OptiZoom = 11;
						if(opts.OT_id==3) var OptiZoom = 11;
						if(opts.OT_id==4) var OptiZoom = 10;
						if(opts.OT_id==5) var OptiZoom = 11;
						if(opts.OT_id==6) var OptiZoom = 11;
						if(opts.OT_id==7) var OptiZoom = 9;					
						
						/*
						google.maps.event.addListener(map, 'zoom_changed', function() {
						    zoomChangeBoundsListener =  
						        google.maps.event.addListener(map, 'bounds_changed', function(event) { 
						            if (this.getZoom() < OptiZoom && this.initialZoom == true) { 
						                // Change max/min zoom here 
						                this.setZoom(OptiZoom); 
						                this.initialZoom = false; 
						            } 
						        google.maps.event.removeListener(zoomChangeBoundsListener); 
						    }); 
						});
						*/
						
						map.initialZoom = true;
					}
					map.fitBounds(bounds);
				}
			});
			
			
			// Markers sur liste d'objets ou fiche détaillée
			if(opts.P_id!='') CreateClouds(MarkerArray, map, opts.OT_id, opts.P_id, opts.OBT_identifiant,'',opts.targetFiche,opts.dDebut,opts.dFin);
			
			// Markers sue fiche Obt
			if(opts.OBT_identifiant!='') CreateClouds(MarkerArray, map, '', '', opts.OBT_identifiant,'',opts.targetFiche);
			
			// Markers sur click carte interactive
			$(".Gmap").click(function() {
				var pChecked = Array();
				
				$("input.Gmap:checked").each(function() {
					pChecked.push($(this).attr('id'));
				});
				
				CreateClouds(MarkerArray, map, opts.OT_id, '', '', pChecked,opts.targetFiche);	
			});	
			
			$(".Reset").click(function() {
				$("input.Gmap:checked").each(function() {
					$(this).removeAttr('checked');
				});
				clearMarkers(MarkerArray);
			});				
		return map;
	};	
})(jQuery);

function clearMarkers(markerTab) {
  if (markerTab) {
    for (i in markerTab) {
      markerTab[i].setMap(null);
    }
  }
}

function array_search(tab,val) {
	for (var i = 0; i < tab.length; i++) {
		if (tab[i] == val) {
			return true;
		}
	}
	return false;
}

function CreateClouds(MarkerArray, map, OT_id,P_id,OBT_identifiant, pChecked, targetFiche,dDebut,dFin)
{
	// TEST
	var MyPopup = new google.maps.InfoWindow({maxWidth:"200"});
	
	// Nuage de points sur RUB_id
	$.ajax({
		type: "POST",
		dataType: "xml",
		cache: "false",
		url: "/ajax.req.php?id=MapRUB",
		data: {"OT_id": OT_id, "P_id": P_id, "OBT_identifiant": OBT_identifiant, "pChecked": pChecked, "dDebut": dDebut, "dFin": dFin },					
			
		beforeSend: function() {
			$("#mapLoading").show();
		},
		
		success: function(myData) {
			clearMarkers(MarkerArray);
			MarkerArray.length = 0;
			$(myData).find('obj').each(function() {
				var OBT_lng = $(this).find('OBT_lng').text();
				var OBT_lat = $(this).find('OBT_lat').text();
				var OBT_type_code = $(this).find('OBT_type_code').text();
				var OBT_identifiant = $(this).find('OBT_identifiant').text();
				var OBT_titre = $(this).find('OBT_titre').text();
				var OBT_titreL = $(this).find('OBT_titreL').text();
				var OBT_cp = $(this).find('OBT_cp').text();
				var OBT_commune = $(this).find('OBT_commune').text();
				var OBT_site1 = $(this).find('OBT_site1').text();
				var OBT_site1T = $(this).find('OBT_site1T').text();
				var FI_url = $(this).find('FI_url').text();
				var FI_url = $(this).find('FI_url').text();
				var FI_width = $(this).find('FI_width').text();				
				var FI_height = $(this).find('FI_height').text();				
				var LienFiche = $(this).find('LienFiche').text();
				var P_icone = $(this).find('P_icone').text();
				var OBT_desc = $(this).find('OBT_desc').text();
				var myPoint = new google.maps.LatLng(OBT_lat,OBT_lng);

				// Définition de la popup HTML
				var myHtml = "<div class='PopupGmap'>";
				
				myHtml += "<div class='GmapTitre'>"+OBT_titre+"</div>";
				myHtml += "<p>"+OBT_commune+"</p>";
				if(FI_url!="") myHtml += "<p><img src='/data/sitra_multimedia/"+FI_url+"' width='"+FI_width+"' height='"+FI_height+"' /></p>";
				myHtml += "<p style='font-size:0.90em;'>"+OBT_desc+"</p>";
				myHtml += '<p style="font-size:0.90em;"><b><img src="/images/icones/zoom.png" class="icones" /><a href="'+LienFiche+'" target="'+targetFiche+'" title="Consultez la ficher détaillée : '+OBT_titreL+'">Plus d\'infos</a></b></p>';
				myHtml += "</div>";

				// Personnalisation des icones
				if(P_icone=='')  P_icone = 'unknow.png';
				var myIcon = new google.maps.MarkerImage("/data/cms/icones_rub/"+P_icone, new google.maps.Size(31, 37));		

				// Ajout du marker sur la map
				var marker = createMarker(map, myPoint, myHtml, myIcon,MyPopup, OBT_titreL);
				marker.setMap(map);
				MarkerArray.push(marker);
				return MarkerArray;

			});
		},
		complete: function() {
			$("#mapLoading").hide();
		}
	});	
}

function getMap(OT_id, P_id, MAPwidth, MAPheight, OBT_identifiant, zoomBar, targetFiche, dDebut, dFin)
{
	$(document).ready(function() {
		var map = $('#map').jQGmap({
			OT_id: ""+OT_id+"",
			P_id: ""+P_id+"",
			MAPwidth: ""+MAPwidth+"",
			MAPheight: ""+MAPheight+"",
			OBT_identifiant: ""+OBT_identifiant+"",
			zoomBar: ""+zoomBar+"",
			targetFiche: ""+targetFiche+"",
			dDebut: ""+dDebut+"",
			dFin: ""+dFin+""
		});
		return map;	
	});
}

function createMarker(map, point, html, myicon,MyPopup, OBT_titreL) 
{
	var markerOptions = { 
		position: point, 
		icon: myicon, 
		clickable: true, 
		title: OBT_titreL,
		optimized:false
	}; 
			
	var marker = new google.maps.Marker(markerOptions);
	if(html != null) 
	{
		google.maps.event.addListener(marker, 'click', function() {
			MyPopup.close();
			MyPopup.setContent(html);
			MyPopup.open(map,marker);
		});
	}
	return marker; 
}


