var obj_markers = new Array();
var ini;
var tipoSelected;

var tipoMap = G_NORMAL_MAP;

var loader = document.createElement('div');
loader.innerHTML = '<div style="text-align:center"><img src="http://www.elinmobiliario.com/images/imgPreload.gif"></div>';

function in_array(arr,val)
{
	for(var j in arr){ 
        if(arr[j]==val)
            return true; 
    } 
    return false;
}

function cargarTipo(id,id_reg,tiporeg)
{
	if(obj_markers[id])
	{
		if(id_reg)
			txtreg = '&id_reg='+id_reg+'&tiporeg='+tiporeg;
		else
			txtreg = '';
		var req = new Request.HTML({url:'data.php?te='+id+txtreg, 
			onSuccess: function(tree,elem,html,js) {
				$('resultado2').set('text', '');
				$('resultado2').adopt(tree);
				document.getElementById('outer_more').style.display = 'block';
				eval(js);
				informaEstado();
				if(id_reg)
					showMarkers(obj_markers[id],id_reg,tiporeg);
				else
					showMarkers(obj_markers[id]);
				tipoSelected = id;
			},
			onFailure: function() {
				$('resultado2').set('text', 'Requerimiento Fallido');
			}
		});
		req.send();
	}else{
		cargarMarkers(id,id_reg,tiporeg);
	}
}

function showMarkers(markers,id_reg,tiporeg){
		GUnload();

		map = new GMap2(document.getElementById("map"));
		
		GEvent.addListener(map, "moveend", fincoords);
		GEvent.addListener(map, "zoomend", fincoords);
        map.addControl(new GLargeMapControl3D(),new GControlPosition(G_ANCHOR_TOP_LEFT,new GSize(10,10))); //new GSize(20,40)

		map.addControl(new GMapTypeControl(),new GControlPosition(G_ANCHOR_TOP_RIGHT,new GSize(10,10))); //new GSize(20,20)
		map.enableScrollWheelZoom();
		
		//if(desarrollo)
		//	map.addControl(new MoreControl());

		var lat = latmx = latmn = 0;
		var lon = lonmx = lonmn = 0;
		corcount = 0;
		var i = 0;
		for(id in markers) 
		{
			if((markers[id].i_r == id_reg && markers[id].t_r == tiporeg) || (id_reg == "" && tiporeg=="") || (!id_reg  && !tiporeg))
			{
				if(markers[id].la && markers[id].lo)
				{
				latmx = (markers[id].la>latmx||latmx==0)?markers[id].la:latmx;
				latmn = (markers[id].la<latmn||latmn==0)?markers[id].la:latmn;
				lonmx = (markers[id].lo>lonmx||lonmx==0)?markers[id].lo:lonmx;
				lonmn = (markers[id].lo<lonmn||lonmn==0)?markers[id].lo:lonmn;
				lat = lat + markers[id].la;
				lon = lon + markers[id].lo;
				corcount = corcount + 1;
				}
			}
		}
		latdif = latmx - latmn;
		londif = lonmx - lonmn;

		centerLatitude = (latmx + latmn)/2;
		centerLongitude = (lonmx + lonmn)/2;
		var cordif0 = cordif1 = "";
		cordif = (Math.abs(latdif)>Math.abs(londif))?Math.round(Math.abs(latdif)):Math.round(Math.abs(londif));
		switch(cordif)
		{
			case 0:
				cordif0 = (Math.abs(latdif)>Math.abs(londif))?Math.abs(latdif):Math.abs(londif);
				if(cordif0<0.25){startZoom = (cordif0<0.15)?12:11}
				else{startZoom = 10};
				break;
			case 1:
				cordif1 = (Math.abs(latdif)>Math.abs(londif))?Math.abs(latdif):Math.abs(londif);
				if(cordif1<0.70){startZoom = (cordif1<0.60)?11:10}
				else
				startZoom = 9;
				break;
			case 2:
				startZoom = 8;
				break;
			case 3: case 4: case 5:
				startZoom = 7;
				break;
			case 6: case 7: case 8: case 9: case 10:
				startZoom = 6;
				break;
			case 11: case 12: case 13: case 14:
				startZoom = 6;
				break;
			default:
				startZoom = 3;
				break;
		}
		
		
		
		if(cordif>50)
		startZoom = 2;
		
		map.setCenter(new GLatLng(centerLatitude, centerLongitude), startZoom, G_NORMAL_MAP);
		for(id in markers) 
		{
			if((markers[id].i_r == id_reg && markers[id].t_r == tiporeg) || (id_reg == "" && tiporeg=="") || (!id_reg  && !tiporeg))
			{
				var d="";
				if(markers[id].la && markers[id].lo)
				addMarker(markers[id].id,markers[id].la, markers[id].lo, d, markers[id].t);
			}
			cargar_extras();
		}
		//estas dos lineas para salvar un bug de IE.
		window.map.checkResize();
		map.setCenter(new GLatLng(centerLatitude, centerLongitude), startZoom, tipoMap);
}

