//Drag drop
//SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;
function initialize() {
  if (GBrowserIsCompatible()) {
	map = new GMap2(document.getElementById("map"));
	var center = new GLatLng(-15.876809064146757, -47.98828125);
	map.setCenter(center, 4);
	
	
	var topLeft = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(20,10));

	
	map.addControl(new GLargeMapControl(), topLeft);
	map.addControl(new GMapTypeControl());
	map.addControl(new GScaleControl());
	map.addControl(new GOverviewMapControl());
	

	geocoder = new GClientGeocoder();
	
	// Create a base icon for all of our markers that specifies the
	// shadow, icon dimensions, etc. 
	pointIcon = new GIcon(G_DEFAULT_ICON);
	pointIcon.shadow = "../imgs/setaShadow.png";
	pointIcon.iconSize = new GSize(20, 34);
	pointIcon.shadowSize = new GSize(36, 34);
	pointIcon.iconAnchor = new GPoint(9, 34);
	pointIcon.infoWindowAnchor = new GPoint(9, 2);
	
	baseIcon = new GIcon(G_DEFAULT_ICON);
	baseIcon.shadow = "../imgs/pointShadow.png";
	baseIcon.iconSize = new GSize(10, 10);
	baseIcon.shadowSize = new GSize(19, 19);
	baseIcon.iconAnchor = new GPoint(0, 0);
	baseIcon.infoWindowAnchor = new GPoint(9, 2);
  }
}

function buscaPontos(lng, lat){
	var url = "";
	var params = "";
	var raio = document.getElementById("cboRaio").value;
	
	if(!raio){
		limpaCircles();
		return;
	}
	
	url = "./class/control/index.ajax.php";
	params += "f=buscaPontos";
	params += "&v1="+lat;
	params += "&v2="+lng;
	params += "&v3="+KmToMi(raio);

	limpaCircles();
	drawCircle(lat, lng, KmToMi(raio), "#000080", 2, 0.1, "#0000FF",0.1);

	function func(){
		if(ajax.readyState == 4 && ajax.status == 200){
			eval(ajax.responseText);
			if(dados.erro.length > 0){
				for(i in dados.erro){
					alert(convertHtml(dados.erro[i]));	
				}
			}else{
				if(dados.msg.length > 0){
					for(i in dados.msg){
						alert(convertHtml(dados.msg[i]));	
					}
				}
				limpaPontos();
				if(dados.pontos && dados.pontos.length > 0){
					for(i in dados.pontos){
						
						point = new GLatLng(dados.pontos[i][0], dados.pontos[i][1]);
						var pt = createMarker(point, dados.pontos[i]);
						g_pontos[g_pontos.length] = pt;
						map.addOverlay(pt);
					}
				}else{
					alert("Nenhum imóvel foi encontrado!");
				}
			}
		}
	}

	execAjax("GET", url, params, func);
}

function createMarker(point, info) {
	// Create a lettered icon for this point using our icon class
	var letteredIcon = new GIcon(baseIcon);
	//letteredIcon.image = "../imgs/seta.png";
	letteredIcon.image = "../imgs/point.png";
	
	// Set up our GMarkerOptions object
	markerOptions = { icon:letteredIcon };
	var marker = new GMarker(point, markerOptions);
	
	GEvent.addListener(marker, "click", function() {
	marker.openInfoWindowHtml(info[3]);
	});
	return marker;
}


function limpaPontos(){
	for(i in g_pontos){
		map.removeOverlay(g_pontos[i]);
	}
}

function limpaCircles(){
	for(i in g_circles){
		map.removeOverlay(g_circles[i]);
	}
}

function decToRad(dec){
	return (2 * Math.PI) / 360;
}

function miToKm(mi){
	//1Mi = 1.609344Km
	//1KM = 0.621371192237Mi
	return mi * 1.609344;
}

function KmToMi(km){
	//1Mi = 1.609344Km
	//1KM = 0.621371192237Mi
	return km * 0.621371192237;
}


