var MapsHandler = 
{
	setMap: function()
	{
		var target 	= jQuery('#gmaps-area');
		if(target.length == 0)return;
		
		var address	= target.attr('title');
		target.attr('title','');
				
		//Inicializa o mapa e seta o endereço atual como ponto dele
		window.gMap		= new google.maps.Map2(target.get(0));
		window.gMapPoints	= {local: address};
		//Pegar a rota para ir até o local
		GEvent.addListener
		(
			window.gMap,
			'load',
			function()
			{
				window.gMap.checkResize();
				if(window.gMapCoords != null)
					window.gMap.setCenter(window.gMapCoords, 16);
			}
		);
		
		window.directionsHandler = new google.maps.Directions(window.gMap, jQuery('#gmaps-panel').get(0));
		
		//Tratamento de erros
		GEvent.addListener
		(
			window.directionsHandler,
			'error',
			function(e)
			{
				alert
				("Não foi possível traçar a rota entre o endereço especificado e o local da academia.");
			}
		);
		
		//Tratamento do retorno
		GEvent.addListener
		(
			window.directionsHandler,
			'load',
			function(e)
			{
				jQuery('div.coluna-mapa-direita').addClass('coluna-mapa-path');
				window.gMap.checkResize();
			}
		);
		
		window.gMap.addControl(new google.maps.LargeMapControl(), new google.maps.ControlPosition(G_ANCHOR_TOP_RIGHT));

		var sOptions= new google.maps.ClientGeocoder();
		
		
		//Pegando a posição do endereço atual
		sOptions.getLatLng
		(address,
		function(point)
		{
			if(point == null)
		  {
				jQuery('#comoChegar').hide();
				return;
		  }
		
		  jQuery('div.conteudo-tab').removeClass('address-not-found');
		   
		  var icon		= new GIcon(); 
		  icon.image		= 'http://fess-xseries/bioritmo-portal/_images/icones-mapa/academia.gif';
		  icon.shadow		= 'http://fess-xseries/bioritmo-portal/_images/icones-mapa/academia_shadow.png';
		  icon.iconSize       	= new GSize(90, 55);
		  icon.shadowSize     	= new GSize(90, 55);
		  icon.iconAnchor     	= new GPoint(31, 40);
		  icon.infoWindowAnchor = new GPoint(5, 1);
			
		  //Adição do controlador de modo de visualização;
		  //ficou aqui por que colocando no load, dava pau.
		  window.gMap.addControl(new google.maps.MapTypeControl(), new google.maps.ControlPosition(G_ANCHOR_TOP_LEFT));
			
		  window.gMapCoords    = point;
		  window.gMap.addOverlay(window.empPoint = new google.maps.Marker(point, {title: "Localização da academia", clickable: false,icon: icon}));
		  window.gMap.setCenter(point,16);
		});
	}
};

