var cajaFecha;
var iOrdenDiaMes=1;
var arrayMeses;
var mesActual;
var yearActual;
var fechaMax;
var fechaMin;
var arrDias;

/****************************************************
FUNCIÓN QUE MUESTRA EL CALENDARIO Y OCULTA LOS CAMPOS
DE ORIGEN, DESTINO, TIPO DE VIAJE Y CLASE
*****************************************************/
function mostrarCalendario(caja, claseCss){

	var idioma = $("#txtIdioma").attr("value");

	arrayMeses = obtenerMeses(idioma);

	//hay que dejar el dia minimo y el mes minimo como al principio
	diaSalida = dCurDate.getDate();
	mesSalida = dCurDate.getMonth();
	mesSalida++;//
	fUpdateCal(0);

	//se visualiza el calendario
	//var estilo = "position: absolute; top:"+py+"px; left: "+px+"px; width:150px; height:100px; background-color: white; z-index: 1; visibility: visible;"
	
	var estilo = "display: block;"
	$("#capaCalendario").attr("class", claseCss);
	$("#capaCalendario").attr("style", estilo);
	$("#frame1").attr("class", claseCss);
	$("#frame1").attr("style", estilo + " z-index: 39;");
	//document.getElementById('frame1').style.display = 'block';
	//document.getElementById('frame1').style.zIndex = 1;
	
	/*$("#origen").hide("fast");
	$("#destino").hide("fast");
	$("#tipo").hide("fast");
	$("#clase").hide("fast");
	$("#ocupacion").hide("fast");
	*/
	cajaFecha = caja; //caja de texto donde va a ir la fecha seleccionada	
}

/***************************************************************************
Funcion que actualiza el caledario para poner como el primer dia permitido
el dia de la fecha de salida seleccionada
***************************************************************************/
function actualizarCalendario(caja, claseCss){
	var idioma = $("#txtIdioma").attr("value");
	arrayMeses = obtenerMeses(idioma);

	//se actualiza el calendario respecto a la fecha de salida seleccionada
	if(document.forms.frmInicio.txtFechaSalida.value!=""){
		var fechaSalida = $("#txtFechaSalida").attr("value");
		//se obtiene el dia según el formato correspondiente
		if(iOrdenDiaMes==2){// mm/dd/yyyy
			diaSalida = fechaSalida.substring(3, 5);
			mesSalida = fechaSalida.substring(0, 2);
			yearSalida = fechaSalida.substring(6);
			document.frmInicio.hdMonthSel.value = mesSalida;
			document.frmInicio.selYear.value = yearSalida;
		}else{	// o dd/mm/yyyy
			diaSalida = fechaSalida.substring(0, 2);
			mesSalida = fechaSalida.substring(3, 5);
			yearSalida = fechaSalida.substring(6);
			document.frmInicio.hdMonthSel.value = mesSalida;
			document.frmInicio.selYear.value = yearSalida;
		}
	}else{//no hay fecha de salida y que dejar el dia minimo y el mes minimo como al principio
		diaSalida = dCurDate.getDate();
		mesSalida = dCurDate.getMonth();
		yearSalida = dCurDate.getFullYear();
	}

	fUpdateCal(0);

	//se visualiza el calendario (si no vienen coordenadas no se ponen en el estilo
	var estilo = "display: block;"
	$("#capaCalendario").attr("class", claseCss);
	$("#capaCalendario").attr("style", estilo);
	$("#frame1").attr("class", claseCss);
	$("#frame1").attr("style", estilo + " z-index: 39;");
			
	cajaFecha = caja; //caja de texto donde va a ir la fecha seleccionada	
}

function mostrarCalendarioList(caja, claseCss){

	var idioma = $("#txtIdioma").attr("value");

	arrayMeses = obtenerMeses(idioma);

	//hay que dejar el dia minimo y el mes minimo como al principio
	diaSalida = dCurDate.getDate();
	mesSalida = dCurDate.getMonth();
	mesSalida++;//
	fUpdateCal(0);

	//se visualiza el calendario
	var estilo = "display: block;"
	$("#capaCalendarioListado").attr("class", claseCss);
	$("#capaCalendarioListado").attr("style", estilo);
	$("#frame1").attr("class", claseCss);
	$("#frame1").attr("style", estilo + " z-index: 39;");

	//se visualiza el calendario
//	$("#capaCalendarioListado").attr("style", "visibility: visible;");

	cajaFecha = caja; //caja de texto donde va a ir la fecha seleccionada	
}

