/*Esta función lanza un POPUP con las condiciones de Residencia
  si es necesario.
*/
//Precarga de Ficheros de Utilidades Base
include('/js/utiles/formularios.js');
include('/js/utiles/estilos.js');
include('/js/utiles/validacion.js');
include('/js/utiles/cookies.js');
include('/js/utiles/fechas.js');
include('/js/utiles/errores.js');
include('/js/reservas/calendar.js');

/*###########################################################################################################
#
#          Configuracion
#------------------------------------------------------------------------------------------------------------
#   Funciones para guardar ciertos parametros de configuración que usaran el resto
#   de los scripts.
#----------------------------------------------------------------------------------------------------------*/

//Vectos donde se deben guardar los parametros de configuracion
var Config = new Array()

//Funcion para almacenar valores en el vector
function ListadoConfiguracion(nombre, valor){
	Config[nombre] = valor;
}

var _globalYaAbiertaRes = false;

function AbrirCondiciones(objForm){
 	var localFlights = '|VDE|FUE|LPA|GMZ|SPC|ACE|TFN|TFS|TCI|';
	var origen = objForm.elements['from'].value;
	var destino = objForm.elements['destination'].value;
	var adult = objForm.elements['resAdults'].value;
	var nin = objForm.elements['resChildrens'].value;
	var inf = objForm.elements['resInfants'].value;
	var isInactive = getCookie('bintercanariascond');
	if (isInactive == 1) {return;}
	if ( localFlights.indexOf('|'+origen+'|') == -1 || localFlights.indexOf('|'+destino+'|') == -1) {return;}
	if (adult == 0 && nin == 0 && inf == 0) {return;}
	//Comprobar que solo se abre una vez por sesión
	if (_globalYaAbiertaRes) {return;}
	window.open('/compraMgr.php?opciones=2_1&accion=showResConditions','binterWin','width=730,height=495,scrollbars=yes');
	_globalYaAbiertaRes = true;
}

function ValidarFormulario(objForm){
	//Se encarga de rellenar el vector de errores si los hubiera
	var familiaNumerosa = objForm.elements['flagFamiliaNumerosa'].checked;
	CondicionesValidacion(objForm);
	//Si hay errores los mostramos
	var ok = MuestraErrores(); 
	if (ok){
		if (!familiaNumerosa){
			CreaCargaAjax(MensajesErrores['MensajeAjax']);
		}
	}
	return ok;	
}

function CondicionesValidacion(objForm){
	var origen = objForm.elements['from'].value;
	var destino = objForm.elements['destination'].value;
	var salida = objForm.elements['departureDate'].value;
	var llegada = objForm.elements['returnDate'].value;
	var radult = parseInt(objForm.elements['resAdults'].value);
	var rnin = parseInt(objForm.elements['resChildrens'].value);
	var rinf = parseInt(objForm.elements['resInfants'].value);
	var adult = parseInt(objForm.elements['adults'].value);
	var nin = parseInt(objForm.elements['childrens'].value);
	var inf = parseInt(objForm.elements['infants'].value);
	var tipo = getRadioButton('oneWayOrRoundTrip', objForm.name);
	var familiaNumerosa = objForm.elements['flagFamiliaNumerosa'].checked;
	try{
		var temp1 = objForm.elements['horarioIda'].value;
		var temp2 = objForm.elements['horarioVuelta'].value;
	}catch(e){
		var temp1='cualquiera';
		var temp2='cualquiera';
	}
	var horarioIda=ValorHorario(temp1, false);
	var horarioVuelta=ValorHorario(temp2, true);
	try{
		var tarifasEspeciales = objForm.elements['tarifasEspeciales'].value;
	}catch(e){
		var tarifasEspeciales='';
	}

	BorrarErrores();
	//**********************
	//COMPROBACIONES
	//**********************
		//El origen no puede estar vacío
		if (origen==''){
			AnadirError('OrigenVacio', 'textoOrigen');
		}
		//El destino no puede estar vacío
		if (destino==''){
			AnadirError('DestinoVacio', 'textoDestino');
		}
		//El origen y el destino deben ser distintos
		if (origen!='' && origen==destino){
			AnadirError('AeropuertosIguales', 'textoOrigen textoDestino');
		}
		//El fecha de salida no puede estar vacía
		if (salida==''){
			AnadirError('SalidaVacio', 'textoSalida');
		}else{
			var hoy = creaFecha('HOY').getTime();
			var fSalida= creaFecha(salida).getTime();
			if (fSalida<hoy) AnadirError('SalidaPasada', 'textoSalida');
		}
		//Si el viaje es de Ida y Vuelta, la fecha de Vuelta no puede estar vacía
		if (tipo=="RT"){
			if (llegada=='') AnadirError('LlegadaVacio', 'textoLlegada');
			else{
				var fSalida= creaFecha(salida).getTime();
				var fLlegada= creaFecha(llegada).getTime();
				if (fLlegada<fSalida){
					AnadirError('LlegadaPasada', 'textoLlegada');
				}else if (fSalida==fLlegada){
					if (horarioIda>=horarioVuelta){
						AnadirError('LlegadaPasada', 'textoLlegada');
					}
				}
			}
		}
		//No pueden viajar + de 9 pasajeros
		if (radult+rnin+rinf+adult+nin+inf>9){
			AnadirError('DemasiadosPasajeros', 'textoPasajeros textoResidentes')
		}
		//Debe viajar algún adulto o niño
		if (radult+rnin+adult+nin==0){
			AnadirError('NingunPasajero', 'textoPasajeros textoResidentes');
		}
		//No pueden viajar + infantes que adultos
		if (radult+adult<rinf+inf){
			AnadirError('DemasiadosInfantes', 'textoPasajeros textoResidentes');
		}
		
		if (tarifasEspeciales=='MDBO' && rnin+rinf+nin+inf>0){
			AnadirError('Mayor65Anos', 'textoPasajeros textoResidentes textoTarifasEspeciales');			
		}	
		return (Errores.length==0);
}