jQuery(document).bind
(
 	'init-maps',
	function(e, source)
	{
			//Impressão
			jQuery("#gmaps-print-btn").bind
			(
				'click',
				function(e)
				{
					var enderecoOrigem			= window['mapPrintAddress'] != null ? window['mapPrintAddress'] : '';
					var enderecoEmpree			= $("#enderecoFinal").get(0).value;
					var nomeEmpreendimento	= $("#nomeEmpreendimento").get(0).value;
					var center							= window.gMap.getCenter();
					
					window.open( CFG_URL + 'mapa-print.php?from='+ enderecoOrigem +'&to='+ enderecoEmpree +'&nomeEmpreendimento='+ nomeEmpreendimento );
				}
			);
			
			//Navegação via teclado na lista de endereços
			jQuery('#gmaps-form #enderecoOrigem').bind
			(
				'focus',
				function(e)
				{
					var target = jQuery(this);
					if(target.hasClass('initial')){target.attr('value','');target.removeClass('initial');}
					
					jQuery('#gmaps-form').get(0).elements['enderecoCompleto'].value = '';
					jQuery('#gmaps-lista-enderecos').html('').addClass('nn');
				}
			).bind
			(
				jQuery.browser.safari || jQuery.browser.opera ? 'keydown' : 'keypress',
				function(e, forceSubmit)
				{
					var target =  jQuery('#gmaps-lista-enderecos'), list = target.find('li'), current = -1;
					list.each
					(
						function(i)
						{
							if(jQuery(this).hasClass('active'))
							{
								current = i;
								return false;
							}
						}
					);
					
					if(target.hasClass('nn'))return;
					
					switch(true)
					{
						case e.keyCode == 38://Navegar pra cima
						e.preventDefault();
						e.stopPropagation();
						if((current - 1) >= 0 && list.length > 0)
						{
							list.removeClass('active');
							list.eq(current - 1).addClass('active');
						}
						break;
						case e.keyCode == 40://Navegar pra baixo
						e.preventDefault();
						e.stopPropagation();
						if((current + 1) < list.length)
						{
							list.removeClass('active');
							list.eq(current + 1).addClass('active');
						}
						break;
						case e.keyCode == 8://Apagar
						target.html('').addClass('nn');
						break;
						case e.keyCode == 13 || forceSubmit == true://Selecionar
							
						if(forceSubmit == null)
						{
							e.preventDefault();
							e.stopPropagation();
						}
						
						if(current != -1)
						{
							window['mapPrintAddress'] = 
							jQuery('#gmaps-form').get(0).elements['enderecoCompleto'].value = list.eq(current).html();
							target.html('').addClass('nn');
							
							//Bug do Opera
							if(!jQuery.browser.opera)
								jQuery('#gmaps-form').trigger('submit');
						}

						break;
					}
				}
			);
			
			//Localização a partir do endereço do cliente
			jQuery('#gmaps-form').bind
			(
			 	'submit',
			 	function(e)
				{
					
					var logradouroOrigem = this.elements['logradouroOrigem'];
					var enderecoOrigem   = this.elements['enderecoOrigem'];
					var estadoOrigem     = this.elements['estadoOrigem'];
					var source = this;
					
					var geocoder = new google.maps.ClientGeocoder();			
					
					
					try
					{
						//Se ainda não existe um endereço completo selecionado
						if(source.elements['enderecoCompleto'].value == '')
						{
							if(enderecoOrigem.value == '' || jQuery(enderecoOrigem).hasClass('initial'))
								throw "Por favor, informe o endereço de origem.";
							
							var eOrig = '"' + logradouroOrigem.value + ' ' + enderecoOrigem.value + ', ' + estadoOrigem.value + '"';
							jQuery('#gmaps-lista-enderecos').removeClass('nn').html('<strong>Carregando...</strong>');
							
							//Aqui, serão pegos os endereços compatíveis com o informado
							geocoder.getLocations
							(
								eOrig,
								function(response)
								{
									if(!response || response.Status.code != 200)
									{
										alert('Não foi possível localizar o endereço informado.');
										window['mapPrintAddress'] = '';
										jQuery('div.coluna-mapa-direita').removeClass('coluna-mapa-path');
										jQuery('#gmaps-lista-enderecos').addClass('nn');
										enderecoOrigem.focus();
										window.gMap.checkResize();
										return;
									}
									
									//Se for retornado somente um endereço, colocá-lo no campo hidden
									//e iniciar o processo de localização dos pontos entre origem e destino
									if(response.Placemark.length == 1)
									{
										jQuery('#gmaps-lista-enderecos').addClass('nn');
										window['mapPrintAddress'] =
										source.elements['enderecoCompleto'].value = response.Placemark[0].address;
										jQuery('#gmaps-form').trigger('submit');
									}
									else
									{
									//Senão, exibir uma lista com os endereços disponíveis para que o
									//usuário selecione
										var lista = ['<ul>'];
										for(var counter = 0, size = response.Placemark.length;counter < size;counter++)
										lista[counter + 1] =
										'<li class="' + (counter == 0 ? 'active first' : '') + '"' +
										' title="Clique aqui para selecionar esse endereço.">' +
										response.Placemark[counter].address + '</li>';
										lista[lista.length] = '</ul>';
										jQuery('#gmaps-lista-enderecos').html(lista.join(''));
										
										jQuery('#gmaps-lista-enderecos li').bind
										(
											'click',
											function(e)
											{
												var target = this, current = -1, list = jQuery('#gmaps-lista-enderecos li');
												list.each
												(
													function(i)
													{
														if(this == target)
														{
															current = i;
															return false;
														}
													}
												);
												list.removeClass('active');
												list.eq(current).addClass('active');
												jQuery('#gmaps-form #enderecoOrigem').triggerHandler(jQuery.browser.safari || jQuery.browser.opera ? 'keydown' : 'keypress',[true]);
											}
										);
									
									}
								}
							);
						}
						else
						{
							
							window.directionsHandler.clear();
							window.directionsHandler.load("from:" + source.elements['enderecoCompleto'].value + ' to: ' + window.gMapPoints.local);
							source.elements['enderecoCompleto'].value = '';
							
						}
					}
					catch(e){alert(e);enderecoOrigem.focus();}
					
					e.preventDefault();
					e.stopPropagation();
				}
			);
			
			/* Adicionar aos favoritos */
			jQuery('div.favoritar a').bind
			(
				'click',
				function(e)
				{
					var target				= jQuery(this);
					var idEmpreendimento	= target.attr('href');
					idEmpreendimento		= idEmpreendimento.substr(idEmpreendimento.indexOf('#') + 1);
					
					if(Main && Main.manageFavorite)
						Main.manageFavorite
						(idEmpreendimento,
						 !target.hasClass('active') ? 'add' : 'remove',
						 function()
						 {
							 jQuery(document).trigger('load-favoritos');
							 target.
							 html(target.hasClass('active') ? 'Favoritos' : 'Favoritos')						 
							 [target.hasClass('active') ? 'removeClass' : 'addClass']
							 ('active');
						  }
						);
					
					e.preventDefault();
					e.stopPropagation();
				}
			);
	}
);