/***************************************************************************
Funcion que actualiza el caledario para poner como el primer dia permitido
el dia de la fecha de salida seleccionada
***************************************************************************/
function actualizarCalendarioList(caja, claseCss){
	var idioma = $("#txtIdioma").attr("value");
	arrayMeses = obtenerMeses(idioma);

	//se actualiza el calendario respecto a la fecha de salida seleccionada
	if(document.forms.frmInicio.txtFechaSalida.value!=""){
		var fechaSalida = $("#txtFechaSalida").attr("value");
		//se obtiene el dia según el formato correspondiente
		if(iOrdenDiaMes==2){// mm/dd/yyyy
			diaSalida = fechaSalida.substring(3, 5);
			mesSalida = fechaSalida.substring(0, 2);
			yearSalida = fechaSalida.substring(6);
			document.frmInicio.hdMonthSel.value = mesSalida;
			document.frmInicio.selYear.value = yearSalida;
		}else{	// o dd/mm/yyyy
			diaSalida = fechaSalida.substring(0, 2);
			mesSalida = fechaSalida.substring(3, 5);
			yearSalida = fechaSalida.substring(6);
			document.frmInicio.hdMonthSel.value = mesSalida;
			document.frmInicio.selYear.value = yearSalida;
		}
	}else{//no hay fecha de salida y que dejar el dia minimo y el mes minimo como al principio
		diaSalida = dCurDate.getDate();
		mesSalida = dCurDate.getMonth();	
		yearSalida = dCurDate.getFullYear();
	}

	fUpdateCal(0);
	
	var estilo = "";

	//se visualiza el calendario (si no vienen coordenadas no se ponen en el estilo
	var estilo = "display: block;"
	$("#capaCalendarioListado").attr("class", claseCss);
	$("#capaCalendarioListado").attr("style", estilo);
	$("#frame1").attr("class", claseCss);
	$("#frame1").attr("style", estilo + " z-index: 39;");
	
	cajaFecha = caja; //caja de texto donde va a ir la fecha seleccionada	
}

function fSetSelectedDay(id, pagina){
	var dia = $("#"+id).text();
	//si el dia esta deshabilitado no se puede seleccionar
	if($("#"+id).attr("class") == "datoDiaMesDeshabilitado"
		|| $("#"+id).attr("class") == "datoDomingoMesDeshabilitado"
		|| $("#"+id).attr("class") == "datoDiaVacio"){
		return false;
	}
	document.frmInicio.calSelectedDate.value = parseInt(dia,10);

	var mes = parseInt(document.frmInicio.hdMonthSel.value,10);
	if(mes < 10){
		mes = "0" + mes;
	}
	aceptar(document.frmInicio.calSelectedDate.value, mes, document.frmInicio.selYear.value, pagina);
}
function aceptar(resDia,resMes,resAnio, pagina){
	var aux; 
	if(resDia<10){ 
		aux="0"+resDia;
	}else{
		aux=resDia;
	}
	//se pone el formato correspondiente
	if(iOrdenDiaMes==2){// mm/dd/yyyy
		cajaFecha.value = resMes+"/"+aux+"/"+resAnio;
	}else{	// o dd/mm/yyyy
		cajaFecha.value = aux+"/"+resMes+"/"+resAnio;
	}

	//se oculta el calendario

	if (pagina == 'B'){
		$("#ocupacion").show("fast");
		$("#capaCalendario").attr("style", "display: none;");
	} else {
		$("#ocupacionListado").show("fast");
		$("#capaCalendarioListado").attr("style", "display: none;");
	}
	
	$("#frame1").attr("style", "display: none;");
	
	/*$("#origen").show("fast");
	$("#destino").show("fast");
	$("#tipo").show("fast");
	$("#clase").show("fast");
	*/
//	$("[name=cmbAdultos]").show("fast");
//	$("[name=cmbNinos]").show("fast");
	
	if(document.forms.frmInicio.txtFechaVuelta){
		if(document.forms.frmInicio.txtFechaVuelta.value == ""){
			document.forms.frmInicio.txtFechaVuelta.value = document.forms.frmInicio.txtFechaSalida.value;
		}
	}
}

