//variables globales
var geocoder; // un objeto GClientGeocoder
var map; //mapa
var mgr; //manager de puntos
var mgr2;
var datos; //datos de las galerias visibles
var lista=[]; //lista con los puntos del mapa, nos permite lanzar el evento de globo al pulsar en la lista
var status;

var sliderPrecioMinLimite=0;
var sliderPrecioMaxLimite=1000000;
var sliderSuperficieMinLimite=0;
var sliderSuperficieMaxLimite=1000;
var sliderHabitacionesMinLimite=0;
var sliderHabitacionesMaxLimite=7;
var sliderPrecioMin=0;
var sliderPrecioMax=1000000;
var sliderSuperficieMin=0;
var sliderSuperficieMax=1000;
var sliderHabitacionesMin=0;
var sliderHabitacionesMax=7;
var categoriaActual=1007;
var textoActual="";
var textoAnterior="";
var mapaReady=false;
var finInicio=false;
var intervaloPrecio=20000;
var intervaloSuperficie=5;
var intervaloHabitaciones=1;
var latitudInicial=40.4167413;
var longitudInicial=-3.7032498;
var zoomInicial = 6;

var zoomProvincia = 9;
var zoomPoblacion = 14;
var zoomCasa = 16;
var itemsListado = 7;
var filaMapaGrupo;
var filaMapaAnuncio;
var paginaActual = 1;
var totalPaginas = 1;
var puntoActual = -1;

var listarItems = 25;
var listarInicioItems = 0;


//-- funcion que se carga al terminar de cargar la pagina ---
$(document).ready(function(){

  filaMapaGrupo = document.createElement('div');
  filaMapaGrupo.innerHTML = $('.filaMapaGrupo')[0].innerHTML;
  filaMapaAnuncio = document.createElement('div');
  filaMapaAnuncio.innerHTML = $('.filaMapaAnuncio')[0].innerHTML;

  status = document.getElementById('statusSpan');
  status.innerHTML = "Iniciando...";

  $("#listado")[0].innerHTML = "";

  var api='ABQIAAAAL0_cjPuLch0ovba2MtZTJhSVUfJNzhS0kL13gynv-YYOBmuouBR3wvC2dqE-YHXhrGDflkBAnBbO1w';
  $.getScript('http://maps.google.com/maps?file=api&v=2.x&key='+api+'&async=2&callback=cargarManagerPuntos');

});

function irA()
{
	quitarSeleccion();
	centrarMapa($('#buscarMapa')[0].value,zoomPoblacion);
}

function irAlOtroMapa(destino)
{
	var coordenadas = map.getCenter();
	window.location = destino+"?zoomOtroMapa="+map.getZoom()+"&latitudOtroMapa="+coordenadas.lat()+"&longitudOtroMapa="+coordenadas.lng();
}

function actualizarTexto(obj)
{
	mapaReady = true;
	textoActual = obj.value;
	quitarSeleccion();
	window.setTimeout("actualizarTextoEspera('"+obj.value+"');",500);

}

function actualizarTextoEspera(valor)
{



if((valor == textoActual)&&(textoAnterior != valor))
	{

	actualizarAnuncios();
	textoAnterior = textoActual;

	}

}

function inicializarSliders()
{

  $("#desplazadorPrecio").slider({range:true, slide: actualizarPrecioSlider, change: actualizarAnuncios, min:sliderPrecioMinLimite, max:sliderPrecioMaxLimite, step:intervaloPrecio});
  $("#desplazadorPrecio").slider('values', 0, sliderPrecioMin);
  $("#desplazadorPrecio").slider('values', 1, sliderPrecioMax);
  $(".precioMin")[0].innerHTML = sliderPrecioMin;
  $(".precioMax")[0].innerHTML = sliderPrecioMax;

  $("#desplazadorSuperficie").slider({range:true, slide: actualizarSuperficieSlider, change: actualizarAnuncios, min:sliderSuperficieMinLimite, max:sliderSuperficieMaxLimite, step:intervaloSuperficie});
  $("#desplazadorSuperficie").slider('values', 0, sliderSuperficieMin);
  $("#desplazadorSuperficie").slider('values', 1, sliderSuperficieMax);
  $(".superficieMin")[0].innerHTML = sliderSuperficieMin;
  $(".superficieMax")[0].innerHTML = sliderSuperficieMax;

  $("#desplazadorHabitaciones").slider({range:true, slide: actualizarHabitacionesSlider, change: actualizarAnuncios, min:sliderHabitacionesMinLimite, max:sliderHabitacionesMaxLimite, step:intervaloHabitaciones});
  $("#desplazadorHabitaciones").slider('values', 0, sliderHabitacionesMin);
  $("#desplazadorHabitaciones").slider('values', 1, sliderHabitacionesMax);
  $(".habitacionesMin")[0].innerHTML = sliderHabitacionesMin;
  $(".habitacionesMax")[0].innerHTML = sliderHabitacionesMax;

}