var marker = [];

function addMarker(id,latitude, longitude, description, tipoe) {
	var icon = new GIcon();
	if(document.getElementById('flecha_'+tipoe))
		icon.image = document.getElementById('flecha_'+tipoe).src;
	else
	{
		if(in_array(Arrdestacados,id))
		{
			icon.image = imgNoDestacado;
			icon.shadow = "";
			//icon.iconSize = new GSize(25, 23);
			icon.iconSize = new GSize(33, 31);
			//icon.iconAnchor = new GPoint(0, 23);
			icon.iconAnchor = new GPoint(0, 31);
			icon.infoWindowAnchor = new GPoint(18, 10);
			icon.infoShadowAnchor = new GPoint(18, 25);
		}
		else
		{
			icon.image = "http://www.elinmobiliario.com/maps/css/noseleccionado.png";
			icon.shadow = "";
			icon.iconSize = new GSize(33, 32);
			icon.iconAnchor = new GPoint(0, 32);
			icon.infoWindowAnchor = new GPoint(18, 10);
			icon.infoShadowAnchor = new GPoint(18, 25);

		}
	}
//	icon.image = "http://www.elinmobiliario.com/maps/css/noseleccionado.png";
	/*
	icon.shadow = "";
	icon.iconSize = new GSize(33, 32);
	icon.iconAnchor = new GPoint(0, 32);
	icon.infoWindowAnchor = new GPoint(18, 10);
	icon.infoShadowAnchor = new GPoint(18, 25);
	*/
	marker[id] = new Array(new GMarker(new GLatLng(latitude, longitude),icon),description,tipoe);
    GEvent.addListener(marker[id][0], 'click',
        function() {
			clickear(id);
			//marker[id][0].openInfoWindowHtml(marker[id][1]);
			//map.updateInfoWindow();
			//cargamosContenido(id);
        }
    );
	GEvent.addListener(marker[id][0], 'infowindowclose',
        function() {
			ForzarNormal(id);
        }
    );
	GEvent.addListener(marker[id][0], 'mouseover',
		function() {
                destacar(id);
				posicionar(id);
        }
	);
	GEvent.addListener(marker[id][0], 'mouseout',
		function() {
                normal(id);
        }
	);
    map.addOverlay(marker[id][0]);
}

window.onunload = GUnload;

function cambiaRegion(id_reg,tiporeg)
{
	$('tipo_selected').set('html','Buscando...');
	$('link_tipos').set('html','');
	var req = new Request.HTML({url:'regiones.php?id_reg='+id_reg+'&tiporeg='+tiporeg+'&tipoSel='+tipoSelected, 
		onSuccess : function(tree,elem,html,js) {
			$('link_tipos').set('html',html);
			eval(js);
			informaEstado();
		},
		onFailure: function() {
			$('resultado2').set('text', 'Requerimiento Fallido');
		}
	});
	$('resultado2').set('html', '<div style="text-align:center"><img src="http://www.elinmobiliario.com/images/imgPreload.gif"></div>');
	$('map').set('html', '<div style="text-align:center;padding-top:100px"><img src="http://www.elinmobiliario.com/images/imgPreload.gif"></div>');
	document.getElementById('outer_more').style.display = 'none';
	document.getElementById('map').style.backgroundColor = '#ffffff';
	req.send();
}

function centrar(centerLatitude, centerLongitude, id){
//marker[id][0].openInfoWindowHtml(marker[id][1]);
//map.updateInfoWindow();
//cargamosContenido(id);
clickear(id);
}
var gx=[];