function fGetDaysInMonth(iMonth, iYear) {
	var dPrevDate = new Date(iYear, iMonth, 0);
	return dPrevDate.getDate();
}
function fBuildCal(iYear, iMonth, ordenDiaMes) {

	mesActual = iMonth;
	yearActual = iYear
	var aMonth = new Array();
	aMonth[0] = new Array(7);
	aMonth[1] = new Array(7);
	aMonth[2] = new Array(7);
	aMonth[3] = new Array(7);
	aMonth[4] = new Array(7);
	aMonth[5] = new Array(7);
	aMonth[6] = new Array(7);

	var dCalDate = new Date(iYear, iMonth-1, 1);
	var iDayOfFirst = dCalDate.getUTCDay();

	if(ordenDiaMes){
		iOrdenDiaMes = ordenDiaMes;
	}

	if(iOrdenDiaMes == 2){//se pinta el domingo como el primer dia de la semana
		iDayOfFirst = iDayOfFirst + 1;
		aMonth[0][0] = arrDias[0];
		aMonth[0][1] = arrDias[1];
		aMonth[0][2] = arrDias[2];
		aMonth[0][3] = arrDias[3];
		aMonth[0][4] = arrDias[4];
		aMonth[0][5] = arrDias[5];
		aMonth[0][6] = arrDias[6];

	}else{
		aMonth[0][0] = arrDias[1];
		aMonth[0][1] = arrDias[2];
		aMonth[0][2] = arrDias[3];
		aMonth[0][3] = arrDias[4];
		aMonth[0][4] = arrDias[5];
		aMonth[0][5] = arrDias[6];
		aMonth[0][6] = arrDias[0];
	}
	
	//se comprueba si el mes tiene 28, 30 o 31 dias
	var iDaysInMonth = fGetDaysInMonth(iMonth, iYear);
	var iVarDate = 1;
	var i, d, w;
	for (d = iDayOfFirst; d < 7; d++) {
		aMonth[1][d] = iVarDate;
		iVarDate++;
	}
	for (w = 2; w < 7; w++) {
		for (d = 0; d < 7; d++) {
			if (iVarDate <= iDaysInMonth){
				aMonth[w][d] = iVarDate;
				iVarDate++;
			}
		}
	}
	return aMonth;
}
/**************************************************
FUNCIÓN QUE DIBUJA UN CALENDARIO EN LA PÁGINA JSP.
***************************************************/
function fDrawCal(iYear, iMonth, ordenDiaMes, pagina) {

	//se accede al xml de dias para obtener el literal de cada dia de la semana	
	arrDias = obtenerLitDias();

	var myMonth;
	myMonth = fBuildCal(iYear, iMonth, ordenDiaMes);

	var id = 0;

	document.write("<tr>");
	document.write("<td class='celdaDiaSemana'><font size=1 class='datoDiaSemana'>" + myMonth[0][0] + "</font></td>");
	document.write("<td class='celdaDiaSemana'><font size=1 class='datoDiaSemana'>" + myMonth[0][1] + "</font></td>");
	document.write("<td class='celdaDiaSemana'><font size=1 class='datoDiaSemana'>" + myMonth[0][2] + "</font></td>");
	document.write("<td class='celdaDiaSemana'><font size=1 class='datoDiaSemana'>" + myMonth[0][3] + "</font></td>");
	document.write("<td class='celdaDiaSemana'><font size=1 class='datoDiaSemana'>" + myMonth[0][4] + "</font></td>");
	document.write("<td class='celdaDiaSemana'><font size=1 class='datoDiaSemana'>" + myMonth[0][5] + "</font></td>");
	document.write("<td class='celdaDiaSemana'><font size=1 class='datoDiaSemana'>" + myMonth[0][6] + "</font></td>");
	document.write("</tr>");

	for (w = 1; w < 7; w++) {
		document.write("<tr>")
		for (d = 0; d < 7; d++) {
			id++;
			if (d==6){ //si es domingo
				if(!isNaN(myMonth[w][d])){ // y si la celda correspondiente contiene un dia (numero) se pone su estilo
					document.write("<td id='calCell"+id+"' class='celdaDomingo' onclick=\"fSetSelectedDay("+id+",'"+pagina+"')\">");
				}else{ //si no, la celda establece su color de fondo blanco
					document.write("<td id='calCell"+id+"' class='celdaDomingoVacio' onclick=\"fSetSelectedDay("+id+",'"+pagina+"')\">");
				}
			}else{ // si no es domingo no se pone a la celda ningun color
				document.write("<td id='calCell"+id+"' class='celdaDiaMes' onclick=\"fSetSelectedDay("+id+",'"+pagina+"')\">");
			}
			if (!isNaN(myMonth[w][d])){ // si el valor es un numero (dia) ...
				if(myMonth[w][d] < diaSalida){ // y si el dia es menor al de salida se pone el color de deshabilitado
					if (d==6){// si es domingo, se pone el color del numero blanco
						//document.write("<font id='"+id+"' class='datoDomingoMes'>" + myMonth[w][d] + "</font>");
						document.write("<font id='"+id+"' class='datoDomingoMes'></font>");
					}else{// si no es domingo, se pone el color del numero gris
						document.write("<font id='"+id+"' class='datoDiaMes'></font>");
					}
			    }else{// si el dia no es menor al de salida se pone el color de habilitado
					document.write("<font id='"+id+"' class='datoDiaMesDeshabilitado'></font>");
			    }
			}else{//no hay dato en la celda
				document.write("<font id='"+id+"' class='datoDiaVacio'></font>");
			}
			document.write("</td>")
		}
	 	document.write("</tr>");
	}
}
/******************************************************************
FUNCIÓN QUE ACTUALIZA EL CALENDARIO CUANDO SE PASA DE UN MES A OTRO
PULSANDO LAS FLECHAS DE SIGUIENTE O ANTERIOR DENTRO DEL CALENDARIO
*******************************************************************/
function fUpdateCal(id){

	var iYear = document.frmInicio.selYear.value;
	var iMonth = document.frmInicio.hdMonthSel.value;
	//var iMonth = mesSalida;

	iMonth = parseInt(iMonth,10) + parseInt(id,10);

	var iMonthAux = new String();
	iMonthAux = ""+iMonth;

	if(iMonthAux.length == 1){
		iMonthAux="0"+iMonthAux;
	}
	//si el mes pasa de diciembre cambiamos de año
	if(iMonth > 12){
		iMonth = 1;
		iMonthAux = "01";
		iYear = parseInt(iYear,10) + parseInt(1);
	}
	if(iMonth < 1){
		iMonth = 12;
		iMonthAux = "12";
		iYear -= 1;
	}
	var anioMesActu = "" + iYear + iMonthAux;
	var anioMesMax = fechaMax.substring(0,6);
	var anioMesMin = fechaMin.substring(0,6);

	// no permitimos que vaya al mes siguiente al máximo
	// permitido (fecha actual + 60)
	if (anioMesActu > anioMesMax){
		return false;
	}
	if(anioMesActu < anioMesMin){
		return false;
	}
	myMonth = fBuildCal(iYear, iMonth);
	var estiloCelda;
	var claseEstilo;
	var id=0;

	for (w = 1; w < 7; w++) {
		for (d = 0; d < 7; d++) {
			id++;
			var idDatoCelda = $("#"+id);
			if (!isNaN(myMonth[w][d])) {
				//if(myMonth[w][d]<diaSalida && iMonth==mesSalida && iYear==dCurDate.getFullYear()){
				if(myMonth[w][d]<diaSalida && iMonth==mesSalida && iYear==yearSalida){
					if(d==6){
						estiloCelda = "celdaDomingo";
						claseEstilo = "datoDomingoMesDeshabilitado";
					}else{
						estiloCelda = "celdaDiaMes";
						claseEstilo = "datoDiaMesDeshabilitado";
					}
				}else if (myMonth[w][d]>(dDayOfMonthMax - 1) && iMonth==dMonthMax && iYear==dCurYearMax){
					if(d==6){
						estiloCelda = "celdaDomingo";
						claseEstilo = "datoDomingoMesDeshabilitado";
					}else{
						estiloCelda = "celdaDiaMes";
						claseEstilo = "datoDiaMesDeshabilitado";
					}
				}else{
					if(d==6){
						estiloCelda = "celdaDomingo";
						claseEstilo = "datoDomingoMes";
					}else{
						estiloCelda = "celdaDiaMes";
						claseEstilo = "datoDiaMes";
					}
				}
				
				idDatoCelda.text(myMonth[w][d]);
			} else {
				estiloCelda = "celdaDiaMes";
				claseEstilo = "datoDiaVacio";
				idDatoCelda.text("");
			}
			idDatoCelda.attr("class", claseEstilo);
			$("#calCell"+id).attr("class", estiloCelda);
		}
	}
	document.frmInicio.calSelectedDate.value="";
	document.frmInicio.selMonth.value=arrayMeses[iMonth-1] + " " +iYear;
	
	document.frmInicio.hdMonthSel.value=iMonth;
	document.frmInicio.selYear.value=iYear;
}

