
/// GMAP
function initRestoMap(){
	var letterArray = ["a","b","c","d","e","f"];	
	var allMarkers = [], markersMonuments = [], markersSelected = [], markerOther = [];
	var activeMarker = false;
	var items = "";
	var monumentsItems = "";
	var ib = "";
	
	if (jQuery("#map-restaurant-zone").length){
		// Création des Boutons de contrôle "Paris" et "Ile de France"
		function HomeControl(controlDiv, map, text, type){
				
			// Set CSS styles for the DIV containing the control
			// Setting padding to 5 px will offset the control
			// from the edge of the map
			jQuery(controlDiv).css("padding",'6px 1px');
			if(type == "idf"){
				jQuery(controlDiv).css("padding-right",'10px');
			}
			
			// Set CSS for the control border
			var controlUI = document.createElement('div');
			jQuery(controlUI).css({
				backgroundColor: 'white',
				borderStyle: 'solid',
				borderWidth: '1px',
				cursor: 'pointer',
				textAlign: 'center'
			});
			jQuery(controlDiv).append(controlUI);
		
			// Set CSS for the control interior
			var controlText = document.createElement('div');
			jQuery(controlText).css({
				fontFamily: 'Arial,sans-serif',
				fontSize: '11px',
				paddingLeft: '11px',
				paddingRight: '9px',
				borderStyle: 'solid',
				borderWidth: '0px',
				borderColor: '#b0b0b0',
				borderBottomWidth: '1px',
				borderRightWidth: '1px'
			}).text(text);
			
			jQuery(controlUI).append(controlText);
			
			// Gestion du zoom au clic
			google.maps.event.addDomListener(controlUI, 'click', function() {
				var boundBt;
				switch(type){
					case "paris":
						boundBt =  new google.maps.LatLngBounds(new google.maps.LatLng(48.890689,2.279313),new google.maps.LatLng(48.827955,2.389154));
						break;
					case "idf":
						boundBt =  new google.maps.LatLngBounds(new google.maps.LatLng(48.984994,1.950),new google.maps.LatLng(48.652,2.776337));
						break;
				}
				map.fitBounds(boundBt);
			});
			
		}
		
		// Gestion des icônes
		function getIcon(images, letter) {
			
			var imageType = ".png"
			if(letter){imageType = "-"+letter+imageType};
	
			var iconImage = new google.maps.MarkerImage(images.src+imageType,
			    new google.maps.Size(images.width, images.height),
			    new google.maps.Point(0,0),
			    new google.maps.Point(images.width/2, images.height/2)
			);
			
			var iconShadow
			if(images.shadow){
				iconShadow = new google.maps.MarkerImage(images.shadow+".png",
					new google.maps.Size(images.shadowWidth, images.shadowHeight),
					new google.maps.Point(0,0),
					new google.maps.Point(6, 0)
				);
			}
			
	        var iconShape = {
	            coord: [1,1,images.width,images.height],
	            type: 'rect'
	        };
	
	        var icons = { 
				icon : iconImage,
				shadow: iconShadow,
				shape : iconShape
	        };
	        
	        return icons;
	      }
		
		// creation de Marqueurs
		function createMarker(posn, title, icon, rel, images, infos) {
			var markerOptions = {
				position: posn,
				title: title,
				infos: infos,
				rel:rel
			};
			if(icon !== false){
				markerOptions.icon   = icon.icon;
				markerOptions.shadow   = icon.shadow;
				markerOptions.shape  = icon.shape;	    
			}
			var marker = new google.maps.Marker(markerOptions);
				
				var activeLayer = false;
				google.maps.event.addListener(marker, 'mouseover', function() {
					
						
						
					if (typeof images != "undefined"){
						jQuery("#"+marker.rel).addClass("active");
						google.maps.event.addListener(marker, 'mouseout', function() {
							if (!activeLayer){
								
								jQuery("#"+marker.rel).removeClass("active");
							}
						});
					}
				});
			
				google.maps.event.addListener(marker, 'click', function() {
					// remove all classes before adding new one (active)
					jQuery(".selected-list > li").removeClass("active");
					if (typeof images == "undefined"){
						activeMarker = marker;
						function sortProx(a,b){
							var x = a.latLng;
							var y = b.latLng;
							return ((x < y) ? -1 : ((x > y) ? 1  : 0));
						}
						var monumentPos = marker.getPosition();
						var monumentProx = new Array();			
						var monumentBounds = new google.maps.LatLngBounds(monumentPos);
						
						jQuery(allMarkers).each(function(){
							var eltLat = Math.abs(monumentPos.lat()-this.getPosition().lat());
							var eltLng = Math.abs(monumentPos.lng()-this.getPosition().lng());
							monumentProx.push({"marker":this,"latLng":eltLat+eltLng});
						});
						monumentProx.sort(sortProx);					
						var zoomLength = 6;
						var itemsMonument = "";
						if(monumentProx.length < zoomLength){
							zoomLength = monumentProx.length;
						}
						for(i=0;i<zoomLength;i++){
							var infosMarker = monumentProx[i].marker.infos;
							monumentBounds.extend(monumentProx[i].marker.getPosition());
							itemsMonument += "<li id='"+monumentProx[i].marker.rel+"' class='item-"+infosMarker.picto+"'><a "+infosMarker.link+"><span><strong>"+infosMarker.name+"</strong><br />"+infosMarker.type+"<br />"+infosMarker.lunchPrice+"</span></a></li>";
							
						}
						for(i=0;i<zoomLength;i++){
							monumentProx[i].marker.id = i;
							monumentProx[i].marker.activeLayer = false;
						};
						jQuery("#map-restaurant-list .selected-list").html(itemsMonument);					
						map.fitBounds(monumentBounds);
						for (i=0;i<markerOther.length;i++){
	        				markerOther[i].setVisible(true);
	        			}
					}
					else{
						jQuery("#"+marker.rel).addClass("active");
						activeLayer = true;
						function infoDraw(distance){
							var boxText = "<div class='info-box'><div class='inner-info-box'>";
							if(distance){boxText += "<p class=\"distance\"><strong>"+distance+" : "+activeMarker.getTitle()+"</strong></p>"};
							boxText += "<img class='visu' src='"+infos.visu+"' alt='' />";
							boxText += "<div class='info-box-content'>";
							boxText += "<p class='title'>"+infos.name+"</p>";
							boxText += "<p>"+infos.type+"<br />"+infos.lunchPrice+"<br />"+infos.dinnerPrice+"</p>";
							boxText += "<p><a "+infos.link+">"+infos.linkText+"</a></p>";
							boxText += "</div></div></div>";
							var opts = {
								content:boxText,
								closeBoxURL:"/FRONT/CRT_PIDF/images/restaurant/gmap/bt-close-info.png",
								displayOver:true,
								pixelOffset: new google.maps.Size(-150,-20),
								closeBoxMargin: "18px 18px 0 0",
								boxStyle: {
									background: "url('/FRONT/CRT_PIDF/images/restaurant/gmap/bg-info.png') no-repeat center 100%",
								  	width: "299px",
								  	padding: "0 0 0px 0"
								}
							}
							if(typeof ib == "object"){
								ib.close();
							};
							ib = new InfoBox(opts);                
							ib.open(map, marker);
							google.maps.event.addListener(ib, 'closeclick', function() {
								jQuery("#"+marker.rel).removeClass("active");
								activeLayer = false;
							});
						}
						
						if(activeMarker){
							var directionDisplay;
							var directionsService = new google.maps.DirectionsService();
							var request = {
							    origin:activeMarker.getPosition(), 
							    destination:marker.getPosition(),
							    travelMode: google.maps.DirectionsTravelMode.WALKING,
							    unitSystem: google.maps.DirectionsUnitSystem.METRIC
							};
							directionsService.route(request, function(result, status) {
								if (status == google.maps.DirectionsStatus.OK) {
									infoDraw(result.routes[0].legs[0].distance.text);
								}
							});						
						}
						else{
							infoDraw();
						}
					}
				});
				
			return marker;
		}	
		
		//definition des options de depart pour la carte
		var latlng = new google.maps.LatLng(48.859362,2.334194);
		
		//creation de la carte
		var myOptions = {
			mapTypeControl: false,
			zoom: 12,
			center: latlng,
			mapTypeId: google.maps.MapTypeId.ROADMAP
		};
		var map = new google.maps.Map(document.getElementById("map-restaurant-zone"), myOptions);
		
		// Creation des boutons de controle
		
		var parisControlDiv = document.createElement('div');
		var parisControl = new HomeControl(parisControlDiv, map ,"Paris", "paris");
		parisControlDiv.index = 2;
		
		var idfControlDiv = document.createElement('div');
		var idfControl = new HomeControl(idfControlDiv, map ,"Ile de France", "idf");
		idfControlDiv.index = 1;
		
		map.controls[google.maps.ControlPosition.TOP_RIGHT].push(parisControlDiv);
		map.controls[google.maps.ControlPosition.TOP_RIGHT].push(idfControlDiv);
		
		// creation du google map listener dès que la carte est chargée ou modifiée
		var listener = google.maps.event.addListener(map, 'bounds_changed', function(){
		      //chargement des markers à l'aide du markermanager
			  setupIcons();
			  //on ôte le listener
		      google.maps.event.removeListener(listener);
		});
		
		//Monuments
		function setupIcons(){
			
			var mgr = new MarkerManager(map);
			var bounds = map.getBounds();
			var boundsChange = false;
			
			if(monumentsArray.length){
				
				var markersMonuments = [];
				var dataMonuments = monumentsArray[0].monuments
				
		        for (i=0;i<	dataMonuments.length;i++) {
		        	var icon = getIcon(dataMonuments[i].icon[0]);
		        	var title = dataMonuments[i].name;
		        	var posn = new google.maps.LatLng(dataMonuments[i].pos[0].lat,dataMonuments[i].pos[0].lng);
		        	var marker = createMarker(posn, title, icon, "monument-"+i);
		        	
		        	markersMonuments.push(marker);
		        }
	
			}
	       
			if(restaurantMarkers.length){
				
				var dataSelected = restaurantMarkers[0].choice;
				var dataOther = restaurantMarkers[0].others;
				
		        for (i=0;i<	dataSelected.length;i++) {
		        	
		        	var iconImage = restaurantMarkers[0].icons[0][dataSelected[i].picto][0];
		        	var letter = letterArray[i]
		        	
		        	var icon = getIcon(iconImage, letter);
		        	var title = dataSelected[i].name;
		        	var posn = new google.maps.LatLng(dataSelected[i].pos[0].lat,dataSelected[i].pos[0].lng);
		        	var infos = dataSelected[i];
		        	infos.picto = dataSelected[i].picto+"-"+letter;
		        	var marker = createMarker(posn, title, icon, "selected-"+i, iconImage, infos);
		        	
		        	if(!bounds.contains(posn)){
		        		bounds.extend(posn);
		        		boundsChange = true
		        	};
		        	markersSelected.push(marker);
		        	allMarkers.push(marker);
		        }
		        
		        for (i=0;i<	dataOther.length;i++) {
		        	var iconImage = restaurantMarkers[0].icons[0].defaultIcon[0];
		        	var icon = getIcon(iconImage);
		        	var title = dataOther[i].name;
		        	var posn = new google.maps.LatLng(dataOther[i].pos[0].lat,dataOther[i].pos[0].lng);
		        	var marker = createMarker(posn, title, icon, "other-"+i,iconImage, dataOther[i] );
		        	
		        	markerOther.push(marker);
		        	allMarkers.push(marker);
		        }
			}
			
			// Creation de la liste des 6 elements choisis
			for (i=0;i<markersSelected.length;i++){
				items += "<li id='"+markersSelected[i].rel+"' class='item-"+markersSelected[i].infos.picto+"'><a "+markersSelected[i].infos.link+"><span><strong>"+markersSelected[i].infos.name+"</strong><br />"+markersSelected[i].infos.type+"<br />"+markersSelected[i].infos.lunchPrice+"</span></a></li>";
			}
			jQuery("#map-restaurant-list").prepend("<ul class='selected-list'>"+items+"</ul>");
			
			// Creation de la liste des monuments
			for (i=0;i<markersMonuments.length;i++){
				if((i-1)%2 == 1 || i ==0){
					monumentsItems += "<li class='alpha' id='"+markersMonuments[i].rel+"'><a href='#map'><img src='"+monumentsArray[0].monuments[i].picto+".png' alt='' /><span>"+markersMonuments[i].title+"</span></a></li>";
				}
				else{
					monumentsItems += "<li id='"+markersMonuments[i].rel+"'><a href='#map'><img src='"+monumentsArray[0].monuments[i].picto+".png' alt='' /><span>"+markersMonuments[i].title+"</span></a></li>";
				}
			}
			jQuery("#map-monuments-list").append("<ul class='monuments-list'>"+monumentsItems+"</ul>");
			jQuery("#map-monuments-list ul li a").bind("click",function(e){
				e.preventDefault();
				var linkId = jQuery(this).parent().attr("id");
				for (z=0; z<markersMonuments.length;z++){
					if(linkId == markersMonuments[z].rel){
						google.maps.event.trigger(markersMonuments[z], 'click');
						jQuery("#map-monuments-list").hide();
					}
				}
			});
			jQuery("#map-restaurant-footer .link-all").bind("click", function(e){
				e.preventDefault();
				var urlLink = jQuery(this).attr("href").split("#")[1];
				jQuery("#"+urlLink).show();
			});
			jQuery("#map-monuments-list .close-bt").bind("click", function(e){
				e.preventDefault();
				jQuery("#map-monuments-list").hide();
			})
			
			
			google.maps.event.addListener(mgr, 'loaded', function(){
				mgr.addMarkers(markersMonuments, 0);
				mgr.addMarkers(allMarkers, 0);
				mgr.refresh();
				for (i=0;i<markerOther.length;i++){
					markerOther[i].setVisible(false);
				}
				if(boundsChange){
					map.fitBounds(bounds);
				}
				
				var initialZoom = map.getZoom();
				var firstZoomListener = google.maps.event.addListener(map, 'zoom_changed', function(){
	        		if(map.getZoom()>initialZoom){
	        			for (i=0;i<markerOther.length;i++){
	        				markerOther[i].setVisible(true);
	        			}
	        			google.maps.event.removeListener(firstZoomListener);
	        		}
		      	});
	        });
			
		}
		
		jQuery(".selection-link").bind("click", function(e){
			e.preventDefault();
			var urlLink = jQuery(this).attr("href").split("#")[1];
			jQuery("#"+urlLink).show();
			jQuery("#"+urlLink).find(".close-bloc a").bind("click", function(e){
				e.preventDefault();
				jQuery(this).parents("#selection-layer").hide();
			});
		});
	}
}

/// SEARCH
function initSearch(){
	jQuery("select#type-lieux").bind("change",function(){
		if(jQuery(this).find("option:selected").hasClass("cafe")){
			jQuery(this).siblings("select#type-cuisine,select#prix-restaurant").attr("disabled","disabled");
		}
		else{
			jQuery(this).siblings("select#type-cuisine,select#prix-restaurant").removeAttr("disabled");
		}
	}).triggerHandler("change");
	
}

//// INIT
jQuery(document).ready(function(){
	
	// Init GMAP
	initRestoMap();
	
	//Init SEARCH
	initSearch();
	
});