function actualizarPrecioSlider(ev,iu)
{

 if(finInicio)
 	mapaReady = true;

 valor = iu.value;
 if($("#desplazadorPrecio").slider('values', 0) == sliderPrecioMin )
 	sliderPrecioMax = valor;
 	else
 		sliderPrecioMin = valor;

 $(".precioMin")[0].innerHTML = sliderPrecioMin;
 $(".precioMax")[0].innerHTML = sliderPrecioMax;
}

function actualizarSuperficieSlider(ev,iu)
{

 if(finInicio)
 	mapaReady = true;

 valor = iu.value;
 if($("#desplazadorSuperficie").slider('values', 0) == sliderSuperficieMin )
 	sliderSuperficieMax = valor;
 	else
 		sliderSuperficieMin = valor;

 $(".superficieMin")[0].innerHTML = sliderSuperficieMin;
 $(".superficieMax")[0].innerHTML = sliderSuperficieMax;
}

function actualizarHabitacionesSlider(ev,iu)
{

 if(finInicio)
 	mapaReady = true;

 valor = iu.value;

 if($("#desplazadorHabitaciones").slider('values', 0) == sliderHabitacionesMin )
 	sliderHabitacionesMax = valor;
 	else
 		sliderHabitacionesMin = valor;

 $(".habitacionesMin")[0].innerHTML = sliderHabitacionesMin;
 $(".habitacionesMax")[0].innerHTML = sliderHabitacionesMax;

}

function quitarSeleccion()
{
	mapaReady = true;
}

function actualizarAnuncios()
{


	if(mapaReady==true)
	{

	status.innerHTML = "Cargando nuevos puntos...";

	var coordenadas = map.getBounds();
	var p1=coordenadas.getSouthWest();
	var p2=coordenadas.getNorthEast();

	var datos = {texto:textoActual,categoria:categoriaActual,precioIni:sliderPrecioMin,precioFin:sliderPrecioMax,
				superficieIni:sliderSuperficieMin,superficieFin:sliderSuperficieMax,
				habitacionesIni:sliderHabitacionesMin,habitacionesFin:sliderHabitacionesMax,
				p1x:p1.lng(),p1y:p1.lat(),p2x:p2.lng(),p2y:p2.lat()};

	cargarAnuncios(datos);

	}

	if(puntoActual != -1)
		mapaReady=true;

}

function cargarAnuncios(datos)
	{


	var zoom = map.getZoom();

	if (zoom < zoomProvincia)
		$.post("mapaRequest.php?tipo=listarProvincias",datos,cargarPuntosAjax,"json");
		else if (zoom < zoomPoblacion)
			$.post("mapaRequest.php?tipo=listarPoblaciones",datos,cargarPuntosAjax,"json");
			else
				$.post("mapaRequest.php?tipo=listar",datos,cargarPuntosAjax,"json");


	}
	
	
function cargarUsuarios()
	{

	$.post("mapaRequest.php?tipo=listarUsuarios","",cargarUsuariosAjax,"json");

	}


//-- funcion que carga al manager de puntos y acto seguido carga al mapa ---
function cargarManagerPuntos()
{
	valoresIniciales();
	inicializarSliders();
	$.getScript('http://gmaps-utility-library.googlecode.com/svn/trunk/markermanager/release/src/markermanager.js',cargarMapa);
}