/****************************************************************
FUNCIÓN QUE OCULTA EL CAMPO DE FECHA DE LLEGADA CUANDO SE PULSA
EL TIPO DE VIAJE DE SÓLO IDA
****************************************************************
function ocultarFechaLlegada (){
	
	var fechaLlegada = $("#fechaLlegada");
	var estiloDivFechaLlegada = "position: absolute; top:0px; left: 170px; width:220px; height:10px;  z-index: 2;"
	fechaLlegada.attr("style", estiloDivFechaLlegada);

	if (document.frmInicio.cmbTipo.value=="2"){
		fechaLlegada.hide(0);
	}else {
		document.forms.frmInicio.txtFechaVuelta.value= "";
		fechaLlegada.show(0);
	}
}
******************************************************************/
function ocultarFechaLlegada (){
	
	if (document.frmInicio.cmbTipo.value=="2"){
		$("#labelRegreso").attr("style", "visibility:hidden;");
		$("#txtFechaVuelta").attr("style", "visibility:hidden;");
		$("#calend2").attr("style", "visibility:hidden;");

	}else {
		$("#labelRegreso").attr("style", "visibility:visible;");
		$("#txtFechaVuelta").attr("style", "visibility:visible;");
		$("#calend2").attr("style", "visibility:visible;");
	}
}