var gmapInitialized = false;
function gMapInitialize() {
	if(!gmapInitialized) {
		gmapInitialized = true;
		google.load('maps','2', {callback: MapsHandler.setMap, language: 'pt-BR', other_params: 'oe=ISO-8859-1'});
		jQuery(document).trigger('init-maps','#ContentTab');
	}
}


jQuery(document).ready(function() {
	// Inicia o google maps
	google.setOnLoadCallback(gMapInitialize);
	
	// Arruma as tooltips baixas
	jQuery('.setaBottomLeft, .setaBottomRight').each(function() {
		var tooltip = jQuery(this);
		var mt = parseFloat( tooltip.css('marginTop') );
		var height = parseFloat( tooltip.height() );
		
		tooltip.css('marginTop', (-height) - 50 +'px' );
	});
	
	// Tooltip de vantagens
	jQuery('#CarrosselVantagens a').bind('mouseenter', function() {
		var tooltip = jQuery('.tooltipVantagens', this.parentNode);
		tooltip.css('visibility', 'visible');
	}).bind('mouseleave', function() {
		var tooltip = jQuery('.tooltipVantagens', this.parentNode);
		tooltip.css('visibility', 'hidden');
	});
	
	jQuery('.tooltipVantagens').bind('mouseenter', function() {
		jQuery(this).css('visibility', 'visible');
	}).bind('mouseleave', function() {
		jQuery(this).css('visibility', 'hidden');
	}).bind('click', function() {
		document.location.href = jQuery('a', this.parentNode).attr('href');
	});
	
	
	// Abre as fotos
	var fotoPanel = {
		init: function() {
			jQuery('#CarrosselFotos a').click(function(e) {
				if( jQuery(this).is('.active') ) return false;
				
				jQuery('a', this.parentNode).removeClass('active');
				jQuery(this).addClass('active');
				fotoPanel.openFoto( jQuery(this).attr('href'), jQuery(this).attr('rel') );
	
				e.preventDefault();
				e.stopPropagation();
				
				return false;
			});
			
			// Ativa a primeira foto da pagina de aulas
			jQuery('#CarrosselFotos a').eq(0).trigger('click');
		},
		openFoto: function(picUrl, picDetail) {
			jQuery('#fotoGrande .foto').css({'background': 'url(\''+ picUrl +'\')', 'backgroundRepeat': 'no-repeat'});
			
			if(picDetail.length > 0) {
				jQuery('#fotoGrande .legenda').slideDown('fast').html( picDetail );
			} else {
				jQuery('#fotoGrande .legenda').slideUp('fast');
			}
		}
	}
	
	fotoPanel.init();
	
});