//-- funcion que carga el mapa ---
function cargarMapa(){

      map = new GMap2(document.getElementById("mapa"));
      map.setCenter(new GLatLng(latitudInicial, longitudInicial),zoomInicial);
	  map.addControl(new GLargeMapControl());

   //iniciamos los listeners
   	  listenersMapa();

   //iniciamos utilidades de googleMaps
      geocoder = new GClientGeocoder(); //creamos un objeto GClientGeocoder
      var mgrOptions = { borderPadding: 100, maxZoom: 15, trackMarkers: false };
	  mgr = new MarkerManager(map,mgrOptions);
	  mgr2 = new MarkerManager(map,mgrOptions);
   	  icono = crearIcono();

   //cargarmos los usuarios -publicidad-
   	  cargarUsuarios();
	
   //creamos puntos;
   	  mapaReady=true;
   	  actualizarAnuncios();
   	  

}

//-- funcion que activa los diferentes listeners ---
function listenersMapa()
{
 	GEvent.addListener(map, "moveend", actualizarAnuncios);
	GEvent.addListener(map, "zoomend", actualizarAnuncios);
	GEvent.addListener(map, "dragstart", quitarSeleccion);
}


function actualizarCategoria(obj)
{
	mapaReady = true;
	categoriaActual = obj.value;
	actualizarAnuncios();
}


//-- funcion que recoje los datos enviados por ajax, los parsea y escribe los nuevos puntos ---
function cargarPuntosAjax(datosDevueltos)
{

	status.innerHTML = "Parseando nueva informacion...";


	datos = datosDevueltos;
	lista=[];
	listaTmp=[];
  	var icono1 = crearIconoTams("imagenes/mapa/ico.png",25,32);
  	var icono2 = crearIconoTams("imagenes/mapa/ico2.png",25,32);
  	var icono3 = crearIconoTams("imagenes/mapa/ico3.png",25,32);
  	var icono4 = crearIconoTams("imagenes/mapa/ico4.png",25,32);
	var icono5 = crearIconoTams("imagenes/mapa/ico5.gif",25,32);


	total = datos.length;
	alistar = total;

	var zoom = map.getZoom();
	var globoTitulo = $('.globoTitulo')[0];
	var globoPrecio = $('.globoPrecio')[0];
	var globoImagen = $('.globoImagen')[0];
	var globoInformativo = $('.globoInformativo')[0];
	var globoFecha = $('.globoFecha')[0];
	var globoProvincia = $('.globoProvincia')[0];
	var globoVermas = $('.globoVermas')[0];

	for(var i=listarInicioItems; i < alistar; i++)
		{
			var html = document.createElement('div');
			var cordenadas = new GLatLng(datos[i].lat,datos[i].lng);

			if (zoom < zoomProvincia)
			{

			var icono;
			var anuncios = parseInt(datos[i].nAnuncios);

			if(anuncios == 0)
				icono = icono4;
				else if(anuncios < 10)
					icono = icono3;
					else if(anuncios < 50)
						icono = icono2;
						else
							icono = icono1;

			var punto = crearPuntoAnuncio(cordenadas,html,icono,i);
			datos[i].punto = punto;
			datos[i].zoom = zoomProvincia;

			}
			else if (zoom < zoomPoblacion)
			{

			var icono;
			var anuncios = parseInt(datos[i].nAnuncios);

			if(anuncios == 0)
				icono = icono4;
				else if(anuncios < 10)
					icono = icono3;
					else if(anuncios < 50)
						icono = icono2;
						else
							icono = icono1;

			var punto = crearPuntoAnuncio(cordenadas,html,icono,i);
			datos[i].punto = punto;
			datos[i].zoom = zoomPoblacion;

			}
			else
			{

			var icono;
			icono = icono5;

			globoTitulo.innerHTML = datos[i].titulo;
			globoTitulo.setAttribute('href', datos[i].ficha);
			globoTitulo.setAttribute('target', '_blank');
			globoPrecio.innerHTML = datos[i].precio+' &euro;';
			globoFecha.innerHTML = datos[i].fecha;
			globoProvincia.innerHTML = datos[i].poblacion;
			globoVermas.setAttribute('href', datos[i].ficha);
			globoVermas.setAttribute('target', '_blank');

			if(datos[i].imagen != "")
				{
				globoImagen.src = datos[i].imagen;
				globoImagen.style.display = '';
				}
				else
					{
					globoImagen.src = "";
					globoImagen.style.display = 'none';
					}

			html.className = "globoInformativo";
			html.innerHTML = globoInformativo.innerHTML;

			var punto = crearPuntoAnuncio(cordenadas,html,icono,i);
			datos[i].punto = punto;

			}

			lista.push(punto);

		}

	ponerPuntos(lista,1);
	paginaActual = 1;
	window.setTimeout(actualizarListado, 150)
	status.innerHTML = "<span style='color:green'>Listo</span>";
	finInicio = true;

}

