var map;
var tamanho_mapa = 0;	
var tamanho_mapa2 = 0;	
var IsCompatible = false;
var point;
var markers;
var tooltip;
var regular_icon;
var bold_icon;
var hospital_icon;
var escola_icon;
var faculdade_icon;
var rent_icon;
var info_click;

function prepare_map(drag) {
	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("map"));
		map.setCenter (new GLatLng(37.4419, -122.1419),13);
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
		// map.addControl(new GScaleControl());		
		// map.addControl(new GOverviewMapControl());
		
		drag = typeof(drag)=="undefined" ? true : drag;

		if(drag){
			GEvent.addListener(map,"dragend",function(){
					map.clearOverlays();
					markers = [];
					var loc		= mapa_arrastado(map.getBounds());
					var order	= get_order_url();
					var page_s	= "&page="+page;
					var bold		= document.getElementById("destaque");
					var custom	= custom_filters.length>0 ? "&"+custom_filters.join("&") : "";
					if(bold){
						var remove	= bold.getElementsByTagName("div")[0];
						remove.id	= 0;
					}
					location.href	= baseurl+"#"+loc+page_s+order+custom;
					update(query_locations()+loc+page_s+order+custom);
			});
		}

		tooltip = document.createElement("div");
		tooltip.id = "tooltip";
		tooltip.style.visibility="hidden";
		map.getPane(G_MAP_FLOAT_PANE).appendChild(tooltip);

		info_click = document.createElement("div");
		info_click.id = "info_click";
		info_click.style.visibility="hidden";
		info_click.onclick	= function(){ this.style.visibility="hidden"; }
		document.body.appendChild(info_click);

		var iwanchor = new GPoint(5,1);
		var ianchor  = new GPoint(10,33);
		
		regular_icon = new GIcon(G_DEFAULT_ICON);
 		regular_icon.iconSize = new GSize(27,33);
		regular_icon.image = "http://www.vericia.com/static/intro4.gif";
		regular_icon.infoWindowAnchor = iwanchor;
		regular_icon.iconAnchor = ianchor;

		rent_icon = new GIcon(G_DEFAULT_ICON);
 		rent_icon.iconSize = new GSize(27,33);
		rent_icon.image = "http://www.vericia.com/static/img/vericia_roxo.gif";
		rent_icon.infoWindowAnchor = iwanchor;
		rent_icon.iconAnchor = ianchor;

		bold_icon = new GIcon(G_DEFAULT_ICON);
 		bold_icon.iconSize = new GSize(27,33);
		bold_icon.image = "http://www.vericia.com/static/img/vericia_amarelo.png";
		bold_icon.infoWindowAnchor = iwanchor;
		bold_icon.iconAnchor = ianchor;

		hospital_icon = new GIcon(G_DEFAULT_ICON);
 		hospital_icon.iconSize = new GSize(25,25);
		hospital_icon.image = "http://www.vericia.com/static/img/hospital.png";
		hospital_icon.infoWindowAnchor = iwanchor;
		hospital_icon.iconAnchor = ianchor;

		escola_icon = new GIcon(G_DEFAULT_ICON);
 		escola_icon.iconSize = new GSize(25,25);
		escola_icon.image = "http://www.vericia.com/static/img/escola.png";
		escola_icon.infoWindowAnchor = iwanchor;
		escola_icon.iconAnchor = ianchor;

		faculdade_icon = new GIcon(G_DEFAULT_ICON);
 		faculdade_icon.iconSize = new GSize(25,25);
		faculdade_icon.image = "http://www.vericia.com/static/img/faculdade.png";
		faculdade_icon.infoWindowAnchor = iwanchor;
		faculdade_icon.iconAnchor = ianchor;

		IsCompatible = true;

		GEvent.addListener(map,"load",map_loaded());
	}else{
		alert("Não compatível com o mapa!");
	}
}

function create_info_for_marker(id,addr,val,img,feat){
	var contents = "";
	contents += "<table width='100%' height='107'>";
	contents += "<tr><td width='200' colspan='2'><a href='/imovel/"+id+"'>"+addr+"</a></td>";
	contents += "<td><a href='javascript:onclick=close_info_window();'><img src='http://images.trulia.com/images/map/iwindow/close_bubble.png'></a></td></tr>";
	contents += "<tr><td width='54'><img src='"+img+"' height='50' style='border:1px solid gray;padding:1px;'/></td><td><b>"+val+"</b><br/>"+addr+"<br/>"+feat+"</td></tr>";
	contents += "<tr><td colspan='2'><a href='/imovel/"+id+"' class='more'>Mais detalhes</a></td></tr>";
	contents += "</table>";
	return contents;
}

function close_info_window(){
	info_click.style.visibility = "hidden";
}

