/*****************************************************************************/
/*                                2010 Shio2e                                */
/*                 JAVASCRIPT BUSCADOR :: BUSCADOR OFERTAS                  */
/*****************************************************************************/

buscador.buscadorOfertas = {
	// VARIABLES CONFIGURACION
	divFiltroTemporal 	: 'opciones',
	divFiltroDistancia 	: 'poblacion',
	divPaginador 		: 'paginas',

	prefijoAnuncios		: 'anuncio_',

	anuncios_x_pag 		: 6,

	// VARIABLES INTERNAS
	filtroTemporal 	: 'ultimas', // ultimas o todas
	filtroDistancia : 0, // 0: poblacion local // X: distancia en km
	anuncios 		: new Array(),
	radio_busqueda	: { km5: 0, km10: 0, km25: 0, km50: 0 },

	// FUNCIONES
	mostrar : function (){
		this.filtroTemporal 	= 'ultimas';
		this.filtroDistancia 	= 0;

		this.consulta();
	},

	consulta : function (dibujar){
		dibujar = typeof dibujar == 'undefined' ? 'todo' : 'justo';
		new Ajax.Request('/exec/ajax/buscador_ofertas.php', {
			parameters: {
				filtro_provincia: buscador.filtroProvincia,
				filtro_poblacion: buscador.filtroPoblacion,
				filtro_temporal: this.filtroTemporal,
				filtro_distancia: this.filtroDistancia,
				filtro_categoria: Object.toJSON(buscador.filtroCategorias)
			},
			onSuccess: function(respuesta) {
				var json 			= respuesta.responseText.evalJSON();
				var listado 		= json.resultados;
				this.radio_busqueda = json.radio_busqueda;
				this.anuncios 		= new Array();

				for (i=0; i<listado.length; i++)
					this.anuncios.push(new buscadorAnuncioClass(listado[i]));

				this.paginador.calcularPaginas(listado.length);

				if (dibujar == 'todo') {
					this.drawTodo();
				} else {
					this.drawPaginador();
					this.drawAnuncios();
				}
			}.bind(this)
		});
	},

	abrir : function (id_anuncio) {
		var anuncio = this.getAnuncio(id_anuncio);
		tickerPublicidadClass.prototype.clic(id_anuncio);
		buscador.anuncios.abrir(anuncio);
	},

	getAnuncio : function (id_anuncio) {
		for (i=0; i<this.anuncios.length; i++)
			if (this.anuncios[i].id_anuncio == id_anuncio)
				return this.anuncios[i];
		return false;
	},

	drawTodo : function (){
		this.drawFiltroDistancia();
		this.drawFiltroTemporal();
		this.drawPaginador();
		this.drawAnuncios();
		$('modulo_b_ofertas').show();
	},

	drawFiltroDistancia : function (){
		var contenido;

		var poblacion = '';

		for (i=0; i<$('sel_poblacion').options.length; i++)
			if ($('sel_poblacion').options[i].value == $('sel_poblacion').value) {
				poblacion = $('sel_poblacion').options[i].text;
				break;
			}

		if (this.filtroDistancia == 0) {
			contenido = '<span>En <strong>'+poblacion+'</strong></span> <span class="sep">|</span> <a href="javascript:void(0);" onclick="javascript:buscador.buscadorOfertas.setFiltroDistancia(5);">En poblaciones cercanas</a>';
		} else {
			contenido = '<a href="javascript:void(0);" onclick="javascript:buscador.buscadorOfertas.setFiltroDistancia(0);">En <strong>'+poblacion+'</strong></a> <span class="sep">|</span> <span>Poblaciones <select id="selector_filtro_distancia" onchange="javascript:buscador.buscadorOfertas.setFiltroDistancia(this.value);" size="1">';
			contenido += '<option value="5"'+(this.filtroDistancia == 5 ? ' selected' : '')+'>5</option>';
			contenido += '<option value="10"'+(this.filtroDistancia == 10 ? ' selected' : '')+'>10</option>';
			contenido += '<option value="25"'+(this.filtroDistancia == 25 ? ' selected' : '')+'>25</option>';
			contenido += '<option value="50"'+(this.filtroDistancia == 50 ? ' selected' : '')+'>50</option>';
			contenido += '</select> km alrededor</span>';
		}

		$(this.divFiltroDistancia).update(contenido);
		$('no_r_poblacion').update(poblacion);
	},

	setFiltroDistancia : function (nuevo, dibujar){
		dibujar = typeof dibujar == 'undefined' ? 'justo' : 'todo';
		this.filtroDistancia = nuevo;
		if (nuevo == 0 || nuevo == 5)
			this.drawFiltroDistancia();
		if (dibujar == 'todo') {
			this.setFiltroTemporal('todas');
			this.drawFiltroDistancia();
		}
		this.consulta(dibujar);
	},

	drawFiltroTemporal : function (){
		var contenido;

		if (this.filtroTemporal == 'ultimas') {
			contenido = '<span>&uacute;ltimas</span> <a href="javascript:void(0);" onclick="javascript:buscador.buscadorOfertas.setFiltroTemporal(\'todas\');">todas</a>';
		} else {
			contenido = '<a href="javascript:void(0);" onclick="javascript:buscador.buscadorOfertas.setFiltroTemporal(\'ultimas\');">&uacute;ltimas</a> <span>todas</span>';
		}

		$(this.divFiltroTemporal).update(contenido);
	},

	setFiltroTemporal : function (nuevo){
		this.filtroTemporal = nuevo;
		this.drawFiltroTemporal();
		this.consulta('justo');
	},

	drawPaginador : function (){
		$(this.divPaginador).update(buscador.buscadorOfertas.paginador.draw());
	},

	drawAnuncios : function (){
		var anuncios_escritos = 0, anuncios_mostrados = 0;
		var elemento, classname;
		for (i=(buscador.buscadorOfertas.paginador.pagActual-1)*this.anuncios_x_pag; i<buscador.buscadorOfertas.paginador.pagActual*this.anuncios_x_pag; i++) {
			if (i<this.anuncios.length) {
				elemento = this.anuncios[i].getElementoBuscador();
				classname = '';
				anuncios_mostrados++;
			} else {
				elemento = '';
				classname = 'vacio';
			}
			$('lista_pos_'+anuncios_escritos).update(elemento);
			$('lista_pos_'+anuncios_escritos).className = classname;
			anuncios_escritos++;
		}
		if (anuncios_mostrados == 0) {
			$('lista').hide();
			$('no_results').show();
			if (this.radio_busqueda.km50 > 0) {
				var resultados = '';
				if (this.radio_busqueda.km5 > 0)
					resultados += '<a href="javascript:void(0);" onclick="javascript:buscador.buscadorOfertas.setFiltroDistancia(5, true);">'+this.radio_busqueda.km5+' ofertas a menos de 5km</a><br/>';
				if (this.radio_busqueda.km10 > 0 && this.radio_busqueda.km10 > this.radio_busqueda.km5)
					resultados += '<a href="javascript:void(0);" onclick="javascript:buscador.buscadorOfertas.setFiltroDistancia(10, true);">'+this.radio_busqueda.km10+' ofertas a menos de 10km</a><br/>';
				if (this.radio_busqueda.km25 > 0 && this.radio_busqueda.km25 > this.radio_busqueda.km10)
					resultados += '<a href="javascript:void(0);" onclick="javascript:buscador.buscadorOfertas.setFiltroDistancia(25, true);">'+this.radio_busqueda.km25+' ofertas a menos de 25km</a><br/>';
				if (this.radio_busqueda.km50 > 0 && this.radio_busqueda.km50 > this.radio_busqueda.km25)
					resultados += '<a href="javascript:void(0);" onclick="javascript:buscador.buscadorOfertas.setFiltroDistancia(50, true);">'+this.radio_busqueda.km50+' ofertas a menos de 50km</a><br/>';

				$('no_r_cercanos').update(resultados);
				$('no_r_cercanos_preg').show();
				$('no_r_cercanos').show();
			} else {
				$('no_r_cercanos_preg').hide();
				$('no_r_cercanos').hide();
			}
		} else {
			$('lista').show();
			$('no_results').hide();
		}
	}
};

