/* **************************************************************************************** *
* Inicializa as variáveis globais															*
* ***************************************************************************************** */
var div 					= "mapa_destinos";				// div principal onde irá incluir o mapa
var mapa					= null;							// instância de objeto do google maps
var icon					= new Array();					// array com as imagens dos ponteiros
var _latitude				= "-15.453680224345833";		// latitude default de curitiba
var _longitude				= "-50.80078125";				// longitude default de curitiba
var _lat_min				= null;							// latitude minima para selecionar os imóveis
var _lat_max				= null;							// latitude máxima para selecionar os imóveis
var _lon_min				= null;							// longitude mínima para selecionar os imóveis
var _lon_max				= null;							// longitude mínima para selecionar os imóveis
var _zoom					= 4;							// zoom default
var _zoomMax				= 17;							// zoom máximo do mapa
var _zoomMin				= 4;							// zoom mínimo do mapa
var _obj					= null;							// obj atual da seleção
var moveOffset				= 1;							// offset para velocidade do movimento do mapa
var marker_outros			= new Array();					// array com os ponteiros dos imóveis
var marker_aventura_segura	= new Array();					// array com os ponteiros dos imóveis lançamentos
var latitude				= 0;							// posição da latitude dentro do marker
var longitude				= 1;							// posição da longitude dentro do marker
var id_destino				= 2;							// posição da legenda dentro do marker
var titulo					= 3;							// posição da legenda dentro do marker
var _allLatLon				= new Array();					// array para controle de posições inseridas no mapa, vara evitar sobreposição
var _indLatLon				= 0;							// indice de posições para allLatLon

/**
* Inicializa as imagens dos icones
*/
/**
* vermelho
*/
icon[1] 					= new GIcon();
icon[1].image 				= SITE+"img/mapa/icon_1.png";
icon[1].iconSize 			= new GSize(19, 39);
icon[1].iconAnchor 			= new GPoint(19, 39);
icon[1].infoWindowAnchor 	= new GPoint(24, 2);

/**
* Azul
*/
icon[2] 					= new GIcon();
icon[2].image 				= SITE+"img/mapa/icon_2.png";
icon[2].iconSize 			= new GSize(19, 39);
icon[2].iconAnchor 			= new GPoint(19, 39);
icon[2].infoWindowAnchor 	= new GPoint(24, 2);

/* **************************************************************************************** *
* init																						*
* ***************************************************************************************** */
function init(){
	
	if( GBrowserIsCompatible() ){
		mapa = new GMap2(document.getElementById(div));
		
		/**
		* desabilita o zoom através dos 2 cliques
		*/
		mapa.disableDoubleClickZoom();
		mapa.addControl(new GSmallMapControl());
		mapa.addControl(new GMapTypeControl());
		
		/**
		* adiciona um evento ao mover o mapa, para atualizar o max e min de lat e lon
		*/
		GEvent.addListener(mapa, "moveend", function() {
			_zoom = mapa.getZoom();
			setMaxMinLatLon();
			select();
		});

		moveTo();

	}
	else
		alert("Seu navegador não suporta essa operação.");
	
}

/* **************************************************************************************** *
* select - seleciona as coordenadas dos imóveis passados como referencia					*
* ***************************************************************************************** */
function select(){
	var ajax  = new Ajax();
	var ajax2 = new Ajax();
	ajax.load("POST", SITE+"ajax/homeGetDestinos.php", "tipo=outros", "ajax-destinos-outros", null, "setMarkers('destinos-outros');showMarkers('marker_outros',1);");
	ajax2.load("POST", SITE+"ajax/homeGetDestinos.php", "tipo=aventura_segura", "ajax-destinos-aventura-segura", null, "setMarkers('destinos-aventura-segura');showMarkers('marker_aventura_segura',2);");
}