function cargarkml(id,val){
	var latA = map.getBounds().getNorthEast().lat();
	var lonA = map.getBounds().getNorthEast().lng();
	var latB = map.getBounds().getSouthWest().lat();
	var lonB = map.getBounds().getSouthWest().lng();
	var str = "&latA="+latA+"&lonA="+lonA+"&latB="+latB+"&lonB="+lonB;
	eval("aux = gx."+id);
	if(aux)
		map.removeOverlay(aux);
	var latlng = new GLatLng(map.getBounds().getNorthEast().lat() - map.getBounds().getSouthWest().lat(),map.getBounds().getNorthEast().lng() - map.getBounds().getSouthWest().lng()).toUrlValue();
	eval('gx.'+id+' = new GGeoXml("http://www.elinmobiliario.com/maps/kml.gen1.php?id="+id+"&center="+map.getCenter().toUrlValue()+"&zoom="+map.getZoom()+"&latlng="+latlng+str)');
map.addOverlay(eval("gx."+id));
}

function borrarkml(id)
{
	eval("aux = gx."+id+";");
	if(aux)
	{
		map.removeOverlay(aux);
	}
}

function toggle(obj)
{
	if(obj.checked)
		cargarkml(obj.id, obj.value);
	else
		borrarkml(obj.id);	
}

function cargarMarkers(id,id_reg,tiporeg)
{
	param = (id)?"?te="+id:"";
	var req = new Request.HTML({url:'map_data.php'+param, 
		onComplete : function(tree,elem,html,js1) {
			eval(js1);
			if(id_reg)
			{
				cargarTipo(id,id_reg,tiporeg);
			}else
			{
				cargarTipo(id);
			}
			
		},
		//Our request will most likely succeed, but just in case, we'll add an
		onFailure: function() {
			alert('se produjo un error');
		},
		onRequest: function() {
			if(document.getElementById('resultado2'))
			document.getElementById('resultado2').innerHTML = '<div style="text-align:center;padding-top:100px"><img src="http://www.elinmobiliario.com/images/imgPreload.gif"></div>';
			document.getElementById('map').innerHTML = '<div style="text-align:center;padding-top:100px"><img src="http://www.elinmobiliario.com/images/imgPreload.gif"></div>';
			document.getElementById('outer_more').style.display = 'none';
			document.getElementById('map').style.backgroundColor = '#ffffff';
		}
	});
	req.send();
}

function destacar(id)
{
	if(id!="")
	{
	var mark = marker[id][0];
	if(in_array(Arrdestacados,id))
		mark.setImage(imgDestacado);
	else
		mark.setImage('http://www.elinmobiliario.com/maps/css/seleccionado.png');
	document.getElementById('lista_'+id).style.border='#ff9900 solid 3px';
	}
}

function normal(id)
{
	if(id!=clicked)
	{
		var mark = marker[id][0];
		if(document.getElementById('flecha_'+marker[id][2]))
			mark.setImage(document.getElementById('flecha_'+marker[id][2]).src);
		else
		{
			if(in_array(Arrdestacados,id))
				mark.setImage(imgNoDestacado);
			else
				mark.setImage('http://www.elinmobiliario.com/maps/css/noseleccionado.png');
		}
		if(document.getElementById('lista_'+id))
		document.getElementById('lista_'+id).style.border='#f0f0f0 solid 3px';
	}
}

function ForzarNormal(id)
{
		var mark = marker[id][0];
		marker[id][0].closeInfoWindow(marker[id][1]);
		if(in_array(Arrdestacados,id))
			mark.setImage(imgNoDestacado);
		else
			mark.setImage('http://www.elinmobiliario.com/maps/css/noseleccionado.png')
		document.getElementById('lista_'+id).style.border='#f0f0f0 solid 3px';
		clicked="";
}

var clicked = "";
function clickear(id, detener)
{
	
	if(clicked == id)
	{
		if(Zoom==2)
		{	map.zoomOut();Zoom ="";return false;}
		else if(Zoom==1)
		{	map.zoomIn();Zoom ="";return false;}
		ForzarNormal(id);
		return false;
	}	
	if(Zoom==2)
		map.zoomOut();
	else if(Zoom==1)
		map.zoomIn();
	Zoom ="";
	//marker[id][0].openInfoWindowHtml(marker[id][1]);
	//map.updateInfoWindow();
	if(detener==undefined)
	cargamosContenido(id);
	destacar(id);
	clicked = id;
	for(ids in marker)
		if(/^\d\d*$/.test(ids) && ids!=id)normal(ids);
	
}

function findPosY(obj) {
    var curtop = 0;
    if (obj.offsetParent) {
        while (1) {
            curtop+=obj.offsetTop;
            if (!obj.offsetParent)
                break;
            obj=obj.offsetParent;
        }
    } else if (obj.y)
        curtop+=obj.y;
    return curtop;
}