var f_tope_inicio;
var f_tope_fin;
function IniciaFechas(tope_inicio, tope_fin){
	//Ocultamos los combos de fechas
	var combos = getElementsByClassName('fechaCombo');
	for (var i=0; i<combos.length; i++){
		combos[i].style.display='none';
	}
	//Mostramos las fecha de Javascript
	var combos = getElementsByClassName('fechaJS');
	for (var i=0; i<combos.length; i++){
		combos[i].style.display='block';
	}
	//Ponemos en el TextBox la fecha de los Combos
	var fecha = new Array();
	fecha[0] = '00'+document.getElementById('diaIda').value; 
	fecha[0] = fecha[0].substr(fecha[0].length-2,2);
	fecha[1] = '00'+document.getElementById('mesIda').value; 
	fecha[1] = fecha[1].substr(fecha[1].length-2,2);
	fecha[2] = document.getElementById('agnoIda').value;
	var fechainicial = fecha.join("/");
	if (fechainicial.substr(0,2)!="00" && fechainicial.substr(3,2)!="00") document.getElementById('departureDate').value=fechainicial;
	fecha = new Array();
	fecha[0] = '00'+document.getElementById('diaVuelta').value; fecha[0] = fecha[0].substr(fecha[0].length-2,2);
	fecha[1] = '00'+document.getElementById('mesVuelta').value; fecha[1] = fecha[1].substr(fecha[1].length-2,2);
	fecha[2] = document.getElementById('agnoVuelta').value;
	var fechafinal = fecha.join("/");
	if (fechafinal.substr(0,2)!="00" && fechafinal.substr(3,2)!="00") document.getElementById('returnDate').value=fechafinal;
	
	if (tope_inicio) f_tope_inicio = creaFecha(tope_inicio);
	if (tope_fin) f_tope_fin = creaFecha(tope_fin);
}

function ActualizaFechaRegreso(){
	var vuelta = document.getElementById('returnDate').value;
	if (vuelta!=""){
		var ida = document.getElementById('departureDate').value;
		var fechaFinal=Maximo(creaFecha(ida), creaFecha(vuelta));
		var fecha = new Array();
		fecha[0] = '00'+fechaFinal.getDate(); 
		fecha[0] = fecha[0].substr(fecha[0].length-2,2);
		fecha[1] = '00'+(fechaFinal.getMonth()+1); 
		fecha[1] = fecha[1].substr(fecha[1].length-2,2);
		fecha[2] = fechaFinal.getFullYear();
		document.getElementById('returnDate').value=fecha.join("/");
	}
}

function ValorHorario(texto, superior){
	switch(texto){
		case "cualquiera":
			if (superior) return 23;
			else return 0;
			break;
		case "manana":
			if (superior) return parseInt(Config['horarioTarde'])-1;
			else return 0;
			break;
		case "tarde":
			if (superior) return parseInt(Config['horarioNoche'])-1;
			else return parseInt(Config['horarioTarde'])-1;
			break;
		case "noche":
			if (superior) return 23;
			else return parseInt(Config['horarioNoche'])-1;
			break;
		default:
			return parseInt(texto, 10);
			break;
	}
}

function Minimo(a, b){
	if (!a && !b) return false;
	else if (!a) return b;
	else if (!b) return a;
	else if (a<b) return a;
	else return b;
}