function create_marker(id,lat,lon,addr,val,img,feat,type){
	try {
		var marker = new GMarker(new GLatLng(lat,lon),{icon:type,zIndexProcess:function(){ return (type==bold_icon?10:1)*10; }});

		GEvent.addListener(marker, "click", function() {
			try {
				if(type!=bold_icon && type!=regular_icon)
					return;
				pos	= {"00":[1,-31,0],"10":[2,-221,0],"01":[3,-31,-145],"11":[4,-221,-145]};
				mapd	= find_pos(map.getContainer().id);
				ms		= map.getSize();
				mp		= map.fromLatLngToContainerPixel(marker.getLatLng());
				px		= Math.floor(mp.x/(ms.width/2));
				py		= Math.floor(mp.y/(ms.height/2));
				pq		= String(px)+String(py);
				sec	= pos[pq][0];
				dx		= pos[pq][1];
				dy		= pos[pq][2];
				tooltip.style.visibility		= "hidden";
				info_click.style.visibility	= "visible";
				info_click.style.left			= mapd[0] + mp.x + dx + "px";
				info_click.style.top				= mapd[1] + mp.y + dy + "px";
				info_click.style.background	= "transparent url(http://wstatic.vericia.com/static/img/detail.gif) "+((sec-1)*-252)+"px 0px";
				info_click.innerHTML				= create_info_for_marker(id,addr,val,img,feat);
				info_click.style.padding		= sec<=2 ? "10px 0 0 0" : "0";
			}catch(e){
				alert("Erro recuperando os dados no clique:"+e);
			}
		});

		GEvent.addListener(marker, "mouseover", function() {
			try {
				if(type==bold_icon){
					var latlng = marker.getLatLng();
					if(latlng.x!=0 && latlng.y!=0)
						map.panTo(latlng);
				}
				tooltip.innerHTML = addr+"<br/>"+val;
				var mp	= map.fromLatLngToContainerPixel(marker.getLatLng());
				var pos	= new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(mp.x,mp.y));
				pos.apply(tooltip);
				tooltip.style.visibility = "visible";
				if(type!=bold_icon && type!=regular_icon)
					return;
				if(type!=bold_icon)
					marker.setImage(bold_icon.image);
			}catch(e){
				alert("Erro recuperando os dados sobre o ponto:"+e);
			}
		});

		GEvent.addListener(marker, "mouseout", function() {
			try {
				tooltip.style.visibility = "hidden";
				if(type!=bold_icon && type!=regular_icon)
					return;
				if(type!=bold_icon)
					marker.setImage(regular_icon.image);
			}catch(e){
				alert("Erro limpando os dados");
			}
		});
		return marker;
	}catch(e){
		alert("ERRO ADICIONANDO MARKER: "+e);
	}
}

function add_marker(id,marker){
	if(!marker)
		return;
	markers[id] = marker;
	map.addOverlay(marker);
}

function click_marker(id){
	marker = markers[id];
	if(!marker)
		return;
	GEvent.trigger(marker,"click");
}

function over_marker(id){
	marker = markers[id];
	if(!marker)
		return;
	GEvent.trigger(marker,"mouseover");
}

function out_marker(id){
	marker = markers[id];
	if(!marker)
		return;
	GEvent.trigger(marker,"mouseout");
}

function center_map(){
	map.checkResize();
	map.panTo(point);
}

function redimensiona_mapa(){
	var themap	= document.getElementById("map");
	var sizemap	= document.getElementById("tamanhomapa");
	var thelink	= document.getElementById("redimensiona_mapa");
	var sizes	= [[764,500],[298,280]];
	var classes	= ["bullet2","bullet"];
	var size		= sizes[thelink.innerHTML=="Amplia mapa" ? 0 : 1];
	var classl	= classes[thelink.innerHTML=="Amplia mapa" ? 0 : 1];
	thelink.innerHTML		= thelink.innerHTML=="Amplia mapa" ? "Reduz mapa" : "Amplia mapa";
	thelink.className		= classl;
	sizemap.style.width	= size[0]+"px";
	themap.style.height	= size[1]+"px";
	center_map();
}

function EOffsetBearing(point,dist,bearing) {
	var latConv = point.distanceFrom(new GLatLng(point.lat()+0.1,point.lng()))*10;
	var lngConv = point.distanceFrom(new GLatLng(point.lat(),point.lng()+0.1))*10;
	var lat=dist * Math.cos(bearing * Math.PI/180)/latConv;
	var lng=dist * Math.sin(bearing * Math.PI/180)/lngConv; 
	return new GLatLng(point.lat()+lat,point.lng()+lng)      
}

function raios(point,dist){
	// var angulos = [135,315];
	var angulos = [45,225];
	var pontos	= [];
	for(var i=0; i<angulos.length;i++)
		pontos.push(EOffsetBearing(point,dist,angulos[i]));
	return pontos;
}

function pega_coordenadas(dist,point){
	var points	= raios(point,dist);
	var lats		= [];
	var lngs		= [];
	for(var i=0; i<points.length; i++){
		lats.push(points[i].lat());
		lngs.push(points[i].lng());
		np = new GLatLng(points[i].lat(),points[i].lng());
		// alert(point.distanceFrom(np));
	}
	return "latitude="+lats.join(",")+"&longitude="+lngs.join(",");
}

function mapa_arrastado(bounds){
	var p1	= bounds.getNorthEast();
	var p2	= bounds.getSouthWest();
	var lats = [p1.lat(),p2.lat()];
	var lngs = [p1.lng(),p2.lng()];
	var str	= "latitude="+lats.join(",")+"&longitude="+lngs.join(",");
	return str;
}
