var iconData = {
  "rond_rougeA": { width: 65, height: 65, anchorLeft: 20, anchorRight: 21 },
  "rond_rougeA_ombre": { width: 65, height: 65 },
  "rond_rougeB": { width: 45, height: 45, anchorLeft: 22, anchorRight: 22 },
  "rond_rougeB_ombre": { width: 45, height: 45},
  "rond_rougeC": { width: 25, height: 25, anchorLeft: 10, anchorRight: 10 },
  "rond_rougeC_ombre": { width: 25, height: 25}
};

var map;
var mgr;
var icons = {};
var gInfoTabs;
var gPointInfoTabs;

var loaded = false;
var loadedArticles = new GPoint(0,0);

var provincesLayer;
var regionsLayer;
var citiesLayer
var articlesLayer;

var freezeScroll = false;
var blockTooltip = false;
var closeEventloaded = false;

function load(){
	if (GBrowserIsCompatible()){
		map = new GMap2(document.getElementById("map"));
		map.addControl(new GLargeMapControl3D());
		map.addControl(new GMapTypeControl());
		map.setCenter(new GLatLng(46.881012, -71.19422), 6);
		map.enableDoubleClickZoom();
		
		tooltip = document.createElement("div");
		document.getElementById("map").appendChild(tooltip);
		tooltip.style.visibility = "hidden";

		function mapOnMoveEnd(){
			var newZoom = map.getZoom();
			var newCenter = map.getCenter();
			
		    var diffArticlesX = Math.abs(Math.abs(newCenter.x) - Math.abs(loadedArticles.x));
			var diffArticlesY = Math.abs(Math.abs(newCenter.y) - Math.abs(loadedArticles.y));
			
			if(loaded == false) window.setTimeout(loadMarkers, 0);
			
			if(freezeScroll == false && newZoom >= 12) {
				if(diffArticlesX > 0.05 || diffArticlesY > 0.05){
					window.setTimeout(setupArticlesMarkers, 0);
				}
			}
		}
		
		GEvent.addListener(map, "moveend", mapOnMoveEnd);
		
		mgr = new MarkerManager(map);
		mapOnMoveEnd();
	}
}

function getIcon(images){
	var icon = null;
	if(images){
		if(icons[images[0]]){
			icon = icons[images[0]];
		}
		else{
			icon = new GIcon();
			icon.image = "./images/gmap/marker_" + images[0] + ".png";
			var size = iconData[images[0]];
			icon.iconSize = new GSize(size.width, size.height);
			icon.iconAnchor = new GPoint(size.anchorLeft, size.anchorRight);
			if(images[1]){
				icon.shadow = "./images/gmap/marker_" + images[1] + ".png";
				size = iconData[images[1]];
				icon.shadowSize = new GSize(size.width, size.height);
			}
			icons[images[0]] = icon;
		}
	}
	return icon;
}

function createMarker(arrPlace){
	var icon = getIcon(arrPlace["icon"]);
	var posn = new GLatLng(arrPlace["posn"][0], arrPlace["posn"][1]);
	var marker = new GMarker(posn,{
		title: arrPlace["name"], 
		icon: icon 
	});
	marker.tooltip = '<div class="tooltip" style="text-align:center;">'+arrPlace["tooltip"]+'</div>';
	marker.icon = icon;
	GEvent.addListener(marker,'click', function(){
		zoomIn(arrPlace["posn"][0], arrPlace["posn"][1], arrPlace["zoom"]);
	});
	GEvent.addListener(marker,"mouseover", function(){
		showTooltip(marker,0);
	});
	GEvent.addListener(marker,"mouseout", function(){
		hideTooltip();
	});
	return marker;
}

function createMarkerArticle(arrPlace, otherIcon){
	if(otherIcon){
		var icon = getIcon(otherIcon);
	}
	else{
		var icon = getIcon(arrPlace["icon"]);
	}
	var posn = new GLatLng(arrPlace["posn"][0], arrPlace["posn"][1]);
	var marker = new GMarker(posn, { title: arrPlace["name"], icon: icon });
	marker.tooltip = '<div class="tooltip" style="text-align:center;">'+arrPlace["tooltip"]+'</div>';
	marker.icon = icon;
	if(arrPlace["multiple"]){
		GEvent.addListener(marker, 'click', function(){
			gPointInfoTabs = marker.getPoint();
			loadInfoTabsMultiple(arrPlace["articlesId"]);
		});
	}
	else{
		GEvent.addListener(marker, 'click', function(){
			gPointInfoTabs = marker.getPoint();
			loadInfoTabs(arrPlace["articleId"]);
		});
	}
	GEvent.addListener(marker,"mouseover", function(){
		showTooltip(marker, arrPlace["id"]);
	});
	GEvent.addListener(marker,"mouseout", function(){
		hideTooltip();
	});
	return marker;
}

function hideTooltip(){
	tooltip.style.visibility = "hidden";
}

