//================================================================================
// Nombre: calendario.js
// Autor:  Solmelia
// Descripción: Tratamiento de calendario
//================================================================================
var ie		= navigator.appName == "Microsoft Internet Explorer";
var ns6		= document.getElementById&&!document.all;
var ns4		= document.layers;
var opera 	= navigator.userAgent.indexOf("Opera") > -1;
var opera5	= (navigator.appVersion.indexOf("MSIE 5")!=-1 && navigator.userAgent.indexOf("Opera 5")!=-1)?true:false;
var opera6	= (navigator.appVersion.indexOf("MSIE 5")!=-1 && navigator.userAgent.indexOf("Opera 6")!=-1)?true:false;
var mac		= (navigator.userAgent.indexOf("Mac")!=-1);
var win;


// Variables globales con los campos de retorno de las fechas
var return_form;
var return_en_dia;
var return_en_mesanyo;
var return_sa_dia;
var return_sa_mesanyo;

var fechaIniAnterior;
var fechaFinAnterior;

var calendar = new CalendarPopup("calendarDiv");
calendar.monthAbbreviations   = yxMonths;
calendar.monthNames  = yxMonthsLarge;
calendar.dayHeaders  = dayHeaders;
calendar.setWeekStartDay(weekStartDay);

//Configura el calendario para que las fechas anteriores a la actual no sean seleccionables
var ayer = new Date();
ayer.setDate(ayer.getDate()-1);
calendar.addDisabledDates(null, (ayer.getMonth()+1) + "/" +  ayer.getDate()+ "/" + ayer.getFullYear());

calendar.offsetX = 0;
calendar.offsetY = 25;

//*************************************************************************	
//
// FUNCIONES DE TRATAMIENTO DE FECHAS CON EL FORMATO SOLMELIA.COM 
// Dia    = DD-MONTH 
// Anyo = YYYY
//	
//*************************************************************************

/**
 * selectDato.
 * Selecciona el campo de un select de
 *
 * @param lista: Nombre del campo del combo
 * @param valor: Valor que se tiene que seleccionar
 */
function selectDato(lista,valor){
  for (var i=0;i<lista.length;i++){
    if (lista.options[i].value == valor){
      lista.options.selectedIndex = i;
      break;
    }
  }
}

//=========================================
// dia = 1,2,3,4,...31
// mes = 0,1,2,3, ...11
// anyo = 2005,2006 ...
// incDays, Incremento de dias 0,1,2,..
// incMonths, Incremento de meses 0,1,2,..
// incYears Incremento de años 0,1,2,..
//=========================================
function DateAdd(dia, mes, anyo, incDays, incMonths, incYears)
{
	var sAux = ""
	var startDate 	= new Date(anyo,mes,dia,0,0,0);
	sAux = DateAddFecha(startDate, incDays, incMonths, incYears);
	return sAux;
}