// addAddressToMap() is called when the geocoder returns an
// answer.  It adds a marker to the map with an open info window
// showing the nicely formatted version of the address and the country code.
function checkAddress(response) {
	map.clearOverlays();
	if (!response || response.Status.code != 200) {
		alert("Endereço não encontrado");
	} else {
		places = response.Placemark;
		if(places.length > 1){
			var divRes			= document.getElementById("result");
			var divResContent	= document.getElementById("resContent");
			var divResTop		= document.getElementById("resTop");
			var divResFooter	= document.getElementById("resFooter");
			
			if(divRes.style.display != "none") showResult();
			
			divResTop.getElementsByTagName("h2").item(0).innerHTML = "Voc&ecirc; quis dizer:";
			divResFooter.getElementsByTagName("h2").item(0).innerHTML = places.length +" endere&ccedil;os encontrados.";
			
			
			var itens = "";
			for(i=0; i < places.length; i++){
				place = places[i];
				itens += '<li><a href="#" onclick="findLocation(\''+place.address+'\')">'+place.address+'</a></li>';
			}
			divResContent.innerHTML = "<ul>" + itens + "</ul>";
		}else{
			place = places[0];
			document.getElementById("address").value = place.address;
			
			point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
			
			if(markerMain) map.removeOverlay(markerMain);
			map.setCenter(point, 13);
			
			// Create a lettered icon for this point using our icon class
			var letteredIcon = new GIcon(pointIcon);
			letteredIcon.image = "../imgs/seta.png";
			markerOptions = { icon:letteredIcon, draggable: true }; // Set up our GMarkerOptions object
			marker = new GMarker(point, markerOptions);
			
			GEvent.addListener(
				marker, 
				"dragstart", 
				function() {
					map.closeInfoWindow();
					limpaPontos();
				}
			);
	
			GEvent.addListener(
				marker,
				"click", 
				function() {
					var point = marker.getPoint();
					marker.openInfoWindowHtml(creatHTMLRaio(point.lng(), point.lat()));
				}
			);
	
			GEvent.addListener(
				marker,
				"dragend", 
				function() {
					var point = marker.getPoint();
					marker.openInfoWindowHtml(creatHTMLRaio(point.lng(), point.lat()));
				}
			);
			
			//Coloca o ponto na tela
			map.addOverlay(marker);
			marker.openInfoWindowHtml(creatHTMLRaio(point.lng(), point.lat()));
	
			markerMain = marker;
		}
	}
}

function showLocation() {
	var address = document.getElementById("address").value;
	geocoder.getLocations(address, checkAddress);
}

function findLocation(address) {
	document.getElementById("address").value = address;
	showLocation();
}



function showAddress(address) {
	if (geocoder) {
		geocoder.getLatLng(
			address,
			function(point) {
				if (!point) {
					alert(address + " não encontrado");
				} else {
					limpaPontos();

					if(markerMain) map.removeOverlay(markerMain);
					map.setCenter(point, 13);
					
					
					// Create a lettered icon for this point using our icon class
					var letteredIcon = new GIcon(pointIcon);
					letteredIcon.image = "../imgs/seta.png";
					markerOptions = { icon:letteredIcon, draggable: true }; // Set up our GMarkerOptions object
					
					var marker = new GMarker(point, markerOptions);
					GEvent.addListener(
						marker, 
						"dragstart", 
						function() {
							map.closeInfoWindow();
							limpaPontos();
						}
					);

					GEvent.addListener(
						marker,
						"click", 
						function() {
							var point = marker.getPoint();
							marker.openInfoWindowHtml(creatHTMLRaio(point.lng(), point.lat()));
						}
					);

					GEvent.addListener(
						marker,
						"dragend", 
						function() {
							var point = marker.getPoint();
							marker.openInfoWindowHtml(creatHTMLRaio(point.lng(), point.lat()));
						}
					);


					//Coloca o ponto na tela
					map.addOverlay(marker);
					marker.openInfoWindowHtml(creatHTMLRaio(point.lng(), point.lat()));

					markerMain = marker;
				}
			}
		);
	}
}


function drawCircle(lat, lng, radius, strokeColor, strokeWidth, strokeOpacity, fillColor, fillOpacity) {
	var d2r = Math.PI/180;
	var r2d = 180/Math.PI;
	var Clat = radius * 0.014483;  // Convert statute miles into degrees latitude
	var Clng = Clat/Math.cos(lat*d2r); 
	var Cpoints = []; 
	
	for (var i=0; i < 33; i++) { 
		var theta = Math.PI * (i/16); 
		Cy = lat + (Clat * Math.sin(theta)); 
		Cx = lng + (Clng * Math.cos(theta)); 
		var P = new GPoint(Cx,Cy); 
		Cpoints.push(P); 
	}

	var polygon = new GPolygon(Cpoints, strokeColor, strokeWidth, strokeOpacity, fillColor, fillOpacity);
	g_circles[g_circles.length] = polygon;
	map.addOverlay(polygon);
}


function creatHTMLRaio(lngSpan, latSpan){
	var myHTML = 'Qual a dist&acirc;ncia que os im&oacute;veis podem<br />estar do ponto inicial?<br/><form id="definiRaio"><select id="cboRaio" name="cboRaio"><option value="1">1 Km</option><option value="2">2 Km</option><option value="4">4 Km</option><option value="8">8 Km</option></select><input type="button" name="btnRAioOk" id="btnRaioOk" value="OK" onclick="buscaPontos('+lngSpan+', '+latSpan+')"></form>';
	var myHTML = 'Qual a dist&acirc;ncia que os im&oacute;veis podem<br />estar do ponto inicial?<br/><form id="definiRaio"><select id="cboRaio" name="cboRaio" style="width:183px;" onchange="buscaPontos('+lngSpan+', '+latSpan+')"><option value=""></option><option value="1">1 Km</option><option value="2">2 Km</option><option value="4">4 Km</option><option value="8">8 Km</option></select></form>';
	return myHTML;
}



function resizeApp(){
	for(i=0; i<2; i++){
		resize();
	}
}