function showTooltip(marker, articleId) {
	if(blockTooltip){
		return false;
	}
	tooltip.innerHTML = marker.tooltip;
	var point = map.getCurrentMapType().getProjection().fromLatLngToPixel(map.getBounds().getSouthWest(),map.getZoom());
	var offset = map.getCurrentMapType().getProjection().fromLatLngToPixel(marker.getPoint(),map.getZoom());
	var anchor = marker.icon.iconAnchor;
	var width = marker.icon.iconSize.width;
	var height = marker.icon.iconSize.height;
	
	var pos = new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(offset.x - point.x - anchor.x + width - width / 2, - offset.y + point.y + anchor.y - height / 8));
	pos.apply(tooltip);
	tooltip.style.visibility = "visible";
}

function loadMarkers(){
	$('#loadingArticles').show();
	$('#loading').show();
	
	mgr.Goonzy_clearMarkersOnLayer(1, 11);
	
	var params = '';
	if($.cookie('goonzy_search')){
		params = '?'+$.cookie('goonzy_search')
	}
	$.ajax({
		url: 'ajax/article/getMapLayers.php'+params,
		type: 'GET',
		async: false,
		data: ({
			loadProvinces:1,
			loadRegions:1,
			loadCities:1,
			loadArticles:0
		}),
		dataType: 'json',
		success: function(data){
			if(data['provincesLayer']){
				provincesLayer = data['provincesLayer'];
				for (var i in provincesLayer){
					var layer = provincesLayer[i];
					var markers = [];
					for (var j in layer["places"]){
						var place = layer["places"][j];
						markers.push(createMarker(place));
					}
					mgr.addMarkers(markers, layer["zoom"][0], layer["zoom"][1]);
				}
				mgr.refresh();
			}
	
			if(data['regionsLayer']){
				regionsLayer = data['regionsLayer'];
				for (var i in regionsLayer){
					var layer = regionsLayer[i];
					var markers = [];
					for (var j in layer["places"]){
						var place = layer["places"][j];
						markers.push(createMarker(place));
					}
					mgr.addMarkers(markers, layer["zoom"][0], layer["zoom"][1]);
				}
				mgr.refresh();
			}

			if(data['citiesLayer']){
				citiesLayer = data['citiesLayer'];
				for (var i in citiesLayer) {
					var layer = citiesLayer[i];
					var markers = [];
					for (var j in layer["places"]) {
						var place = layer["places"][j];
						markers.push(createMarker(place));
					}
					mgr.addMarkers(markers, layer["zoom"][0], layer["zoom"][1]);
				}
				mgr.refresh();
			}
		}
	});
	
	loaded = true;
	
	$('#loadingArticles').hide();
	$('#loading').hide();
}

function setupArticlesMarkers(){
	$('#loadingArticles').show();
	$('#loading').show();
	
	mgr.Goonzy_clearMarkersOnLayer(12, 17);
	
	var center = map.getCenter();
	var params = '';
	if($.cookie('goonzy_search')){
		params = '?'+$.cookie('goonzy_search')
	}
	$.ajax({
		url: 'ajax/article/getMapLayers.php'+params,
		type: 'GET',
		async: false,
		data: ({
			loadProvinces:0,
			loadRegions:0,
			loadCities:0,
			loadArticles:1,
			longitude:center.x,
			latitude:center.y
		}),
		dataType: 'json',
		success: function(data){
			articlesLayer = data['articlesLayer'];
			if(articlesLayer){
				for (var i in articlesLayer){
					var layer = articlesLayer[i];
					var markers = [];
					for (var j in layer["places"]){
						var place = layer["places"][j];
						markers.push(createMarkerArticle(place, false));
					}
					mgr.addMarkers(markers, layer["zoom"][0], layer["zoom"][1]);
				}
				mgr.refresh();    
			}
		}
	});
	
	loadedArticles = map.getCenter();
	
	$('#loadingArticles').hide();
	$('#loading').hide();
}