function Maximo(a, b){
	if (!a && !b) return false;
	else if (!a) return b;
	else if (!b) return a;
	else if (a>b) return a;
	else return b;
}
/*
	Bloquea o desbloquea un elemento del formulario, se encarga de guardar el valor
	que tiene al ser bloqueado, para volver a ponerlo al desbloquear
	formulario - es el objeto formulario
	nombreElemento - el nombre del elemento a activar/desactivar
	bloquear (boolean) Indica si bloqueamos o desbloqueamos
	valorBloqueado - Es el valor que ponemos al elemento al bloquearlo
*/
var estadoElementosBloqueados = new Array()
function BloqueaCampo(formulario, nombreElemento, bloquear, valorBloqueado){
	var elemento = formulario.elements[nombreElemento];
	if (bloquear){
		if (!elemento.disabled){
			if (elemento.type=="checkbox"){
				estadoElementosBloqueados[nombreElemento] = elemento.checked;
				elemento.checked = valorBloqueado;
			}else{
				estadoElementosBloqueados[nombreElemento] = elemento.value;
				elemento.value = valorBloqueado;
			}
			elemento.disabled=true;
		}
	}else{
		if (elemento.disabled){
			if (elemento.type=="checkbox") elemento.checked = estadoElementosBloqueados[nombreElemento];
			else elemento.value = estadoElementosBloqueados[nombreElemento];
			elemento.disabled=false;
		}
	}
}

//Va chequeando campo a campo, si es necesario bloquearlo o desbloquearlo
function ChequearBloqueoCampos(formulario, mostrarMensaje){
	var condicion;
	//-----------------
	//Busqueda con Calendario (depende de DepartureDate)
	//-----------------
	var calendario = formulario.elements['nullchkflex'];
	var f=creaFecha(formulario.elements['departureDate'].value);
	var hoy=creaFecha('HOY');
	var dias=Math.ceil((f-hoy)/86400000);
	condicion = (dias>Config['DiasCalendario'] && !calendario.disabled);
	BloqueaCampo(formulario, 'nullchkflex', condicion, false);
	if (condicion && calendario.checked && mostrarMensaje){
		MuestraErrores(new Array('Calendario2Meses'), new Array());
	}
	//-----------------
	//HorarioIda (depende de BusquedaCalendario)
	//-----------------
	condicion = calendario.checked;
	BloqueaCampo(formulario, 'horarioIda', condicion, "cualquiera");
	//-----------------
	//HorarioVuelta (depende de BusquedaCalendario & oneWayOrRoundTrip)
	//-----------------
	condicion = calendario.checked || getRadioButton("oneWayOrRoundTrip", formulario.name)=="OW";
	BloqueaCampo(formulario, 'horarioVuelta', condicion, "cualquiera");
	//-----------------
	//Vuelos Directos (depende del origen, destino, calendario horarioIda, horarioVuelta)
	//-----------------
	condicion = (VueloInternacional(formulario) || calendario.checked || horariosActivos(formulario));
	BloqueaCampo(formulario, 'soloVuelosDirectos', condicion, false);
	//-----------------
	//Tarifas Especiales y tarifa universitaria (depende de origen, destino )
	//-----------------
	//condicion = (VueloInternacional(formulario) || calendario.checked);
	condicion = (VueloInternacional(formulario));
	BloqueaCampo(formulario, 'tarifasEspeciales', condicion, "");	
	BloqueaCampo(formulario, 'tarifaUniversitaria', condicion, "");
	
	//-----------------
	//BloqueaPasajeros (depende de tarifasEspeciales)
	//-----------------
	condicion = (formulario.elements['tarifasEspeciales'].value=="MDBO"||formulario.elements['tarifasEspeciales'].value=="MDZZ"||formulario.elements['tarifaUniversitaria'].checked);
	BloqueaCampo(formulario, 'resChildrens', condicion, 0);
	BloqueaCampo(formulario, 'resInfants', condicion, 0);
	BloqueaCampo(formulario, 'childrens', condicion, 0);
	BloqueaCampo(formulario, 'infants', condicion, 0);
	//-----------------
	//FamiliaNumerosa (depende de origen y destino)
	//-----------------
	condicion = VueloInternacional(formulario);
	BloqueaCampo(formulario, 'flagFamiliaNumerosa', condicion, false);
}

function horariosActivos(formulario){
	var a = formulario.elements['horarioIda'].value!="cualquiera";
	var b = formulario.elements['horarioVuelta'].value!="cualquiera";
	return (a || b);
}

var destinosInternacionales = new Array();
function AnadirDestinoInternacional(destino){
	destinosInternacionales[destinosInternacionales.length] = destino;
}

function VueloInternacional(formulario){
	var origen = formulario.elements['from'].value;
	var destino = formulario.elements['destination'].value;
	if (origen && destino){
		return in_array(origen, destinosInternacionales) || in_array(destino, destinosInternacionales);
	}return false;
}
