/*****************************************************************************/
/*                                2010 Shio2e                                */
/*                            JAVASCRIPT BUSCADOR                            */
/*****************************************************************************/

// BUSCADOR
var buscador = {
	// VARIABLES CONFIGURACION
	numOpcMenuCat : 8,
	numOpcMenuCom : 14,
	numOpcMenuAso : 21,
	numOpcMenuAnu : 6,
	numOpcMenuPor : 10,

	// VARIABLES INTERNAS
	filtroCategorias 	: new Array(),
	filtroProvincia 	: 0,
	filtroPoblacion 	: 0,
	filtroBarrio 		: 0,
	seccionActiva		: 'mapa',

	// FUNCIONES
	ocultar : function (seccion) {
		// OCULTAR VENTANA DE INFO SI NO SE HA CERRADO CORRECTAMENTE
		buscador.fichaTecnica.ocultarInfo();

		// OCULTAR TODAS LAS SECCIONES
		if (seccion != 'carteleria') {
			$('modulo_mapa').hide();
			$('modulo_ficha').hide();
			$('modulo_ficha_ofertas').hide();
			$('modulo_b_ofertas').hide();
			$('carteleria').hide();
		}
	},

	abrir : function (seccion, opciones) {
		// OCULTAR TODAS LAS SECCIONES
		this.ocultar(seccion);

		// MARCAR LA SECCION ACTIVA
		this.seccionActiva = seccion;

		// REALIZAR ACCION CORRESPONDIENTE
		switch(seccion) {
			case 'mapa':
			    opciones = Object.extend({
					latitud 	: mapa.latitud,
					longitud 	: mapa.longitud
			    }, opciones || {});

				$('modulo_mapa').show();
				mapa.mostrar();
				break;
			case 'ficha':
			    opciones = Object.extend({
					id_comercio : 0
			    }, opciones || {});

				$('form_contacto').hide();
				buscador.fichaTecnica.mostrarFicha(opciones.id_comercio);
				break;
			case 'ficha_ofertas':
			    opciones = Object.extend({
					id_comercio : 0
			    }, opciones || {});

				//$('modulo_ficha_ofertas').show();
				buscador.fichaOfertas.mostrar(opciones.id_comercio);
				break;
			case 'buscador':
				//$('modulo_b_ofertas').show();
				buscador.buscadorOfertas.mostrar();
				break;
			case 'carteleria':
			    opciones = Object.extend({
					id_contenedor : '',
					id_anuncio : 0,
					// DATOS PARA CUANDO SE PASA TODO EL ANUNCIO
					id_comercio : 0,
					nombre : '',
					tipo : 0
			    }, opciones || {});

				if (opciones.tipo != 0) {
					buscador.anuncios.abrir(opciones);
				} else {
					if (opciones.id_contenedor == '') {
						// ES UN ANUNCIO DEL BUSCADOR
						buscador.buscadorOfertas.abrir(opciones.id_anuncio);
					} else {
						// ES UN ANUNCIO DEL TICKER
						$(opciones.id_contenedor).ticker.abrir(opciones.id_anuncio);
					}
				}
				break;
		}

		// INSERTAR SECCION EN EL HISTORIAL
		buscador.historial.add(seccion, opciones);
	},

	cerrar : function () {
		// ELIMINAR SECCION DEL HISTORIAL
		var obj = buscador.historial.get();

		// REALIZAR ACCION CORRESPONDIENTE
		switch(obj[0]) {
			case 'carteleria':
				if (buscador.anuncios.cuenta_atras != null)
					buscador.anuncios.cuenta_atras.stop();

				$('carteleria').hide();

				this.seccionActiva = buscador.historial.last();
				break;
			default:
				obj = buscador.historial.get();
				this.abrir(obj[0], obj[1]);
		}
	},

	centrarMapa : function (id_provincia, id_poblacion) {
		if (typeof id_poblacion != "undefined" && id_provincia > 0 && id_poblacion > 0) {
			new Ajax.Request('/exec/ajax/coordenadas_poblacion.php', {
				parameters: { id_provincia: id_provincia, id_poblacion: id_poblacion },
				onSuccess: function(respuesta) {
					var coordenadas_leidas = respuesta.responseText.evalJSON();
					mapa.centrar(coordenadas_leidas.latitud, coordenadas_leidas.longitud);
					mapa.zoom(mapa.zoom_x_defecto);
				}
			});
		}
	},

	seleccionar : function (){
		localizador.seleccionado(this.filtroProvincia, this.filtroPoblacion, this.filtroBarrio);
	},

	regenerar : function (){
		this.regenerarCategorias();
		this.regenerarAnuncios();
		this.regenerarComercios();
		this.regenerarMarcadores();
		if (this.seccionActiva == 'buscador') {
			this.regenerarBuscador();
		} else {
			this.regenerarMapa();
			this.abrir('mapa');
		}
	},

	regenerarAnuncios : function (){
		// LEER ANUNCIOS
		new Ajax.Request('/exec/ajax/anuncios.php', {
			parameters: { id_provincia: this.filtroProvincia, id_poblacion: this.filtroPoblacion },
			onSuccess: function(respuesta) {
				//var anuncios = respuesta.responseText;
				tickerPublicidad.recargar(respuesta.responseText);
			}
		});
	},

	regenerarBuscador : function (){
		this.buscadorOfertas.consulta();
	},

	regenerarComercios : function (){
		var prefijo = 'li.com.';
		var nuevo_listado = '';
		var style;

		var provincia 	= this.filtroProvincia;
		var poblacion 	= this.filtroPoblacion;
		var barrio 		= this.filtroBarrio;
		var categorias 	= this.filtroCategorias;

		// ELIMINAR TODAS LAS OPCIONES DEL LISTADO ACTUAL
		var i = 0;
		while($(prefijo+i))
			$(prefijo+(i++)).remove();

		// CREAR LOS NUEVOS ELEMENTOS QUE PASEN EL FILTRO
		var creados = 0;
		for (i=0; i<mapa.marcadores.length; i++) {
			var obj = mapa.marcadores[i];
			var mostrar = false;
			var ok_filtro_cat = false;

			if (categorias.length > 0) {
				categorias.each(function(categoria, j) {
					obj.extra.categorias.each(function(id_categoria, k) {
						if (id_categoria == categoria)
							ok_filtro_cat = true;
					}.bind(this));
				}.bind(this));
			} else {
				ok_filtro_cat = true;
			}

			if (ok_filtro_cat)
				if (barrio != 0) {
					if (obj.extra.id_provincia == provincia && obj.extra.id_poblacion == poblacion && obj.extra.id_barrio == barrio) mostrar = true;
				} else if (poblacion != 0) {
					if (obj.extra.id_provincia == provincia && obj.extra.id_poblacion == poblacion) mostrar = true;
				} else if (provincia != 0) {
					if (obj.extra.id_provincia == provincia) mostrar = true;
				} else {
					mostrar = true;
				}

			if (mostrar) {
				style = creados < this.numOpcMenuCom ? '' : 'display: none;';

				buscador.obj = obj;

				nuevo_listado += '<li id="li.com.'+creados+'" style="'+style+'" onmouseover="javascript:buscador.fichaTecnica.mostrarInfoListado('+obj.id_comercio+', \''+addslashes(obj.nombre)+'\', ['+obj.extra.categorias.join(',')+']);" onmouseout="javascript:buscador.fichaTecnica.ocultarInfo();">';
				nuevo_listado += '<a id="com.'+obj.id_comercio+'" href="javascript:void(0);" onclick="javascript:buscador.abrir(\'ficha\', {id_comercio: '+obj.id_comercio+'});">'+obj.extra.nombre_abreviado+'</a>';
				nuevo_listado += '</li>';

				creados++;
			}
		}

		$('lista_comercios').update(nuevo_listado);
		menuListadoVertical.reset('com');
	},

	regenerarCategorias : function (){
		this.categorias.resetear();
	},

	regenerarMapa : function (){
		this.centrarMapa(this.filtroProvincia, this.filtroPoblacion);
	},

	regenerarMarcadores : function (){
		mapa.marcadoresFiltrar();
	},

	actualizarComercios : function (){
		new Ajax.Request('/exec/ajax/listado_comercios.php', {
			parameters: { id_provincia: this.filtroProvincia, id_poblacion: this.filtroPoblacion },
			onSuccess: function(respuesta) {
				var prefijo = 'li.com.';

				// ELIMINAR TODOS LOS COMERCIOS DEL LISTADO ACTUAL
				var i = 0;
				while($(prefijo+i))
					$(prefijo+(i++)).remove();

				// ELIMINAR TODOS LOS MARCADORES DEL MAPA
				mapa.marcadoresEliminar();

				// CREAR DATOS DE COMERCIOS
				var listado = respuesta.responseText.evalJSON();

				var i=0;
				while(listado[i]) {
					mapa.marcadorNuevo(listado[i].id_comercio, listado[i].latitud, listado[i].longitud, listado[i].nombre, { id_provincia: listado[i].id_provincia, id_poblacion: listado[i].id_poblacion, id_barrio: listado[i].id_barrio, categorias: listado[i].categorias, nombre_abreviado: listado[i].nombre_abreviado });
					i++;
				}

				// REGENERAR TODO
				buscador.regenerar();
			}
		});
	},

	pruebas : function (){
		//return;
		$('image_viewer').show();
	}
}

// MENU LISTADO VERTICAL
menuListadoVertical.nuevo('cat', 'li.cat.', buscador.numOpcMenuCat);
menuListadoVertical.nuevo('com', 'li.com.', buscador.numOpcMenuCom);
menuListadoVertical.nuevo('aso', 'li.aso.', buscador.numOpcMenuAso);
menuListadoVertical.nuevo('anu', 'li.anu.', buscador.numOpcMenuAnu);
menuListadoVertical.nuevo('por', 'li.por.', buscador.numOpcMenuPor);
