// slide ofertas de la home page
$(function() {
	var $context = $('#slideOfertas'),
		$ofertas = $context.find('li'),
		$controles = $('<ul id="controlesSlide"></ul>').appendTo($context),
		lapsoOfertas = 10000,
		mostrarOferta,
		autoOferta;
	// definimos la funcion para mostrar una oferta y ocultar las demas
	mostrarOferta = function(evento) {
		var $t = $(this),
			$liControles = $t.parent().children(),
			$liMostrar = $ofertas.eq($liControles.index(this));
		// rompemos aqui si tenemos clase active
		if ($t.is('.active')) {return false;}
		// ajustamos el tema eventismo
		clearTimeout($context.data('temp'));
		if (!$('#slidePlayPause').is('.pause')) {
			$context.data('temp', setTimeout(autoOferta, lapsoOfertas));
		}
		// ponemos/quitamos clases y tal
		$liControles.removeClass('active');
		$t.addClass('active');
		$liMostrar.fadeIn().siblings(':visible').fadeOut();
	};
	// definimos la funcion que se ejecuta cada X tiempo
	autoOferta = function() {
		var $aClick = $('#controlesSlide li.active').next();
		$aClick = ($aClick.length) ? $aClick : $('#controlesSlide li:first');
		$aClick.click();
	};
	// creamos la interfaz para activar las ofertas
	$ofertas.each(function() {
		var $t=$(this);
		$controles.append('<li><span></span><em>'+$t.find('h2').text()+'</em></li>')
		.children(':last').click(mostrarOferta)
		.hover(function() {
			$('em', this).fadeIn('fast').end().siblings().find('em').hide();
		}, function() {
			$('em', this).fadeOut('fast');
		});
	});
	// evento de play/pause
	$('#slidePlayPause').toggle(function() {
		clearTimeout($context.data('temp'));
		$('#slidePlayPause').fadeOut('fast', function() {
			$(this).addClass('pause').fadeIn('fast');
		});
	},function() {
		$context.data('temp', setTimeout(autoOferta, lapsoOfertas-1000));
		$('#slidePlayPause').fadeOut('fast', function() {
			$(this).removeClass('pause').fadeIn('fast');
		});
	});
	// iniciamos el asunto
	$context.data('temp', setTimeout(autoOferta, lapsoOfertas+1000));
	$ofertas.eq(0).show();
	$controles.children(':first').addClass('active');
});

// cambiar la clase al body en funcion de la clase de #contenido-principal
$(function() {
	$('body').addClass( $.trim($('#contenido-principal').attr('className').replace('fichaHotel', '')) );
});

// funciones de AJAX de listado de hoteles
$(function() {
	$('.pestanasSecciones a').click(function(event) {
		var $t = $(this),
			anchor  = $t.attr('href').getAnchor(),
			idHotel = anchor.replace(/\D/g,''),
			type	= anchor.substring(1, anchor.indexOf('-')),
			$elem   = $(anchor);

		if ($elem.children().length <= 1) {
			$t.closest('ul').closest('li').addClass('loading');
			$.ajax({
				url: approot+'ajax/hotelLista' + type.charAt(0).toUpperCase() + type.slice(1) + '.php',
				data:'lang=' + lang + '&id=' + idHotel,
				type:'get',
				dataType:'html',
				complete:function(r) {
					$elem.append(r.responseText);
					prepararEventos($elem);
					$t.click().closest('ul').closest('li').removeClass('loading');
					actualizarCalendarioDisp($('#fechaEntrada'));
					actualizarCalendarioDisp($('#fechaSalida'));
				},
				global: false
			});
			// si hacemos la llamada en AJAX paramos la propagacion del bubbling
			return false;
		}
	});
});