function DateAddFecha(startDate, incDays, incMonths, incYears)
{
	var sAux 	= "";
	var returnDate 	= new Date(startDate.getTime());
	var yearsToAdd 	= incYears;
	var month 	= returnDate.getMonth() + incMonths;
	if (month > 11)
	{
		yearsToAdd 	= Math.floor((month+1)/12);
		month 		-= 12*yearsToAdd;
		yearsToAdd 	+= incYears;
	}
	returnDate.setMonth(month);
	returnDate.setFullYear(returnDate.getFullYear()	+ yearsToAdd);
	//returnDate.setTime(returnDate.getTime()+60000*60*24*incDays);
	returnDate.setDate(returnDate.getDate()+incDays);
	if(returnDate.getDate()<10)
		sAux +="0"
	sAux +=returnDate.getDate()+"/"
	if((returnDate.getMonth() + 1)<10)
		sAux +="0"
	sAux +=(returnDate.getMonth() + 1)+"/"+ returnDate.getFullYear();
	return sAux;
}	
//
// Trata la fecha hasta en función de la fecha de inicio
//
function adaptahasta(form, en_dia, en_mesanyo, sa_dia, sa_mesanyo){
  // Obtenemos los combos
  var comboDiaIni = eval("document."+form+"."+en_dia);
  var comboMesAnyoIni = eval("document."+form+"."+en_mesanyo);
  var comboDiaFin = eval("document."+form+"."+sa_dia);
  var comboMesAnyoFin = eval("document."+form+"."+sa_mesanyo);
  // Obtenemos los valores de los combos
  var dia=comboDiaFin.options[comboDiaFin.selectedIndex].value;
  var mesano=comboMesAnyoFin.options[comboMesAnyoFin.selectedIndex].value.split("-");
  var mes=mesano[0];
  var anyo=mesano[1];
  var diad=comboDiaIni.options[comboDiaIni.selectedIndex].value;
  var mesanod=comboMesAnyoIni.options[comboMesAnyoIni.selectedIndex].value.split("-");
  var mesd=mesanod[0];
  var anyod=mesanod[1];
  fhasta= new Date(anyo, mes-1, dia);
  fdesde=new Date(anyod, mesd-1, diad);

  var hoy=new Date();
  fdesde2=fdesde.getTime()+63*24*60*60*1000;

  if (fdesde.getTime() < hoy.getTime() - 24*60*60*1000) {
    alert ("Fecha inicio en el pasado");
    loadDate( DateAdd(fechaIniAnterior.getDate(),fechaIniAnterior.getMonth() ,fechaIniAnterior.getFullYear(),0,0,0),comboDiaIni-1,comboMesAnyoIni);
    return;
  }

  if (fhasta.getTime() < hoy.getTime()) {
    alert ("Fecha fin en el pasado");
    loadDate( DateAdd(fechaFinAnterior.getDate(),fechaFinAnterior.getMonth() ,fechaFinAnterior.getFullYear(),0,0,0),comboDiaFin,comboMesAnyoFin);
    return;
  }

  var hoy=new Date();
  fdesde2=fdesde.getTime()+63*24*60*60*1000;
  if (fhasta.getTime()>0) {
    if(fdesde>=fhasta){
      loadDate( DateAdd(diad,mesd-1,anyod,1,0,0),comboDiaFin,comboMesAnyoFin);
    }
    else {
      if(fhasta.getTime()>=fdesde2){
        // Sobre pasa el rango de 62 dias de reserva
        if (fechaAnterior.getTime() != fhasta.getTime()){
          loadDate( DateAdd(fechaAnterior.getDate(),fechaAnterior.getMonth() ,fechaAnterior.getFullYear(),0,0,0),comboDiaFin,comboMesAnyoFin);
        } else {
          loadDate( DateAdd(diad,mesd-1,anyod,1,0,0),comboDiaFin,comboMesAnyoFin);
        }
        alert("Por favor, modifique las fechas de búsqueda. No es posible hacer una reserva de más de dos meses de duración.");
      }
    }
  }
  else {
    loadDate( DateAdd(diad,mesd-1,anyod,1,0,0),comboDiaFin,comboMesAnyoFin);
  }
  // Guardamos la fecha anterior
  dia=comboDiaFin.options[comboDiaFin.selectedIndex].value;
  mesano=comboMesAnyoFin.options[comboMesAnyoFin.selectedIndex].value.split("-");
  mes=mesano[0];
  anyo=mesano[1];
  fechaFinAnterior = new Date(anyo, mes-1, dia);
  fechaAnterior = new Date(anyo, mes-1, dia);

  dia=comboDiaIni.options[comboDiaIni.selectedIndex].value;
  mesano=comboMesAnyoIni.options[comboMesAnyoIni.selectedIndex].value.split("-");
  mes=mesano[0];
  anyo=mesano[1];
  fechaIniAnterior = new Date(anyo, mes-1, dia);
}

//
// Trata la fecha hasta en función de la fecha de inicio
//
function validaFechas() {
  adaptahasta(return_form, return_en_dia, return_en_mesanyo, return_sa_dia, return_sa_mesanyo);
}

//
// Funciones loadDate, loadDateSeparator, selectDato copiadas de funciones.js
//

/**
 * loadDate.
 * Carga la fecha en un combo de fecha.
 * El combo de mes y año estan unificados en uno solo
 *
 * @param sFecha: Fecha que se carga formato dd/mm/yyyy
 * @param campoDia: Nombre del cambo dia del formulario
 * @param campoMesAnyo: Nombre del campo mes y año del formulario
 */
function loadDate(sFecha, campoDia, campoMesAnyo){
	 loadDateSeparator(sFecha, campoDia, campoMesAnyo, "/");
}

/**
 * loadDateSeparator.
 * Carga la fecha en un combo de fecha.
 * El combo de mes y año estan unificados en uno solo delimitado
 * por un separador
 *
 * @param sFecha: Fecha que se carga formato dd/mm/yyyy
 * @param campoDia: Nombre del cambo dia del formulario
 * @param campoMesAnyo: Nombre del campo mes y año del formulario
 * @param separador: separador de mes y año
 */
function loadDateSeparator(sFecha, campoDia, campoMesAnyo, separador){
	var sDate = sFecha.split(separador);
	selectDato(campoDia,sDate[0]);
	selectDato(campoMesAnyo,""+sDate[1]+"-"+sDate[2]);
}	

//*************************************************************************	
//
// FUNCIONES DE VISUALIZACIÓN DE CALENDARIO 
//	
//*************************************************************************

//
// Asigna valor a combos de fecha
//
function setFecha(any, mes, dia, comboDia, comboMesAnyo) {
  if (dia < 10){
    comboDia.value = "0" + dia;
  }
  else {
    comboDia.value = dia;
  }

  comboMesAnyo.value = valueMonth[mes-1] + "-" + any;
}

//
// Inicializa el calendario
//
function initCalendario(form, en_dia, en_mesanyo, sa_dia, sa_mesanyo) {
	return_form = form;
	return_en_dia = en_dia;
	return_en_mesanyo = en_mesanyo;
	return_sa_dia = sa_dia;
	return_sa_mesanyo = sa_mesanyo;
}