function resize(){
	var divMapa = document.getElementById("map");
	var divRes = document.getElementById("result");
	var divTop = document.getElementById("top");
	var divPesq = document.getElementById("pesq");
	var divFooter = document.getElementById("footer");
	
	var hMapa = document.body.offsetHeight - (88 + 66 + 40);
	var hRes = hMapa - 58;
	wMapa = document.body.offsetWidth;
	if(divRes.style.display != "none")wMapa -= (235 - 14);

	divMapa.style.width = wMapa+"px";
	divMapa.style.height = hMapa+"px";
	divRes.style.height = hRes+"px";
}

function hidResult(){
	document.getElementById("showRes").style.display = "block";
	document.getElementById("result").style.display = "none";
	document.getElementById("map").style.left = 0;
	resizeApp();
}
function showResult(){
	document.getElementById("result").style.display = "block";
	document.getElementById("showRes").style.display = "none";
	document.getElementById("map").style.left = "221px";
	resizeApp();
}

//Coloca vrios pontos no mapa
function initialize2() {
	  if (GBrowserIsCompatible()) {
		var map = new GMap2(document.getElementById("map"));
		map.setCenter(new GLatLng(37.4419, -122.1419), 13);
 
		// Add 10 markers to the map at random locations
		var bounds = map.getBounds();
		var southWest = bounds.getSouthWest();
		var northEast = bounds.getNorthEast();
		var lngSpan = northEast.lng() - southWest.lng();
		var latSpan = northEast.lat() - southWest.lat();
		for (var i = 0; i < 10; i++) {
		  var latlng = new GLatLng(southWest.lat() + latSpan * Math.random(), southWest.lng() + lngSpan * Math.random());
		  map.addOverlay(new GMarker(latlng));
		}
	  }
	}

//Disponibiliza mapa, e terreno
function initialize3() {
  if (GBrowserIsCompatible()) {
	var map = new GMap2(document.getElementById("map"));
	map.setCenter(new GLatLng(37.4419, -122.1419), 13);
	var mapTypeControl = new GMapTypeControl();
	var topRight = new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(10,10));
	var bottomRight = new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(10,10));
	map.addControl(mapTypeControl, topRight);
	GEvent.addListener(map, "dblclick", function() {
	  map.removeControl(mapTypeControl);
	  map.addControl(new GMapTypeControl(), bottomRight);
	});
	map.addControl(new GSmallMapControl());
  }
}


//clica no ponto mostra informaes
function initialize4() {
  var message = ["This","is","the","secret","message"];
 
  if (GBrowserIsCompatible()) {
	var map = new GMap2(document.getElementById("map"));
	map.setCenter(new GLatLng(37.4419, -122.1419), 13);
  
	// Creates a marker at the given point
	// Clicking the marker will hide it
	function createMarker(latlng, number) {
	  var marker = new GMarker(latlng);
	  marker.value = number;
	  GEvent.addListener(marker,"click", function() {
		var myHtml = "<b>#" + number + "</b><br/>" + message[number -1];
		map.openInfoWindowHtml(latlng, myHtml);
	  });
	  return marker;
	}

	// Add 5 markers to the map at random locations
	// Note that we don't add the secret message to the marker's instance data
	var bounds = map.getBounds();
	var southWest = bounds.getSouthWest();
	var northEast = bounds.getNorthEast();
	var lngSpan = northEast.lng() - southWest.lng();
	var latSpan = northEast.lat() - southWest.lat();
	for (var i = 0; i < 5; i++) {
	  var latlng = new GLatLng(southWest.lat() + latSpan * Math.random(),
		southWest.lng() + lngSpan * Math.random());
	map.addOverlay(createMarker(latlng, i + 1));
	}
  }
}

//Busca as informaes do ponto clicado
function initialize5() {
  if (GBrowserIsCompatible()) {
  
	var map = new GMap2(document.getElementById("map"));
	map.setCenter(new GLatLng(37.88, -122.442626), 10);
	map.addControl(new GSmallMapControl());
	map.addControl(new GMapTypeControl());

	GEvent.addListener(map,"click", function(overlay,latlng) {
	  if (overlay) {
		// ignore if we click on the info window
		return;
	  }
	  var tileCoordinate = new GPoint();
	  var tilePoint = new GPoint();
	  var currentProjection = G_NORMAL_MAP.getProjection();
	  tilePoint = currentProjection.fromLatLngToPixel(latlng, map.getZoom());
	  tileCoordinate.x = Math.floor(tilePoint.x / 256);
	  tileCoordinate.y = Math.floor(tilePoint.y / 256);
	  var myHtml = "Latitude: " + latlng.lat() + "<br/>Longitude: " + latlng.lng() + 
		"<br/>The Tile Coordinate is:<br/> x: " + tileCoordinate.x + 
		"<br/> y: " + tileCoordinate.y + "<br/> at zoom level " + map.getZoom();	
	  map.openInfoWindow(latlng, myHtml);
	});
  }
}