function posicionar(id)
{
	document.getElementById('lista_'+id).parentNode.parentNode.scrollTop = findPosY(document.getElementById('lista_'+id))-findPosY(		document.getElementById('lista_'+id).parentNode);
}

function acomodarmapa()
{
	var al = window.innerHeight ? window.innerHeight -10 : document.documentElement.clientHeight ? document.documentElement.clientHeight - 25 : document.body.clientHeight- 25;
	document.getElementById('map').style.height = (al - document.getElementById('map').offsetTop) +"px";
}

function cargar_extras(){
		var objs = document.getElementById('extras').childNodes;
		var l = objs.length;
		for(var i=0;i<l;i++)
			if(objs[i].type=="checkbox" && objs[i].checked) cargarkml(objs[i].id, objs[i].value);
		inicoords();
	}
	
function inicoords(){
	ini = map.getCenter();
}

function fincoords(){
	if(ini && map.getCenter().distanceFrom(ini)>15000)
			cargar_extras();
}

function contraer()
{
	
	var div = document.getElementById('map');
	var div1 = document.getElementById('separador');
	var div2 = document.getElementById('tiposempr');
	var div3 = document.getElementById('contenedor_map');
	if(div3.style.width<'99%')
	{
		div.style.width = '100%';
		div3.style.width = '99%';
		div1.style.left = '99%';
		div1.style.background = 'url(http://www.elinmobiliario.com/maps/css/contrae.png) 50% 50% no-repeat';
		div2.style.display = 'none';
	}else{
		div.style.width = '100%';
		div3.style.width = '69%';
		div1.style.left = '69%';
		div1.style.background = 'url(http://www.elinmobiliario.com/maps/css/expande.png) 50% 50% no-repeat';
		div2.style.display = '';
	}
	window.map.checkResize();
}

function informaEstado()
{
	
	var est = document.getElementById('estado');
	var reg = document.getElementById('region_selected').innerHTML;
	var tip = document.getElementById('tipo_selected').innerHTML;
	est.innerHTML = 'Est&aacute;s viendo: '+((tip!='Buscando...')?tip:'')+((reg.indexOf('Lugares')<0)?' en '+reg:'');
	est.style.visibility = 'visible';
}
var Zoom="";

function zoom(id,i)
{
	Zoom = i;
	clickear(id);
}


// PRUEBAS
// PRUEBAS
// PRUEBAS
// PRUEBAS
// PRUEBAS
// PRUEBAS

var chosen = [];
 
/* Array of GLayers
 * The 'name' property is not being used here
*/
var layers = [
 { name: "Pano", obj: new GLayer("com.panoramio.all") },
 { name: "Tube", obj: new GLayer("com.youtube.all") },
 { name: "Wiki", obj: new GLayer("org.wikipedia.en") },
 { name: "Cams", obj: new GLayer("com.google.webcams") }
];


function hideAll() {
 
 var boxes = document.getElementsByName("mark");
 for(var i = 0; i < boxes.length; i++) {
  if(boxes[i].checked) {
   boxes[i].checked = false;
   switchLayer(false, layers[i].obj);
   chosen.push(i);
  }
 }
}
 
 
function checkChecked() {
 
 /* Returns true if a checkbox is still checked
 *  otherwise false
 */
 var boxes = document.getElementsByName("mark");
 for(var i = 0; i < boxes.length; i++) {
  if(boxes[i].checked) return true;
 }
 return false;
}
 
function showLayerbox() {
	document.getElementById("box").style.display = "block";
	var button = document.getElementById("more_inner");
	button.style.borderBottomWidth = "4px";
	button.style.borderBottomColor = "white";
}
 
 
function setClose() {
 var layerbox = document.getElementById("box");
 var button = document.getElementById("more_inner");
 //var bottomColor = checkChecked() ? "#6495ed" : "#c0c0c0";
  layerbox.style.display = "none";
  button.style.borderBottomWidth = "1px";
  button.style.borderBottomColor = "#000000";
}

function cambiaTipoDesa(tipo)
{
	var req = new Request.HTML({url:'tipoDesa.php?tipo='+tipo, 
		onSuccess: function(tree,elem,html,js) {
			eval(js);
			//informaEstado();
		},
		onFailure: function() {
			alert('Requerimiento Fallido');
		}
	});
	
	req.send();
}