// funciones especificas de GMaps
$('p.iconoMapa a').live('click', function() {
	// el objeto de mapa debe ser de ambito "document" y llamarse "mapa"
	var hotel=mapa.markers[this.href.getAnchor().substring(1)],
		$divMapa = $(mapa.elem);
	if (!hotel || hotel == undefined) {
		return false;
	}
	var info =hotel.markerInfo;
	if ($divMapa.hasClass('panel') && !$divMapa.hasClass('shown')) {
		$('.showPanel').eq($('.panel').index($divMapa)).click();
	}
	$('#contenido-principal').smoothAnchor( function() {
		mapa.GMap.closeInfoWindow();
		mapa.GMap.setCenter(new GLatLng(hotel.markerInfo.lat, hotel.markerInfo.lng), 13);
		hotel.openInfoWindow( buildInfoWindow(hotel.markerInfo) );
	});

	return false;
});

// autocompletado de buscador y funciones asociadas a #buscadorHotel
$(function() {
	var $formReservas = $('#buscadorReservas');
	var $input = $formReservas.find('input.principal');
	$input.autocomplete(approot+'ajax/hotelSuggestions.php?lang='+lang, {
		minChars: 3,
		max: 20,
		width: 180,
		scroll: false,
		formatItem: function(data) {
			return '<small class="floatRight">('+data[1]+')</small>'+data[0];
		}
	}).result(function(event, data, formatted) {
		$('#oldDestino').val(data[0]);
		$('#destinoTipo').val(data[2]);
		$('#destinoCodigo').val(data[3]);
		$('#destinoUrl').val(data[4]);
	});

});

// function para acondicionar las clases de .calendariosDinamicos
function clasesCalendario(contexto) {
	var $td = $('td', contexto);
	$td.filter(':nth-child(odd)').addClass('impar').next().addClass('par');
	$td.filter(':empty').removeClass('impar par');
}

var actualizacionCalendario = new Array();

// validacion generica de formularios: validarObl PASADA A reservas.js