//
// Muestra el calendario
//
function mostrarCalendario(funcion, anchor, sComboDia, sComboMesAnyo) {
  var comboDia = eval("document." + return_form + "." + sComboDia);
  var comboMesAnyo = eval("document." + return_form + "." + sComboMesAnyo);
  // Obtenemos los valores de los combos
  var dia=comboDia.options[comboDia.selectedIndex].value;
  var mesano=comboMesAnyo.options[comboMesAnyo.selectedIndex].value;

  var fechaShow = "";
  if ((dia!="") && (mesano!=""))  {
    var mesanoSplit = mesano.split("-");
    var mes=mesanoSplit[0];
    var anyo=mesanoSplit[1];
    fechaShow = anyo + "-" + mes + "-" + dia;
  }

  calendar.setReturnFunction(funcion);
  calendar.showCalendar(anchor, fechaShow);
  //roundEm();
}


///////////////////////////////////////////////////////////////////////////////


function abrirmenu() {
	return true;
}

function inicializarCalendario() {
	generaFechaOptions('en_mesano');
	generaFechaOptions('sa_mesano');
	initCalendario("form_buscador", "en_dia", "en_mesano", "sa_dia", "sa_mesano");
	var startDate = new Date();
	
	loadDate(DateAddFecha(startDate, 0, 0, 0), document.form_buscador.en_dia, document.form_buscador.en_mesano);
	validaFechas();
	saveChange();
}

function changeFormat(mesanyo) {
	var regex = new RegExp('^([0-9]{1,2})-([0-9]{4})$');
	var result = regex.exec(mesanyo);

	var newdate = Array(result[1],result[2]);
	return newdate;
}

var linkreserver_base = null;
function saveChange() {
	var vDiaIni = document.form_buscador.en_dia.value;
	var varray = changeFormat(document.form_buscador.en_mesano.value);
	var vMesIni = varray[0];
	var vAnyoIni = varray[1];


	var vDiaFin = document.form_buscador.sa_dia.value;
	var varray = changeFormat(document.form_buscador.sa_mesano.value);
	var vMesFin = varray[0];
	var vAnyoFin = varray[1];

	var vNoHab = document.form_buscador.no_hab.value;
	var vNoPax = document.form_buscador.no_pax.value;
	
	var linkReservas = document.getElementById("link_reservas");
	if (linkreserver_base == null) {
		linkreserver_base = linkReservas.href;
	}

	var url = linkreserver_base;
	url += "?codigoHotel=" + document.form_buscador.codigoHotel.value;
	url += "&lang=" + document.form_buscador.idioma.value;
	url += "&idPartner="+document.form_buscador.idPartner.value;
	url += "&idPrm="+document.form_buscador.idPrm.value;
	url += "&idONg="+document.form_buscador.idONg.value;
	url += "&idNom="+document.form_buscador.idNom.value;
	url += "&irListaHoteles="+document.form_buscador.irListaHoteles.value;

	url += "&dia=" + vDiaIni;
	url += "&mes=" + vMesIni;
	url += "&anio=" + vAnyoIni;
	url += "&diaHasta=" + vDiaFin;
	url += "&mesHasta=" + vMesFin;
	url += "&anioHasta=" + vAnyoFin;
	url += "&personas=" + vNoPax;
	url += "&habitaciones=" + vNoHab;
	
	linkReservas.href = url;
}

//
// Funcion responsable de cargar la fecha de entrada del calendario
//
function cargarFechaEn(any, mes, dia) {
	var comboDia = eval("document.form_buscador.en_dia");
	var comboMesAnyo = eval("document.form_buscador.en_mesano");
	setFecha(any, mes, dia, comboDia, comboMesAnyo);
	validaFechas();
	saveChange();
}

//
// Funcion responsable de cargar la fecha de salida del calendario
//
function cargarFechaSa(any, mes, dia) {
	var comboDia = eval("document.form_buscador.sa_dia");
	var comboMesAnyo = eval("document.form_buscador.sa_mesano");
	setFecha(any, mes, dia, comboDia, comboMesAnyo);
	validaFechas();
	saveChange();
}

function generaFechaOptions(name) {
	var obj = document.form_buscador[name];
	var hoy = new Date();
	var year = hoy.getYear();

	if (ns6 || ns4 || opera)
		year=1900+hoy.getYear();

	//var desdemes=hoy.getMonth();
	var desdemes = Number(0);
	for (var i = year;i < year+2; i++) {
		for(var j=desdemes;j<yxMonths.length;j++) {
			var option = document.createElement('OPTION');
			option.text = yxMonths[j] +' '+i;
			option.innerHTML = yxMonths[j] +' '+i;
			option.value = valueMonth[j]+'-'+i;
			obj.appendChild(option,null);
		}
	}
	desdemes=0;

	return true;
}