/* **************************************************************************************** *
* setMaxMinLatLong - seta os parametros max e min para latitude e longitude	 				*
* ***************************************************************************************** */
function setMaxMinLatLon(){
	
	var southWest 	= mapa.getBounds().getSouthWest();
	var northEast 	= mapa.getBounds().getNorthEast();

	_lat_min = southWest.lat();
	_lat_max = northEast.lat();
	_lon_min = southWest.lng();
	_lon_max = northEast.lng();
}




/* **************************************************************************************** *
* zoom - altera o zoom do mapa e altera os padroes de latitude e longitude	 				*
* ***************************************************************************************** */
function setZoom(){
	clearMarkers();
	_zoom = mapa.getZoom();
}




/* **************************************************************************************** *
* moveTo move o mapa para a latitude e longitude 											*
* ***************************************************************************************** */
function moveTo(latitude, longitude, zoom){
	
	if( (latitude!=null) && (latitude!=undefined) )
		_latitude = latitude;
	if( (longitude!=null) && (longitude!=undefined) )
		_longitude = longitude;
	if( (zoom!=null) && (zoom!=undefined) )
		_zoom = zoom;
		
	if( (_latitude!=null) && (_longitude!=null) )
		mapa.setCenter( new GLatLng(_latitude, _longitude), _zoom );
}




/* **************************************************************************************** *
* showMarkers - mostra todos os markers										 				*
* ***************************************************************************************** */
function showMarkers(arrObj, iconType){

	arrObj = eval(arrObj);
	
	if( (iconType==null) || (iconType==undefined) )
		iconType = 1;
	
	if( (arrObj!=null) && (arrObj!=undefined) ){
		var options = { icon: icon[iconType], draggable: false };

		for( var i=0; i<arrObj.length; i++ ){
			
			/**
			* Verifica se já está na tela o marker, se não acrescenta na tela e no array geral de lat e lon
			*/
			
			if( !arrayExists(arrObj[i][latitude]+";"+arrObj[i][longitude], _allLatLon) ){
				
				_allLatLon[_indLatLon++] = (arrObj[i][latitude] + ";" + arrObj[i][longitude]);
			
				marcador 			= new GMarker( new GLatLng(arrObj[i][latitude], arrObj[i][longitude]), options);
				marcador.latitude 	= arrObj[i][latitude];
				marcador.longitude 	= arrObj[i][longitude];
				marcador.id_destino = arrObj[i][id_destino];
				marcador.titulo		= arrObj[i][titulo];
				marcador.iconType	= iconType;	// para controle do onclick
				marcador.click		= false;	// para controle do onclick
				
				GEvent.addListener(marcador, "mouseover", function(){
				 	setTooltip(this.titulo);
				});
				
				GEvent.addListener(marcador, "mouseout", function(){
				 	unsetTooltip();
				});
				
				GEvent.addListener(marcador, "click", function(){
					showTipDetalhes(this);
					this.click = true;
				});
				
				mapa.addOverlay(marcador);
				marcador = null;
			}
		}
	}


}



/* **************************************************************************************** *
* arrayExists - verifica se existe $string em $array						 				*
* ***************************************************************************************** */
function arrayExists(string, array){
	
	var count 	= _allLatLon.length;
	var existe 	= false;
	var i		= 0;
	
	while(!existe && (i<=count)){
		if(array[i++] == string)
			existe = true;
	}
	
	return existe;
}




/* **************************************************************************************** *
* showTip - mostra o tooltip do marcador									 				*
* ***************************************************************************************** */
function showTip(obj){
	setTooltip(obj.legenda);
}




/* **************************************************************************************** *
* showTipDetalhes - mostra o tooltip com detalhes da área selecionada		 				*
* ***************************************************************************************** */
function showTipDetalhes(obj, pag){
	
	setInfoWindow(obj, "carregando...");
	
	var ajax 	= new Ajax();
	var params	= "" ;
	
	params += "id_destino="+obj.id_destino;
	
	_obj = obj;
	ajax.load("POST", SITE+"ajax/homeGetDestino.php", params, "destino_info", null, 'setInfoWindow(null,null, "destino_info")');
}