// PAGINADOR
buscador.buscadorOfertas.paginador = {
	// VARIABLES CONFIGURACION
	img_al_on 		: '/img/buscador/a_l_on.gif',
	img_al_off 		: '/img/buscador/a_l_off.gif',
	img_ar_on 		: '/img/buscador/a_r_on.gif',
	img_ar_off 		: '/img/buscador/a_r_off.gif',
	anuncios_x_pag 	: buscador.buscadorOfertas.anuncios_x_pag,

	// VARIABLES INTERNAS
	pagCantidad : 1,
	pagActual : 1,

	// FUNCIONES
	draw : function (){
		if (this.pagCantidad == 1)
			return '';

		var contenido = '';

		if (this.pagActual > 1) {
			contenido += '<a href="javascript:void(0);" onclick="javascript:buscador.buscadorOfertas.paginador.prev();"><img src="'+this.img_al_on+'" alt ="<" /></a>';
		} else {
			contenido += '<img src="'+this.img_al_off+'" alt ="<" />';
		}

		contenido += '<span>P&aacute;g. <strong>'+this.pagActual+'</strong> de '+this.pagCantidad+'</span>';

		if (this.pagActual < this.pagCantidad) {
			contenido += '<a href="javascript:void(0);" onclick="javascript:buscador.buscadorOfertas.paginador.next();"><img src="'+this.img_ar_on+'" alt =">" /></a>';
		} else {
			contenido += '<img src="'+this.img_ar_off+'" alt =">" />';
		}

		return contenido;
	},

	prev : function (){
		if (this.pagActual > 1)
			this.pagActual--;
		buscador.buscadorOfertas.drawPaginador();
		buscador.buscadorOfertas.drawAnuncios();
	},

	next : function (){
		if (this.pagActual < this.pagCantidad)
			this.pagActual++;
		buscador.buscadorOfertas.drawPaginador();
		buscador.buscadorOfertas.drawAnuncios();
	},

	calcularPaginas : function (num_anuncios){
		this.pagActual = 1;
		this.pagCantidad = Math.max(1, Math.ceil(num_anuncios/this.anuncios_x_pag));
	}
};