// formulario de grupos
$(function() {
	var contexto = $('#contactoGrupos');
	if (!contexto.length) return false;

// ---------------------------------------------------------------------- DATOS DEL HOTEL:
	var $sel  = $('fieldset:eq(1) select', contexto),
		$pais = $sel.eq(0),
		$prov = $sel.eq(1),
		$ciud = $sel.eq(2),
		$cat  = $sel.eq(3),
		$hot  = $sel.eq(4);
	// creamos la cache
	$('option[class]', $sel).each(function() {
		eval('var claseOptions = '+this.className);
		for (i in claseOptions) {
			$(this).data(i, claseOptions[i]);
		}
	});
	// si cambia el pais comprobamos si hemos de cambiar la provincia
	$pais.change(function() {
//		if ($pais.val().toLowerCase().indexOf('spa')>=0) { // espanya
		if ($pais.val() == '202') { // espanya
			$prov.attr('disabled', false);
			setTimeout(function() {
				$prov.change();
			}, 50);
		} else {
			$prov.attr('disabled', 'disabled');
			setTimeout(function() {
				$prov.children(':first').attr('selected', 'selected').change();
			}, 50);
		}
	});
	// si cambia la provincia limitamos el numero de ciudades que aparecen
	$prov.change(function() {
// España es id = 202
//		var region = (!$pais.val() || $pais.val().toLowerCase().indexOf('spa')>=0) ? $prov.val() : $pais.val();
		var region = (!$pais.val() || $pais.val() == '202') ? $prov.val() : $pais.val();
		$ciud.find('option').each(function() {
			var $t = $(this);
			if (!region || $t.data('reg') == region) {
				$t.show();
			} else {
				$t.hide();
			}
		});
		setTimeout(function() {
			$ciud.children(':first').attr('selected', 'selected').change();
		}, 50);
	});
	// Si cambia la ciudad limitamos el numero de hoteles que aparecen
	// Hago notar que este evento se llama varias veces aunque el campo
	// hotel no cambie realmente, por lo que hemos de comprobar que
	// poblaciones estan realmente disponibles (visibles)
	$ciud.change(function() {
		var hotel = [];
		var ciudad = [this.value];
		if (!ciudad[0]) {
			ciudad = $ciud.find('option').map(function() {
				if (this.style.display != 'none') {
					return this.value;
				}
			});
		}
		// usaremos el Array "ciudad" para comprobar los hoteles que realmente pertenecen a el
		$hot.find('option').each( function() {
			var $t=$(this);
			if (!$t.val() || ($.inArray($t.data('pob'), ciudad) >= 0 && ($t.data('reg') == $pais.val() || $pais.val() == '202' || $pais.val() == '') ) ){
				$t.show();
				if ($t.val() && $.inArray($t.data('cat'), hotel) == -1) {
					hotel.push($t.data('cat'));
				}
			} else {
				$t.hide();
			}
		});
		// una vez mostrados/ocultados los hoteles tenemos un listado de las categorias disponibles
		$cat.find('option').each( function() {
			var $t=$(this);
			if (!$t.val() || $.inArray($t.val(), hotel) >= 0) {
				$t.show();
			} else {
				$t.hide();
			}
		});
		setTimeout(function() {
			$cat.children(':first').attr('selected', 'selected').change();
		}, 50);
	});
	// si cambia la categoria eliminamos los hoteles que no tocan
	$cat.change(function() {
		 var currentCat = $(this).val();
		 var currentPob = $ciud.val();
		 var currentProv = $prov.val();
		 var currentPais = $pais.val();
		var hotel = [];
		 $hot.children().each(function() {
		 	var $t = $(this);
			if ( (!currentCat || $t.data('cat')==currentCat) &&
				(!currentPob || $t.data('pob') == currentPob)  &&
				(!currentPais || $t.data('reg') == currentPais)  &&
				(!currentProv || $t.data('prov') == currentProv)){
				$t.show();
			} else {
				$t.hide();
			}
		 });
		setTimeout(function() {
			$hot.children(':first').attr('selected', 'selected').change();
		}, 50);
	});

// ---------------------------------------------------------------------- DATOS GRUPO:
	// Dias del evento y habitaciones relacionadas
	var refrescarDiasEvento = function() {
		// comprobamos si mostramos el campo de habitaciones
		var $input = $('#diasGrupo input'),
			ent   = $input.eq(0).val(),
			sal   = $input.eq(1).val(),
			$d	= $('#habGrupo');
		if (ent.testDate() && sal.testDate() && ent.toDate() < sal.toDate()) {
			$d.show(600);
		} else {
			$d.hide(600);
		}
		// enchufamos el texto
		$input.each( function() {
			var texto = this.value.testDate() ? this.value.toDate().fechaLocal() : ' ';
			texto = [texto.charAt(0).toUpperCase(), texto.substring(1)].join('');
			$(this).nextAll(':last').html(texto);
		});
		// fechas de los salones
		var options = [];
		if (ent != '' && sal != '') {
			ent=ent.toDate();
			sal=sal.toDate();
			var diaSal=sal.getDate();
			while (ent.getDate() <= diaSal) {
				options.push('<label><input name="fechas_salon_#NUM#[]" type="checkbox" value="', ent.ddmmyyyy(), '" />', ent.fechaLocal(), '</label>');
				ent.setDate(ent.getDate()+1);
			}
		}
		options=options.length ? options : ['<p><em>', txtSinFechas, '</em></p>'];
		$('#salonGrupo div.selFechas').html(options.join(''))
	}
	// Ver reservas.js
	actualizacionCalendario['diasGrupo'] = refrescarDiasEvento;
	refrescarDiasEvento(); // llamamos la primera vez al preparar el DOM y preparamos el evento:
	$('#diasGrupo input.datepicker').datepicker('option', 'onClose', refrescarDiasEvento).css({width:0,padding:0,border:0,background:'none'});

	// Numero de salones
	var $salon = $('#salonGrupo'),
		$num   = $salon.find('select:first');
	$num.change(function() {
		var $modelo = $salon.find('div.gC-salon:first'),
			$copias = $modelo.nextAll(),
			num	 = parseInt($num.val()) || 0,
			fechas = $('#diasGrupo input'),
		// redefinimos fechas a un Array con los objetos Date
		fechas = [fechas.eq(0).val().toDate(), fechas.eq(1).val().toDate()];
		if ($copias.length>num) {
			$copias.eq(num).nextAll().andSelf().remove();
		} else if ($copias.length<num) {
			for (var i = $copias.length;i<num;++i) {
				$('<div class="gC-salon">' + $modelo.html().replace(/#NUM#/g, i+1)+'</div>').appendTo($salon).show(600)
			}
		}
	});

	// Restaurantes y tal
	var $rest = $('#restGrupo');
	$rest.find('input[type=radio]').change(function() {
		$rest.children('div').hide(600);
		$(this).closest('label').next('div').show(600);
	});

	// preparamos el objeto DForm
	var dForm = new DForm('contactoGrupos', {aniSpeed:1000, useAJAX:true});
	dForm.makeTabs();
	for (var i=0,l=dForm.field.length; i<l; ++i){
		dForm.addValidation(i, validarObl);
	}

});

/* Validacion de formulario normales y corrientes, concretamente
 * Registro de colectivos
 * Suscripcion a newsletter
 * Ver reserva
 * Ayudenos a mejorar
 */
var dForms = {};

$(function() {
	var $form = $('#registroColectivos, #verReserva, #formAyudenosAMejorar, #loginForm');
	if (!$form.length) {
		return false;
	}
	$form.each(function(index){
		var form = $form.get(index),
			booleanAJAX = true;
		if (form.id == 'verReserva' || form.id == 'loginForm') {
			booleanAJAX = false;
		}
		dForms[this.id] = new DForm(form, {useAJAX:booleanAJAX});
		for (var i=0,l=dForms[this.id].field.length; i<l; ++i){
			dForms[this.id].addValidation(i, validarObl);
		}
	});

});


// Validacion NIF/NIE de newsletter
$(function() {
	var context = '#suscrNewsletter';
	if (!$(context).length) return false;
		formSuscr = new DForm($(context).get(0), {useAJAX:true});
	formSuscr.addValidation(0, function() {
		var $this = $(this),
		$fields = $('fieldset', context),
		reUL = /<\/?ul>/g,
		mixedTemp;

		mixedTemp = validarObl($fields.get(0));
		if (mixedTemp === true) {
			mixedTemp = '';
		} else {
			mixedTemp = mixedTemp.replace(reUL, '');
		}

		var checkedLeido = $('#leido', context).attr('checked');
		if (checkedLeido == false || checkedLeido == 'false') {
			mixedTemp += ('<li>' + txtFaltaCheckCondiciones + '</li>');
		} 
		
		var checkedNews = $('#checkNews', context).attr('checked');
		if (checkedNews == false || checkedNews == 'false') {
			mixedTemp += ('<li>' + txtFaltaCheckNews + '</li>');
		}
		
		var tipoDeDoc = $('select[name=tipoid]', context).val(),
			numDoc = $('input[name=docid]', context).val();
		switch (tipoDeDoc) {
			case 'DNI':
				if (!numDoc.testDNI()) {
					mixedTemp += ('<li>' + txtFormatDocumInvalid + '</li>');
				}
				break;
			case 'NIE':
				if (!numDoc.testNIE()) {
					mixedTemp += ('<li>' + txtFormatDocumInvalid + '</li>');
				}
				break;
		}
		if (mixedTemp != '') {
			var sHtml = '<ul>' + mixedTemp + '</ul>';
			return sHtml;
		} else {
			return true;
		}
	});

});