/* **************************************************************************************** *
* setInfoWindow - coloca o HTML da div passada dentro do 'balão' do google	 				*
* ***************************************************************************************** */
function setInfoWindow(obj,html,div){

	if( (obj==null) || (obj==undefined) )
		var obj = _obj;
	
	if( html!=null && html!=undefined )
		obj.openInfoWindowHtml(html);
	else{
		var _div = document.getElementById(div);
		if( _div!=null && div!=undefined )
			obj.openInfoWindowHtml(_div.innerHTML);	
	}
}

/* **************************************************************************************** *
* showMarkers - mostra todos os markers de acordo com o tipo (array)		 				*
* ***************************************************************************************** */
function setMarkers(type){
	
	if( (type==null) || (type==undefined) )
		type = "destinos-outros";
	
	var obj 	= document.getElementById("ajax-"+type);
	var params 	= "";
	var dados	= "";
	arrMarker	= new Array();
	
	if( (obj!=null) && (obj!=undefined) ){
		params = obj.innerHTML.split(";")
		for( var i=0; i<(params.length-1); i++ ){
			dados 					= params[i].split("|");
			arrMarker[i]			= new Array();
			arrMarker[i][latitude]	= dados[0];
			arrMarker[i][longitude]	= dados[1];
			arrMarker[i][id_destino]= dados[2];
			arrMarker[i][titulo]	= dados[3];
		}
	}
	
	if( type=="destinos-outros" )
		marker_outros = arrMarker
	else{
		if( type=="destinos-aventura-segura" )
			marker_aventura_segura = arrMarker;
	}	
}




/* **************************************************************************************** *
* clearMarkers - elimina todos os markers da tela e reeiniciliza a variável 				*
* ***************************************************************************************** */
function clearMarkers(){
	mapa.clearOverlays();
	marker 				= null;
	marker_lancamentos 	= null;
	marker_mudeja 		= null;
	marker_imobiliarias	= null;
	_allLatLon			= null;
	
	marker 				= Array(); 
	marker_lancamentos 	= Array();
	marker_mudeja 		= Array();
	marker_imobiliarias	= Array();
	_allLatLon 			= Array();
}




/* **************************************************************************************** *
* Funções padrões do mapa																	*
* ***************************************************************************************** */

/**
* satelite - troca o mapa para visualização do satelite
*/
function satelite(){
	mapa.setMapType(G_SATELLITE_MAP);
}

/**
* ruas - troca a visualização para ruas
*/
function ruas(){
	mapa.setMapType(G_NORMAL_MAP);
}

/**
* hibrido - troca visualização do mapa para hibrido
*/
function hibrido(){
	mapa.setMapType(G_HYBRID_MAP);
}

/**
* moverNorte - movimenta o mapa em 'moveOffset' para o norte
*/
function moverNorte(){
	mapa.panDirection( 0,+moveOffset );
}

/**
* moverSul - movimenta o mapa em 'moveOffset' para o sul
*/
function moverSul(){
	mapa.panDirection( 0,-moveOffset );
}

/**
* moverOeste - movimenta o mapa em 'moveOffset' para o oeste
*/
function moverOeste(){
	mapa.panDirection( +moveOffset,0 );
}

/**
* moverLeste - movimenta o mapa em 'moveOffset' para o leste
*/
function moverLeste(){
	mapa.panDirection( -moveOffset,0 );
}

/**
* zoomMenos - se ainda estiver dentro do *limite de zoom então diminui
*/
function zoomMenos(){
	if( _zoom > _zoomMin ){
		mapa.zoomOut();
		setZoom();
	}
}

/**
* zoomMais - se ainda estiver dentro do *limite de zoom então aumenta
*/
function zoomMais(){
	if( _zoom < _zoomMax ){
		mapa.zoomIn();
		setZoom();
	}
}