//-- funcion que recoje los datos enviados por ajax, los parsea y escribe los nuevos puntos ---
function cargarUsuariosAjax(datosDevueltos)
{

	status.innerHTML = "Parseando nueva informacion...";

	datos = datosDevueltos;
	lista=[];
	listaTmp=[];

	total = datos.length;
	alistar = total;

	var zoom = map.getZoom();
	var globoTitulo = $('.globoTituloUsuario')[0];
	var globoImagen = $('.globoImagenUsuario')[0];
	var globoInformativo = $('.globoInformativoUsuario')[0];
	var globoWeb = $('.globoWebUsuario')[0];
	var globoDireccion = $('.globoDireccionUsuario')[0];
	var globoTelefono = $('.globoTelefonoUsuario')[0];

	for(var i=listarInicioItems; i < alistar; i++)
		{
			var html = document.createElement('div');
			var cordenadas = new GLatLng(datos[i].lat,datos[i].lng);

			var icono = crearIconoTams(datos[i].imagen,26,20);
			
			globoTitulo.innerHTML = datos[i].nombre;
			globoTitulo.setAttribute('href', datos[i].web);
			globoTitulo.setAttribute('target', '_blank');
			globoWeb.innerHTML = datos[i].web;
			globoWeb.setAttribute('href', datos[i].web);
			globoWeb.setAttribute('target', '_blank');
			globoDireccion.innerHTML = datos[i].direccion;
			globoTelefono.innerHTML = datos[i].telefono;
			
			//globoPrecio.innerHTML = datos[i].precio+' &euro;';
			//globoFecha.innerHTML = datos[i].fecha;
			//globoProvincia.innerHTML = datos[i].poblacion;
			//globoVermas.setAttribute('href', datos[i].ficha);
			//globoVermas.setAttribute('target', '_blank');

			if(datos[i].imagen != "")
				{
				globoImagen.src = datos[i].imagen;
				globoImagen.style.display = '';
				}
				else
					{
					globoImagen.src = "";
					globoImagen.style.display = 'none';
					}

			html.className = "globoInformativoUsuario";
			html.innerHTML = globoInformativo.innerHTML;

			var punto = crearPuntoAnuncio(cordenadas,html,icono,i);
			datos[i].punto = punto;

			lista.push(punto);

		}

	ponerUsuarios(lista,14);
	paginaActual = 1;
	status.innerHTML = "<span style='color:green'>Listo</span>";
	finInicio = true;

}

function anteriorPagina()
{
	if(paginaActual > 1)
	{
	paginaActual--;
	actualizarListado();
	}
}

function siguientePagina()
{
	if(paginaActual < totalPaginas)
	{
	paginaActual++;
	actualizarListado();
	}
}

function verGrupo()
{
	var indice = this.name;
	centrarMapaPosicion(datos[indice].lat, datos[indice].lng, datos[indice].zoom);
}

function verAnuncio()
{
	var indice = this.name;
	GEvent.trigger(datos[indice].punto, "click");
}

