var Aksgmap = {	
	_map: '',
	_imgIcon: "http://labs.google.com/ridefinder/images/mm_20_red.png",
	_icon: '',
	_mark: '',
	_idinnerlat: 'latitude',
	_idinnerlng: 'longitude',
	_idmap: 'map',
	_nbPoints: 0,
	_totalLat: 0,
	_totalLng: 0,
	_currentMarkerLink: '',
	_tooltip: '',
	_currentTooltipContent: '',
	_currentTooltipClass: 'aksgmap_tooltip',
	_gMapTypeControl: {},
	_gSmallMapControl: {},
	_customContainer: '',
	_mapWidth: 0,
	_mapHeight: 0,
	
	_InitMap: function() {
		if(typeof(idmap) != "undefined") Aksgmap._idmap = idmap;
		
		var map = new GMap2($(Aksgmap._idmap));
		Aksgmap._gSmallMapControl = new GSmallMapControl();
		map.addControl(Aksgmap._gSmallMapControl);
		Aksgmap._gMapTypeControl = new GMapTypeControl();
		map.addControl(Aksgmap._gMapTypeControl);
		//map.disableDragging();
		
		Aksgmap._map = map;
		
		// Création de mini icones
		/*var icon = new GIcon();
		var opticon = eval(Aksconfig._google_map_icon);
		icon.image = opticon[0];
		icon.iconSize = new GSize(opticon[1], opticon[2]);
		icon.iconAnchor = new GPoint(opticon[3], opticon[4]);
		icon.infoWindowAnchor = new GPoint(5, 1);
		
		Aksgmap._icon = icon;*/
		
		var tinyIcon = new GIcon();
		tinyIcon.image = Aksgmap._imgIcon;
		//tinyIcon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
		tinyIcon.iconSize = new GSize(40, 51);
		//tinyIcon.shadowSize = new GSize(22, 20);
		tinyIcon.iconAnchor = new GPoint(29, 49);
		tinyIcon.infoWindowAnchor = new GPoint(19, 1);
		
		Aksgmap._icon = tinyIcon;
	},
	
	_ShowAddress: function(address_google_map, addresse_window, zoom, nb, drag) {	
		if(nb == undefined) 
		{
			Aksgmap._InitMap();
			var nb = 0;
		}
		
		if(drag == undefined) 
		{
			var drag = false;
		}

		if (lat != '') {
			if(nb == 0) Aksgmap._map.setCenter(new GLatLng(lat, lng), zoom);
			var markerOptions = { icon:Aksgmap._icon, draggable: drag };     
			var mark = new GMarker(new GLatLng(lat, lng), markerOptions);
			var ncoords = mark.getPoint();
			mark.clat = ncoords.lat();
			mark.clng = ncoords.lng();
			
			if(drag) 
			{
				GEvent.addListener(mark, "dragend", function() {       
					Aksgmap._GetCoords('latitude', 'longitude');
				});
			}
			
			mark.link = Aksgmap._currentMarkerLink;
			GEvent.addListener(mark, "click", function() {
				if(addresse_window != undefined) mark.openInfoWindowHtml(addresse_window);
				else if(Aksgmap._currentMarkerLink != '') location.href = mark.link;
			});
			
			if(Aksgmap._currentTooltipContent != '')
			{
				mark.tooltip = '<div class="' + Aksgmap._currentTooltipClass + '">' + Aksgmap._currentTooltipContent + '</div>';
				GEvent.addListener(mark,"mouseover", function() {
					Aksgmap._ShowTooltip(mark);
				});
				GEvent.addListener(mark,"mouseout", function() {
					//Aksgmap._tooltip.hide();
					Aksgmap._tooltip.style.display = 'none';
				});  
			}
			
			Aksgmap._map.addOverlay(mark);
			Aksgmap._mark = mark;
			Aksgmap._GetCoords(Aksgmap._idinnerlat, Aksgmap._idinnerlng);
		}
		else 
		{
			var geocoder = new GClientGeocoder();
			geocoder.getLatLng(
				address_google_map,
				function(point) {
					if (!point) {
						$(Aksgmap._idmap).innerHTML = '<div style="width: 350px; height: 124px; margin: 5px 0 0 5px; font-size: 10px; color: #c41130; background-color: #fff; border: 2px solid #363638; text-align: center; padding: 60px 20px 0;">Désolé, <strong>' + address_google_map + '</strong> n\'a pu être localisée sur Google MAP !</div>';
					}
					else {
						if(nb == 0) Aksgmap._map.setCenter(point, zoom);
						
						var markerOptions = { icon:Aksgmap._icon, draggable: drag };     
						var mark = new GMarker(point, markerOptions);
						var ncoords = mark.getPoint();
						mark.clat = ncoords.lat();
						mark.clng = ncoords.lng();
						
						if(drag) 
						{
							GEvent.addListener(mark, "dragend", function() {       
								Aksgmap._GetCoords('latitude', 'longitude');
							});
						}
						
						mark.link = Aksgmap._currentMarkerLink;
						GEvent.addListener(mark, "click", function() {
							if(addresse_window != undefined) mark.openInfoWindowHtml(addresse_window);
							else if(Aksgmap._currentMarkerLink != '') location.href = mark.link;
						});
						
						if(Aksgmap._currentTooltipContent != '')
						{
							mark.tooltip = '<div class="' + Aksgmap._currentTooltipClass + '">' + Aksgmap._currentTooltipContent + '</div>';
							GEvent.addListener(mark,"mouseover", function() {
								Aksgmap._ShowTooltip(mark);
							});
							GEvent.addListener(mark,"mouseout", function() {
								//Aksgmap._tooltip.hide();
								Aksgmap._tooltip.style.display = 'none';
							});  
						}
						
						Aksgmap._map.addOverlay(mark);
						Aksgmap._mark = mark;
						Aksgmap._GetCoords(Aksgmap._idinnerlat, Aksgmap._idinnerlng);
					}
				}
			);
		}
	},
	
	_MultiAddresses: function(addresses_google_map, zoom) {	
		Aksgmap._InitMap();
		
		addresses_google_map = eval(addresses_google_map);
		
		var points = addresses_google_map.points;
		Aksgmap._nbPoints = points.length;
		//alert(Aksgmap._nbPoints);
		
		Aksgmap._totalLat = Aksgmap._totalLng = 0;
		for(var i = 0; i < Aksgmap._nbPoints; i++)
		{
			if(typeof(points[i].amap) != "undefined")
			{
				if(typeof(points[i].wmap) == "undefined") points[i].wmap = undefined;
				Aksgmap._ShowAddress(points[i].amap, points[i].wmap, zoom, i);
			} else {
				lat = points[i].lat;
				lng = points[i].lng;
				Aksgmap._currentMarkerLink = points[i].link;
				Aksgmap._currentTooltipContent = points[i].tooltip;
				Aksgmap._ShowAddress(undefined, undefined, zoom, i);
			
				Aksgmap._totalLat = Aksgmap._totalLat + lat;
				Aksgmap._totalLng = Aksgmap._totalLng + lng;
			}
		}
		
		if(lat) Aksgmap._map.setCenter(new GLatLng(Aksgmap._totalLat / Aksgmap._nbPoints, Aksgmap._totalLng / Aksgmap._nbPoints), 6);
	},
	
	_GetCoords: function(latId, lngId) {
		if($(latId)) $(latId).value = Aksgmap._mark.clat;
		if($(lngId)) $(lngId).value = Aksgmap._mark.clng;
	},
	
	_ShowTooltip: function(mark) {
		Aksgmap._tooltip = document.createElement("div");
		$(Aksgmap._idmap).appendChild(Aksgmap._tooltip);
		//Aksgmap._tooltip.hide();
		Aksgmap._tooltip.style.display = 'none';
			
		//Aksgmap._tooltip.update(mark.tooltip);
		Aksgmap._tooltip.innerHTML = mark.tooltip;
		var point = Aksgmap._map.getCurrentMapType().getProjection().fromLatLngToPixel(Aksgmap._map.getBounds().getSouthWest(),Aksgmap._map.getZoom());
		var offset = Aksgmap._map.getCurrentMapType().getProjection().fromLatLngToPixel(mark.getPoint(),Aksgmap._map.getZoom());
		var anchor = mark.getIcon().iconAnchor;
		var width = mark.getIcon().iconSize.width;
		var pos = new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(offset.x - point.x - anchor.x + width + 5,- offset.y + point.y +anchor.y - 30)); 
		pos.apply(Aksgmap._tooltip);
		//Aksgmap._tooltip.show();
		Aksgmap._tooltip.style.display = 'block';
	},
	
	_CustomMap: function() {
		var map = Aksgmap._map;
		
		// relooking zoom et pts cardinaux
		function TextualZoomControl() {
		}
		TextualZoomControl.prototype = new GControl();
		
		// Creer un div pour chaque bouton et on les place dans un container
		TextualZoomControl.prototype.initialize = function(map) {
			var container = document.createElement("div");
			
			var size_of_direction_label = 25;
			var width = map.getSize().width;
			Aksgmap._mapWidth = width;
			var middle_w = 0;
			if (width > 0) middle_w = width/2 - size_of_direction_label;
			
			var height = map.getSize().height;
			Aksgmap._mapHeight = height;
			var middle_height = 0;
			if (height > 0) middle_height = height/2;
			
			//pt cardinal est
			var pan_right_div = document.createElement("div");
			this.setButtonStyle2_(pan_right_div, middle_height - 20, width-150);
			container.appendChild(pan_right_div);
			var img_right = document.createElement('img');
			img_right.src = '/design/images/gg_pan_right.png';
			pan_right_div.appendChild(img_right);
			GEvent.addDomListener(pan_right_div, "click", function() { map.panDirection(-1,0); });
				
			//pt cardinal ouest
			var pan_left_div = document.createElement("div");
			this.setButtonStyle2_(pan_left_div, middle_height - 20, 00);
			container.appendChild(pan_left_div);
			var img_left = document.createElement('img');
			img_left.src = '/design/images/gg_pan_left.png';
			pan_left_div.appendChild(img_left);
			GEvent.addDomListener(pan_left_div, "click", function() { map.panDirection(1,0); });
			
			//pt cardinal nord
			var pan_up_div = document.createElement("div");
			this.setButtonStyle2_(pan_up_div, -5, middle_w);
			container.appendChild(pan_up_div);
			var img_up = document.createElement('img');
			img_up.src = '/design/images/gg_pan_up.png';
			pan_up_div.appendChild(img_up);
			GEvent.addDomListener(pan_up_div, "click", function() { map.panDirection(0,1); });
			
			//pt cardinal sud
			var pan_down_div = document.createElement("div");
			this.setButtonStyle2_(pan_down_div, height - 50, middle_w);
			container.appendChild(pan_down_div);
			var img_down = document.createElement('img');
			img_down.src = '/design/images/gg_pan_down.png';
			pan_down_div.appendChild(img_down);
			GEvent.addDomListener(pan_down_div, "click", function() { map.panDirection(0,-1); });
			
			//zoom in
			var zoomInDiv = document.createElement("div");
			this.setButtonStyle2_(zoomInDiv, height - height - 5, middle_w - middle_w);
			container.appendChild(zoomInDiv);
			var img_zoomin = document.createElement('img');
			img_zoomin.src = '/design/images/gg_zoomin.png';
			zoomInDiv.appendChild(img_zoomin);
			GEvent.addDomListener(zoomInDiv, "click", function() {map.zoomIn();});
			
			//zoom out
			var zoomOutDiv = document.createElement("div");
			this.setButtonStyle2_(zoomOutDiv, height - height + 35 , middle_w - middle_w);
			container.appendChild(zoomOutDiv);
			var img_zoomout = document.createElement('img');
			img_zoomout.src = '/design/images/gg_zoomout.png';
			zoomOutDiv.appendChild(img_zoomout);
			GEvent.addDomListener(zoomOutDiv, "click", function() {map.zoomOut();});
			
			//Aksgmap._ActiveKeyBoard();
			
			Aksgmap._customContainer = container;
					
			map.getContainer().appendChild(container);
			return container;
		}
		
		// By default, the control will appear in the top left corner of the
		// map with 7 pixels of padding.
		TextualZoomControl.prototype.getDefaultPosition = function() {
		 	return new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(7, 14));
		}
		
		// Sets the proper CSS for the given button element.
		TextualZoomControl.prototype.setButtonStyle2_ = function(button, top_pos, left_pos) {
			button.style.top = top_pos + "px";
			button.style.left = left_pos + "px";
			button.style.position = "absolute";
			button.style.cursor = "pointer";
		}
		
		map.addControl(new TextualZoomControl());
		Aksgmap._map.removeControl(Aksgmap._gSmallMapControl);
	},
	
	_ActiveKeyBoard: function(e) {
		GEvent.addDomListener(document, "keydown", function(e) {
			var c = (e.charCode)?e.charCode:e.keyCode;
			switch (c)
			{
				case Event.KEY_RIGHT: Aksgmap._map.panDirection(-1,0); break;
				case Event.KEY_LEFT: Aksgmap._map.panDirection(1,0); break;
				case Event.KEY_UP: Aksgmap._map.panDirection(0,1); break;
				case Event.KEY_DOWN: Aksgmap._map.panDirection(0,-1); break;
			}
			Event.stop(e);
		});
	},

	_FullScreen: function(addresses_google_map, callback) {
		var map = Aksgmap._map;
		
		$('top').scrollTo();
		$('futur_popup').show();
		$$('body').each(function(el){ el.style.overflow = 'hidden' });
		Aksgmap._idmap = 'futur_popup';
		Aksgmap._MultiAddresses(addresses_google_map, 10); 
		Aksgmap._CustomMap();
		
		//bt fermer
		// relooking close
		function TextualCloseControl() {
		}
		TextualCloseControl.prototype = new GControl();
		TextualCloseControl.prototype.initialize = function(map) {
			var container = Aksgmap._customContainer;
			var height = Aksgmap._mapHeight;
			var middle_height = 0;
			if (height > 0) middle_height = height/2;
			var size_of_direction_label = 25;
			var width = Aksgmap._mapWidth;
			var middle_w = 0;
			if (width > 0) middle_w = width/2 - size_of_direction_label;
			var close_div = document.createElement("div");
			this.setButtonStyle2_(close_div, height - height + 80, middle_w - middle_w);
			container.appendChild(close_div);
			var img_close = document.createElement('img');
			img_close.src = '/design/images/gg_close.png';
			close_div.appendChild(img_close);
			GEvent.addDomListener(close_div, "click", function() {
				TextualCloseControl.prototype.close_();
			});
			GEvent.addDomListener(window, "keydown", function(e) {
				var c = (e.charCode)?e.charCode:e.keyCode;
				if(c == Event.KEY_ESC) TextualCloseControl.prototype.close_();
				//Event.stop(e);
			});
			return container;
		}
		TextualCloseControl.prototype.setButtonStyle2_ = function(button, top_pos, left_pos) {
			button.style.top = top_pos + "px";
			button.style.left = left_pos + "px";
			button.style.position = "absolute";
			button.style.cursor = "pointer";
		}
		TextualCloseControl.prototype.close_ = function() {
			$('futur_popup').update('');
			$('futur_popup').hide();
			$$('body').each(function(el){ el.style.overflow = '' });
			Aksgmap._idmap = 'map';
			if(callback != undefined) eval(callback + '();');
		}
		map.addControl(new TextualCloseControl());
	}
}