/*******************************************
Funcion que obtiene los meses del calendario
accdiendo a meses.xml
*******************************************/
function obtenerMeses(idioma){

	var arrMeses=new Array();
	var mes = "";
	var i=0;
	var param = 'strIdiomaOrigen=' + idioma + '&CXMLHTTP=SI';
	
	//llamada al xml 'meses.xml' para obtener las descripciones
	$.ajax({
	    url: 'Tren?ACCION=MESES',
		type: 'POST',
		dataType: "xml",
		async: false,
		data: param,	  
		success: function(respuestaXml) {
	  		$(respuestaXml).find("meses").each(function(){
				$(this).find("mes").each(function(){
					mes = $(this).find(idioma).text();
					arrMeses[i] = mes;
					i++;
				});//close each( 
			});//close each( 
		}
	});//fin llamada al xml
	document.frmInicio.selMonth.value=arrMeses[mesActual - 1] + " " +yearActual;
	
	return arrMeses;
}


/*******************************************
Funcion que obtiene el literal de los dias 
accdiendo a diasCalendario.xml
*******************************************/
function obtenerLitDias(){
	var idioma = $("#txtIdioma").attr("value");
	var litDias = new Array(7);
	var param = 'strIdiomaOrigen=' + idioma + '&CXMLHTTP=SI';

	//llamada al xml 'diasSemana.xml' para obtener las descripciones
	$.ajax({
	    url: 'Tren?ACCION=DIASCALENDARIO',		
		type: 'POST',
		dataType: "xml",
		async: false,
		data: param,	  
		success: function(respuestaXml){
	  		$(respuestaXml).find("diasSemana").each(function(){
	  			var i=0;
	  			for(i=0; i<litDias.length; i++){
					$(this).find("dia[num="+i+"]").each(function(){
						litDias[i] = $(this).find(idioma).text();
					});//close each( 
				}
			});//close each( 
		}
	});//fin llamada al xml
	
	return litDias;
}

/****************************************************
FUNCIÓN QUE MUESTRA EL CALENDARIO Y OCULTA LOS CAMPOS
DE ORIGEN, DESTINO, TIPO DE VIAJE Y CLASE
*****************************************************/
function cerrarCalendario(){
	$("#capaCalendario").attr("style", "display: none;");
	$("#frame1").attr("style", "display: none;");
}

/****************************************************
FUNCIÓN QUE MUESTRA EL CALENDARIO Y OCULTA LOS CAMPOS
DE ORIGEN, DESTINO, TIPO DE VIAJE Y CLASE
*****************************************************/
function cerrarCalendarioListado(){
	$("#capaCalendarioListado").attr("style", "display: none;");	
	$("#frame1").attr("style", "display: none;");
}