function loadInfoTabs(articleId){
	$('#loading').show();
	$('#loadingInfos').show();
	$.ajax({
		url: 'ajax/article/getInfoArticle.php',
		async: false,
		type: 'POST',
		data: ({
			articleId:articleId
		}),
		//dataType: 'json',
		success: function(data){
			$('#loadingInfos').hide();
			$('#loading').hide();
	
			freezeScroll = true;
			
			/* $("#infoWindowContainerOverview").empty().append(data[0][1]);
			$("#infoWindowContainerPhotos").empty().append(data[1][1]);
			$("#infoWindowContainerDescription").empty().append(data[2][1]);
			$("#infoWindowContainerContact").empty().append(data[3][1]);
			
			if($("div#photos").length > 0){
				$("div#photos").slideViewerPro({ 
					thumbs: 4,  
					autoslide: false,  
					galBorderColor: "#000000",
					galBorderWidth: 1,
					buttonsTextColor: "#000000", 
					thumbsBorderOpacity: 0,  
					thumbsBorderWidth: 1,
					thumbsActiveBorderOpacity: 0.8, 
					thumbsActiveBorderColor: "#000000",
					thumbsPercentReduction: 15,
				}); 
			}
			 
			$('.addFavorite').click(function(){
				addFavorite($(this));
			});

			$('.removeFavorite').click(function(){
				removeFavorite($(this));
			});
			
			$('.addComparator').click(function(){
				addComparator($(this));
			});
			
			$('.removeComparator').click(function(){
				removeComparator($(this));
			});
			
			var infoTabs = [
				new GInfoWindowTab(data[0][0], document.getElementById('infoWindowContainerOverview')),
				new GInfoWindowTab(data[1][0], document.getElementById('infoWindowContainerPhotos')),
				new GInfoWindowTab(data[2][0], document.getElementById('infoWindowContainerDescription')),
				new GInfoWindowTab(data[3][0], document.getElementById('infoWindowContainerContact'))
			];  */
			
			var infos = data.split('<div class="scriptBreaker" />');

			var tabs = infos[0].split('<div class="tabBreaker" />');
			
			var tabOverviewInfos = tabs[1].split('<div class="titleBreaker" />');
			var tabPhotosInfos = tabs[2].split('<div class="titleBreaker" />');
			var tabDescriptionInfos = tabs[3].split('<div class="titleBreaker" />');
			var tabContactInfos = tabs[4].split('<div class="titleBreaker" />');
			
			//alert(infos[0]);
			
			// var infoTabs = [
				// new GInfoWindowTab(tabOverviewInfos[0], "<div class='infoWindowTab' id='infoWindowContainerOverview'></div>"),
				// new GInfoWindowTab(tabPhotosInfos[0], "<div class='infoWindowTab' id='infoWindowContainerPhotos'></div>"),
				// new GInfoWindowTab(tabDescriptionInfos[0], "<div class='infoWindowTab' id='infoWindowContainerDescription'></div>"),
				// new GInfoWindowTab(tabContactInfos[0], "<div class='infoWindowTab' id='infoWindowContainerContact'></div>")
			// ];

			var infoTabs = [
				new GInfoWindowTab(tabOverviewInfos[0], tabOverviewInfos[1]),
				new GInfoWindowTab(tabPhotosInfos[0], tabPhotosInfos[1]),
				new GInfoWindowTab(tabDescriptionInfos[0], tabDescriptionInfos[1]),
				new GInfoWindowTab(tabContactInfos[0], tabContactInfos[1])
			];			
			
			map.openInfoWindowTabsHtml(gPointInfoTabs, infoTabs, {
				onOpenFn:function(){
					/* $("#infoWindowContainerOverview").empty().append(tabOverviewInfos[1]);
					$("#infoWindowContainerPhotos").empty().append(tabPhotosInfos[1]);
					$("#infoWindowContainerDescription").empty().append(tabDescriptionInfos[1]);
					$("#infoWindowContainerContact").empty().append(tabContactInfos[1]);	
 */
					setTimeout(infos[1],100);
					
					/* if($("#photos").length > 0){
						$("#photos").slideViewerPro({ 
							thumbs: 4,  
							autoslide: false,  
							galBorderColor: "#000000",
							galBorderWidth: 1,
							buttonsTextColor: "#000000", 
							thumbsBorderOpacity: 0,  
							thumbsBorderWidth: 1,
							thumbsActiveBorderOpacity: 0.8, 
							thumbsActiveBorderColor: "#000000",
							thumbsPercentReduction: 15,
						}); 
					}
					
					$('.addFavorite').click(function(){
						addFavorite($(this));
					});

					$('.removeFavorite').click(function(){
						removeFavorite($(this));
					});
					
					$('.addComparator').click(function(){
						addComparator($(this));
					});
					
					$('.removeComparator').click(function(){
						removeComparator($(this));
					}); */
				},
				onCloseFn:function(){
					closeInfoWindow();
				}
			}); 
			map.savePosition();
			
			if(closeEventloaded == false){
				GEvent.addListener(map.getInfoWindow(), "closeclick", closeInfoWindow);
				closeEventloaded = true;
			}
			blockTooltip = true;
			
		},
		error: function(){
			//alert('ERROR');
			blockTooltip = false;
		}
	});
}

function loadInfoTabsMultiple(articlesId){
	$('#loading').show();
	$('#loadingInfos').show();
	$.ajax({
		url: 'ajax/article/getInfoArticle.php',
		async: false,
		type: 'POST',
		data: ({
			'articlesId[]':articlesId
		}),
		dataType: 'json',
		success: function(data){
			$('#loadingInfos').hide();
			$('#loading').hide();
			
			freezeScroll = true;

			var infoTabs = data;
			map.openInfoWindowTabsHtml(gPointInfoTabs, infoTabs);
			map.savePosition();
			
			if(closeEventloaded == false){
				GEvent.addListener(map.getInfoWindow(), "closeclick", closeInfoWindow);
				closeEventloaded = true;
			}
			blockTooltip=true;
		},
		error: function(){
			blockTooltip=false;
		}
	});
}

function closeInfoWindow(){
	blockTooltip = false;
	freezeScroll = false;
	map.returnToSavedPosition();       
}

function zoomIn(latitude, longitude, zoomLevel){
	map.setCenter(new GLatLng(latitude, longitude), parseInt(zoomLevel));
}
