// lo saco de custom porque tengo que definir globalmente un par de variables cuya unicidad deseo preservar
var mapa,
	gdir,
	dForm;

$( function() {
	// creacion del objeto GMap2
	mapa = new Mapa('configRutas-mapa', [45.52, 13.27],{zoom:4});
	// creacion del objeto GDirections y listeners
	gdir = new GDirections(mapa.GMap, document.getElementById('rutaConfigurada-ruta'));
	GEvent.addListener(gdir, "error", handleErrors);
	GEvent.addListener(gdir, "load", handleSuccess);
	//creacion del objeto DForm
	dForm = new DForm('formConfiguradorRutas');
	$(dForm.elem).submit(validarCamposRuta);
	//eventos de filtrado
	$('#rutaConfigurada input').change(filtrarHoteles).click(function() {
		var t = this;
		setTimeout(function() {
			$(t).triggerHandler('change');
		}, 50);
	});
});

function validarCamposRuta() {

		var $t = $(dForm.elem),
		desde = $t.find('input').eq(0).val(),
		hasta = $t.find('input').eq(1).val(),
		error = [];
	// comprobamos los campos
	if (!desde) {
		error.push('<li>'+txtFaltaPartida+'</li>')
	}
	if (!hasta) {
		error.push('<li>'+txtFaltaLlegada+'</li>')
	}
	if (error.length) {
		handleErrors(error.join(''));
		return false;
	}
	// llamamos al GDirections
	mapa.GMap.clearOverlays();
	gdir.load("from: " + desde + " to: " + hasta, {"locale": lang });
	return false;
}

function filtrarHoteles() {
	var $cats = $('#rutaConfigurada-categorias input'),
		$serv = $('#rutaConfigurada-servicios input:checked'),
		hoteles = mapa.markers,
		hotelInfo = null;
	// recorremos todos los marcadores
	for (i in hoteles) {
		hotelInfo = hoteles[i].markerInfo;
		if ($cats.filter('[value=' + hotelInfo.cat + ']').is(':checked')) {
			hoteles[i].show();
// si estamos en una categoria de hotel visibile pasaremos a comprobar los servicios que estan checked
			hotelInfo = hotelInfo.servicios.split(' ');
			$serv.each(function() {
				// si encontramos que no esta en los servicios lo ocultamos
                // Nota: el value de cada servicio puede tener varios id separados con espacios
                var idsServicios = this.value.split(' ');
                var encontrado = false;
                for (j in idsServicios) {
                    if ($.inArray(idsServicios[j], hotelInfo) != -1) {
                        encontrado = true;
                        break;
                    }
                }
                if (!encontrado) {
                    hoteles[i].hide();
                    return false;
                }
			});
		} else {
			hoteles[i].hide();
		}
	}
}

function handleErrors(masErrores){
    var masErrores = (typeof masErrores == 'string') ? masErrores : '';
	$('#paraMostrarRuta').slideUp();
    dForm.showError(0, "<ul>" + masErrores + "<li>"+ txtGoogleNoEncuentra + "</li></ul>");
}

function handleSuccess(){
    // mostramos el div de resultado y escondemos el de error
	$('#paraMostrarRuta').slideDown();
    dForm.hideError(0);

    // mostramos marcadores dando tiempo a rerenderizar
	setTimeout(function() {
		mapa.JSON2Overlays('ajax/hotelesGMaps.json.php', filtrarHoteles);
	}, 100);
    
}