function actualizarListado()
{
	var zoom = map.getZoom();
	var listado = $("#listado")[0];
	var total = $(".total")[0];
	var pagina = $(".pagina")[0];

	listado.innerHTML = "";
	items = itemsListado

	totalPaginas = parseInt(datos.length/itemsListado) + 1;

	total.innerHTML = totalPaginas;
	pagina.innerHTML = paginaActual;

	ini = (paginaActual-1)*itemsListado;

	if(paginaActual == 1)
		$("#botonAnterior")[0].style.display = "none";
		else
			$("#botonAnterior")[0].style.display = "";

	if(paginaActual == totalPaginas)
		$("#botonSiguiente")[0].style.display = "none";
		else
			$("#botonSiguiente")[0].style.display = "";

	if((itemsListado+ini) > datos.length)
		items = datos.length-ini;

	for(var i=ini; i < ini+items; i++)
		{

			if (zoom < zoomProvincia)
			{
				var html = document.createElement('div');

				html.className = "filaMapaGrupo";
				if (i%2 == 0) {
					html.style.background = "#f5f5f5";
				}
				html.innerHTML = filaMapaGrupo.innerHTML;
				html.name = i;
				html.onclick = verGrupo;

				listado.appendChild(html);
				$(".nombreListado")[i-ini].innerHTML = datos[i].nombre;
				$(".nAnunciosListado")[i-ini].innerHTML = datos[i].nAnuncios;
			}
				else if(zoom < zoomPoblacion)
					{
						var html = document.createElement('div');
						html.className = "filaMapaGrupo";
						if (i%2 == 0) {
							html.style.background = "#f5f5f5";
						}
						html.innerHTML = filaMapaGrupo.innerHTML;
						html.name = i;
						html.onclick = verGrupo;

						listado.appendChild(html);
						$(".nombreListado")[i-ini].innerHTML = datos[i].nombre;
						$(".nAnunciosListado")[i-ini].innerHTML = datos[i].nAnuncios;
					}
					else
					{
						var html = document.createElement('div');
						html.className = "filaMapaAnuncio";
						if (i%2 == 0) {
							html.style.background = "#f5f5f5";
						}
						html.innerHTML = filaMapaAnuncio.innerHTML
						html.name = i;
						html.onclick = verAnuncio;

						listado.appendChild(html);
						$(".nombreListado")[i-ini].innerHTML = datos[i].titulo;
						$(".precioListado")[i-ini].innerHTML = datos[i].precio;
						$(".imagenListado")[i-ini].innerHTML = '<img src="'+datos[i].imagen+'" />';
						$(".underline")[i-ini].setAttribute('alt', datos[i].fecha+' '+datos[i].poblacion);
						$(".underline")[i-ini].setAttribute('title', datos[i].fecha+' '+datos[i].poblacion);
						//$(".underline")[i-ini].setAttribute('href', datos[i].ficha);
					}

		}

	$(".pasador").css('display', 'none');
	$(".nohay").css('display', 'none');

	if (datos.length > itemsListado) {
		$(".pasador").css('display', '');
	}

	if (datos.length == 0) {
		$(".nohay").css('display', '');
	}
}


// especie de extends de crearPuntoPoblacion
function crearPuntoAnuncio(posicion,html,icono,indice) {

        //esta funcion crea un punto en el mapa de google maps
        var punto = new GMarker(posicion,icono) //anadimos el icono

        // aqui asociamos un listener a "click" que muestra el html.
        GEvent.addListener(punto, "click", function() {

          var coordenadas = punto.getLatLng();

           zoom = map.getZoom();

          if(zoom < zoomProvincia)
          	centrarMapaPosicion(coordenadas.lat(), coordenadas.lng(), zoomProvincia)
          	else if(zoom < zoomPoblacion)
          		centrarMapaPosicion(coordenadas.lat(), coordenadas.lng(), zoomPoblacion)


          punto.openInfoWindowHtml(html);


           if(zoom >= zoomPoblacion)
          	{
         	 puntoActual = 1;
         	 mapaReady = false;
          	}


        });


        //devolvemos el punto creado
        return punto;

      }

//-- funcion que apartir de una lista de puntos, los crea para un zoom X ---
function ponerPuntos(lista,zoom)
	{
		  mgr.clearMarkers();
		  mgr.addMarkers(lista,zoom);
		  mgr.refresh();

	}
	
//-- funcion que apartir de una lista de puntos, los crea para un zoom X ---
function ponerUsuarios(lista,zoom)
	{
		  mgr2.clearMarkers();
		  mgr2.addMarkers(lista,zoom);
		  mgr2.refresh();
	}


//-- funcion que centra el mapa en un lugar
function buscarLugar()
{
	centrarMapa($('#lugar')[0].value,10);
}

