// Variables globales
var fechaActual, fechaMax;
var selector;
var selNoches;
var selDesp;
var selHabitaciones;

//--------------------------------------------------------------------------------

function diaOver( obj ){
	
	if(obj.className.indexOf('dia') != -1 ){
		obj.className=obj.className.replace(/dia/,selector.selActual+"Over");		
	}
}

//--------------------------------------------------------------------------------

function diaOut( obj ){
	
	if (obj.className.indexOf("llegadaOver") != -1){
		obj.className=obj.className.replace( /llegadaOver/, 'dia' );
	}else if ( obj.className.indexOf("salidaOver") != -1 ){
		obj.className=obj.className.replace( /salidaOver/, 'dia' );
	}
}

//--------------------------------------------------------------------------------
// Objeto selector de fecha de salida/llegada
// El parámetro tipo puede ser 'horizontal' o 'vertical'.
//--------------------------------------------------------------------------------
function Selector( tipo ){
   this.NUM_CALENDARIOS=3;
   this.calendarios=new Array( this.NUM_CALENDARIOS );
   this.selActual="llegada";
   this.diaLlegada=null;
   this.diaSalida=null;
   this.fechaSalida=new Date(fechaActual);
   this.fechaLlegada=new Date(fechaActual);
   this.fechaInicio=new Date(fechaActual);
   this.tipo=tipo ? tipo : 'horizontal';
   this.diasDisponibles=new Array();

   this.obj=document.getElementById("selector");

   //--------------------------------------------------------------------------------

   this.actualiza=function(){
      var flechaIzq, flechaDer;
      var f, obj;

      // Mostrar/Ocultar las flechas de desplazamiento
      flechaIzq=document.getElementById('flechaIzq');
      if( compararFechas( this.fechaInicio, fechaActual ) <= 0 ){
         flechaIzq.style.display='none';
      }else{
         flechaIzq.style.display='block';
      }
      flechaDer=document.getElementById('flechaDer');
      f=new Date(this.fechaInicio);
      f.setDate(1);
      f.setMonth( f.getMonth()+this.NUM_CALENDARIOS );
      if( compararFechas( f, fechaMax ) >= 0 ){
         flechaDer.style.display='none';
      }else{
         flechaDer.style.display='block';
      }

      // Marcar los dias disponibles.
      for( var i=0; i<this.diasDisponibles.length; i++ ){
         if( (obj=document.getElementById( this.diasDisponibles[i] )) ){
            obj.className="dia disponible";
         }
      }

      // Marcar los dias seleccionados actualmente.
      if( this.diaSalida != null ){
         obj=document.getElementById( this.diaSalida );
            if( this.fechaSalida.compareTo( fechaActual ) >= 0 ){
             if( obj ){
                obj.className="salidaMarcado";
             }
            }
      }
        if( this.diaLlegada != null ){            
         obj=document.getElementById( this.diaLlegada );
            if( this.fechaLlegada.compareTo( fechaActual ) >= 0 ){
             if( obj ){
                obj.className="llegadaMarcado";
             }
            }
      }
   }

   //--------------------------------------------------------------------------------

   this.izquierda=function(){
      var fechaMin=new Date( fechaActual );
      var fechaAnt=new Date( this.fechaInicio );

      fechaMin.setDate(1);
      fechaAnt.setDate(1);
      fechaAnt.setMonth( fechaAnt.getMonth()-2 );

      if( compararFechas( fechaAnt, fechaMin ) >= 0 ){
         this.desplazar(-2);
      }else{
         fechaAnt.setMonth( fechaAnt.getMonth()+1 );
         if( compararFechas( fechaAnt, fechaMin ) >= 0 ){
            this.desplazar(-1);
         }
      }
   }

   //--------------------------------------------------------------------------------

   this.derecha=function(){
      var fechaTope=new Date( fechaMax );
      var fechaSig=new Date( this.fechaInicio );

      fechaTope.setDate(1);
      fechaSig.setDate(1);
      fechaSig.setMonth( fechaSig.getMonth()+(this.NUM_CALENDARIOS-1)+2 );

      if( compararFechas( fechaSig, fechaTope ) < 0 ){
         this.desplazar(2);
      }else{
         fechaSig.setMonth( fechaSig.getMonth()-1 );
         if( compararFechas( fechaSig, fechaTope ) < 0 ){
            this.desplazar(1);
         }
      }
   }

   //--------------------------------------------------------------------------------

   this.desplazar=function( numMeses ){
      var fecha;
      var any;

      this.fechaInicio.setMonth( this.fechaInicio.getMonth() + numMeses );

      fecha=new Date( this.fechaInicio );
      fecha.setDate(1);
      any=this.fechaInicio.getFullYear();

      for(var i=0; i<this.NUM_CALENDARIOS; i++){
         this.calendarios[i].setFecha( fecha.getMonth(), any );

         fecha.setMonth( fecha.getMonth()+1 );
         any=fecha.getFullYear();
      }

      this.actualiza();
   }

   //--------------------------------------------------------------------------------

   this.desmarcarDia=function( id ){

      var obj=document.getElementById( id );
      if( obj ){
         obj.className="dia";
      }
   }

   //--------------------------------------------------------------------------------

   this.getFechaInicio=function(){

      return this.fechaInicio;
   }

   //--------------------------------------------------------------------------------
   // id = "dia/mes/año"
   this.setDia=function( id ){
      var arrayFecha;
      var dia, mes, any;
      var fecha;

      arrayFecha=id.split( '/' );
      dia=parseInt( arrayFecha[0], 10 );
      mes=parseInt( arrayFecha[1], 10 );
      any=parseInt( arrayFecha[2], 10 );
      fecha=new Date( any, mes, dia );

      // Llegada
      if( this.selActual=='llegada' ){

         if( !(compararFechas( fecha, fechaActual ) >=0 && compararFechas( fecha, fechaMax ) <=0) )return;
         this.setDiaLlegada( id );

         document.getElementById( "primerClickOn" ).id="primerClick";
         document.getElementById( "segundoClick" ).id="segundoClickOn";
         if( compararFechas( fecha, this.fechaSalida ) > 0 ){
            this.setDiaSalida( id );
         }
      }

      // Salida
      else{
         if( !(compararFechas( fecha, this.fechaLlegada ) >=0 && compararFechas( fecha, fechaMax ) <=0) )return;
         this.setDiaSalida( id );

         document.getElementById( "primerClick" ).id="primerClickOn";
         document.getElementById( "segundoClickOn" ).id="segundoClick";
      }

      // Actualizamos el select correspondiente
      if( this.selActual == 'llegada' ){
         selecMes( selMesLlegada, fecha );   //cambiarMes( 'llegada' );
         selecDia( selDiaLlegada, fecha );   //cambiarDia( 'llegada' );
      }else{
         selecMes( selMesSalida, fecha );   //cambiarMes( 'salida' );
         selecDia( selDiaSalida, fecha );   //cambiarDia( 'salida' );
      }
      actualizarNoches();

      // Cambiar el tipo de selección actual (salida/llegada)
      this.selActual=(this.selActual=="llegada") ? "salida" : "llegada";
   }

   //--------------------------------------------------------------------------------

   this.setDiaDisponible=function( fecha ){
      var aFecha;

      aFecha=separarFecha( fecha );
      this.diasDisponibles[ this.diasDisponibles.length ]=aFecha['day']+'/'+(aFecha['month']-1)+'/'+aFecha['year'];
   }

   //--------------------------------------------------------------------------------

   this.setDiaLlegada=function( id ){
      var dia, mes, any, obj;

      dia=parseInt( id.split('/')[0], 10 );
      mes=parseInt( id.split('/')[1], 10 );
      any=parseInt( id.split('/')[2], 10 );

      this.desmarcarDia( this.diaLlegada );
      this.diaLlegada=id;
      this.fechaLlegada=new Date( any, mes, dia );

      this.actualiza();
   }

   //--------------------------------------------------------------------------------

   this.setDiaSalida=function( id ){
      var dia, mes, any, obj;

      dia=parseInt( id.split('/')[0], 10 );
      mes=parseInt( id.split('/')[1], 10 );
      any=parseInt( id.split('/')[2], 10 );

      this.desmarcarDia( this.diaSalida );
      this.diaSalida=id;
      this.fechaSalida=new Date( any, mes, dia );

      this.actualiza();
   }

   //--------------------------------------------------------------------------------

   for( var i=0; i<this.NUM_CALENDARIOS; i++){
      this.calendarios[i]=new Calendario( this.obj, i==0, i==(this.NUM_CALENDARIOS-1) );

      var fechaTemp=new Date(fechaActual);
        fechaTemp.setDate(1);
      fechaTemp.setMonth( fechaTemp.getMonth()+i );
      var arrFecha=separarFecha( fechaTemp );
      this.calendarios[i].setFecha( arrFecha['month']-1, arrFecha['year'] );

      if( i+1 < this.NUM_CALENDARIOS){
         var espacioH=document.createElement("div");
         espacioH.className="espacioH";
         this.obj.appendChild(espacioH);
      }
   }

   var separador=document.createElement("div");
   separador.className="separadorH";
   this.obj.appendChild(separador);

   this.actualiza();
}

//--------------------------------------------------------------------------------
// Actualiza el selector de noches.

function actualizarNoches(){
   var i;
   var fechaLlegada;
   var fechaSalida=getFechaSalida();
   var noches, maxNoches;
   var maxNoches;

   fechaLlegada=getFecha( selDiaLlegada, selMesLlegada );
   for( maxNoches=0; compararFechas( fechaLlegada, fechaMax ) < 0; maxNoches++ ){
      fechaLlegada.setDate( fechaLlegada.getDate()+1 );
   }
   maxNoches--;

   fechaLlegada=getFecha( selDiaLlegada, selMesLlegada );
   for( noches=0; compararFechas( fechaLlegada, fechaSalida ) < 0; noches++ ){
      fechaLlegada.setDate( fechaLlegada.getDate()+1 );
   }

   // Hay que expandir el selector de noches.
   if( maxNoches > (selNoches.options.length-1) ){
      while( maxNoches > (selNoches.options.length-1) ){
         i=selNoches.length;
         selNoches.options[i]=new Option( i, i );
      }
   }
   // Hay que contraer el selector de noches.
   if( maxNoches < (selNoches.options.length-1) ){
      while( maxNoches < (selNoches.options.length-1) ){
         i=selNoches.options.length-1;
         selNoches.options[i]=null;
      }
   }

   selNoches.selectedIndex=noches;
}

//--------------------------------------------------------------------------------
// Actualiza la fecha en el Selector.

function actualizarSelector(){
   var fecha;
   var arrayFecha;
   var dia, mes, any, dia;

    fecha=getFecha( selDiaLlegada, selMesLlegada, 'llegada' );
   arrayFecha=separarFecha( fecha );
   dia=arrayFecha['day'];
   mes=arrayFecha['month']-1;
   any=arrayFecha['year'];
   id=dia+'/'+mes+'/'+any;
   selector.setDiaLlegada( id );

   fecha=getFecha( selDiaSalida, selMesSalida, 'salida' );
   arrayFecha=separarFecha( fecha );
   dia=arrayFecha['day'];
   mes=arrayFecha['month']-1;
   any=arrayFecha['year'];
   id=dia+'/'+mes+'/'+any;
   selector.setDiaSalida( id );

    actualizarNoches();
}

//--------------------------------------------------------------------------------
// Borra un select
function borrarSelect( sel ){
   while( sel.options.length > 0 ){
      sel.options[0] = null;
   }
}

//--------------------------------------------------------------------------------
// Operaciones a realizar cuando se cambia el día de llegada o salida.
function cambiarDia( tipo ){
    var fechaLlegada;
    var fechaSalida;
    var tmp, dia;
    
   switch( tipo ){
      case 'llegada':
         fechaLlegada=getFechaLlegada();
                        
            if( fechaLlegada.compareTo( fechaActual ) < 0 ){
                fechaLlegada.setMonth( fechaLlegada.getMonth()+1 );
                selecFechaLlegada( fechaLlegada );                
            }else{               
                tmp = new Date(fechaLlegada);
                dia = getDiaLlegada();
                while( tmp.getDate() != dia ){                    
                    tmp.setMonth( tmp.getMonth()+1 );
                    tmp.setDate( dia );
                }                
                fechaLlegada = tmp;
                selecFechaLlegada( fechaLlegada );
            }

            fechaSalida=getFechaSalida();

            if( fechaLlegada.compareTo( fechaSalida ) > 0 ){
                selecFechaSalida( fechaLlegada );
            }
            break;
      case 'salida':
            fechaSalida=getFechaSalida();
            
            if( fechaSalida.compareTo( fechaActual ) < 0 ){
                fechaSalida.setMonth( fechaSalida.getMonth()+1 );
                selecFechaSalida( fechaSalida );
            }else{
                tmp = new Date( fechaSalida );
                dia = getDiaSalida();
                while( tmp.getDate() != dia ){
                    tmp.setMonth( tmp.getMonth()+1 );
                    tmp.setDate( dia );
                }
                fechaSalida = tmp;
                selecFechaSalida( fechaSalida );
            }
            
            fechaSalida = getFechaSalida();
            fechaLlegada = getFechaLlegada();
            
            if( fechaSalida.compareTo( fechaLlegada ) < 0 ){
                tmp = new Date( fechaSalida );
                dia = getDiaSalida();
                tmp.setMonth( tmp.getMonth()+1 );
                while( tmp.getDate() != dia ){
                    tmp.setDate( dia );
                    tmp.setMonth( tmp.getMonth()+1 );                    
                }
                fechaSalida = tmp;
                selecFechaSalida( fechaSalida );
            }
            break;
   }
}

//--------------------------------------------------------------------------------
// Operaciones a realizar cuando se cambia el mes de llegada o de salida.
function cambiarMes( tipo ){
    var mesLlegada;
    
    switch( tipo ){
      case 'llegada':
         var fechaLlegada=getFecha( selDiaLlegada, selMesLlegada );
            var fechaSalida=getFecha( selDiaSalida, selMesSalida );
                        
            if( fechaLlegada.compareTo(fechaActual) < 0 ){
                fechaLlegada = new Date( fechaActual );
                selecFecha( selDiaLlegada, selMesLlegada, fechaLlegada );
            }else if( !fechaValida('llegada') ){
                selecFecha( selDiaLlegada, selMesLlegada, fechaLlegada );
            }
            
            if( fechaLlegada.compareTo( fechaSalida ) > 0 ){
                selecFecha( selDiaSalida, selMesSalida, fechaLlegada );
            }
            break;
      case 'salida':
            var fechaSalida=getFecha( selDiaSalida, selMesSalida );
            var fechaLlegada=getFecha( selDiaLlegada, selMesLlegada );
                        
            if( fechaSalida.compareTo( fechaActual ) < 0 ){
                fechaSalida = new Date( fechaActual );
                selecFecha( selDiaSalida, selMesSalida, fechaSalida );
            }else if( !fechaValida('salida') ){
                selecFecha( selDiaSalida, selMesSalida, fechaSalida );
            }
            
            if( fechaLlegada.compareTo( fechaSalida ) > 0 ){
                selecFecha( selDiaLlegada, selMesLlegada, fechaSalida );                
            }
            break;
   }
}

//--------------------------------------------------------------------------------

function cambiarNoches(){    
   var noches=selNoches.options[ selNoches.selectedIndex ].value;
    setNumNoches( noches );
}

//--------------------------------------------------------------------------------
// Función que compara dos objetos tipo Date.
// Valores devueltos:
// < 0 si fecha1 es anterior a fecha2.
// > 0 si fecha1 es posterior a fecha2.
// 0 si fecha1 es igual a fecha2
function compararFechas( fecha1, fecha2 ){
    var f1, f2;
    var d, m, a;

    f1=separarFecha( fecha1 );
    f2=separarFecha( fecha2 );

    a=f1['year']-f2['year'];
    m=f1['month']-f2['month'];
    d=f1['day']-f2['day'];

    if( a==0 ){
        if( m==0 ){
            return d;
        }else{
            return m;
        }
    }else{
        return a;
    }
}

//--------------------------------------------------------------------------------
//comparem dues dates
// retorna 0 si són iguals
// retorna 1 si la data de l'objecte es major que la data que ens pasen
// retorna -1 si la data de l'objecte es menor que la data que ens pasen

Date.prototype.compareTo=function (objFecha){
    if ( this.getTime() == objFecha.getTime() ){
        return 0;
    }else if (this.getTime() > objFecha.getTime() ){
        return 1;
    }else{
        return -1;
    }
}

//--------------------------------------------------------------------------------
// Función que devuelve la diferencia entre dos fechas en meses.
function difMeses( fecha1, fecha2 ){
    var fechaTemp1 = new Date( fecha1 );
    var fechaTemp2 = new Date( fecha2 );
    
    fechaTemp1.setDate(1);
    fechaTemp2.setDate(2);
    
    var i;
    for( i=0; compararFechas( fechaTemp1, fechaTemp2 ) <= 0; i++){
        fechaTemp1.setMonth( fechaTemp1.getMonth()+1 );
    }
    return i-1;
}

//--------------------------------------------------------------------------------

function crearCampoCantidad( texto, nombre, valorDefecto, valorMinimo, valorMaximo ){
   var campo, p, sel;

   campo=document.createElement("div");
   campo.className="campo";

   sel=document.createElement("select");
   sel.name=nombre;
       sel.id=nombre;
   campo.appendChild(sel);

   p=document.createElement('p');
   p.innerHTML=texto;
   campo.appendChild(p);

    var j=valorMinimo;
   for( var i=0; j<=valorMaximo; i++,j++ ){
      sel.options[i]=new Option( j, j );
   }
    sel.selectedIndex = valorDefecto;

   return campo;
}

//--------------------------------------------------------------------------------

function desplazarSelector(){
   var fechaDesp;
   var fechaInicio=new Date( selector.getFechaInicio() );
   var numMeses=0;

   if( !selDesp ){
      return;
   }

   fechaDesp=getMes( selDesp );

   fechaInicio.setDate(1);

   if( compararFechas( fechaDesp, fechaInicio ) < 0 ){
      while( compararFechas( fechaDesp, fechaInicio ) < 0 ){
         numMeses++;
         fechaDesp.setMonth( fechaDesp.getMonth()+1 );
      }
      selector.desplazar( -numMeses );
   }else{
      while( compararFechas( fechaDesp, fechaInicio ) > 0 ){
         numMeses++;
         fechaDesp.setMonth( fechaDesp.getMonth()-1 );
      }
      selector.desplazar( numMeses );
   }
}

//--------------------------------------------------------------------------------

function getFecha( selDia, selMes ){
       var dia=parseInt( selDia.options[ selDia.selectedIndex ].value, 10 );
       var mes=parseInt( selMes.options[ selMes.selectedIndex ].value.split('/')[0], 10 )-1;
       var any=parseInt( selMes.options[ selMes.selectedIndex ].value.split('/')[1], 10 );
       
       var fecha = new Date( any, mes, dia );
       
       // Ajustamos la fecha.
       if( fecha.getMonth() > mes ){
           fecha.setDate(-1);
           fecha.setDate( fecha.getDate()+1 );
       }

       return fecha;
   }

//--------------------------------------------------------------------------------

function getMes( selMes ){
   var mes=parseInt( selMes.options[ selMes.selectedIndex ].value.split('/')[0], 10 )-1;
   var any=parseInt( selMes.options[ selMes.selectedIndex ].value.split('/')[1], 10 );

   return new Date( any, mes, 1 );
}

//--------------------------------------------------------------------------------
// initSelector( contextPath, fechaInicial );
function initSelector(){
   contextPath = arguments[0] ? arguments[0] : "";
    fechaInicial = arguments[1] ? arguments[1] : new Date();
    
    var i;
   var fechaTemp;
    var f;
       
    // Definimos las variables globales fechaActual y fechaMax.    
    fechaActual=fechaInicial;
    f=separarFecha( fechaActual );
    fechaMax=new Date( f['year']+1, f['month']+6, 1 );

    // Definimos las variables globales de los objetos select de las fechas de llegada y salida y numero de noches.
    selDiaLlegada=document.getElementById('diaLlegada');
    selMesLlegada=document.getElementById('mesLlegada');

    selDiaSalida=document.getElementById('diaSalida');
    selMesSalida=document.getElementById('mesSalida');

   selDesp=document.getElementById('selDesp');

    selHabitaciones = document.getElementById('numHabitaciones');
    
   // Inicializamos los selectores de fechas.
   llenarSelectsFecha( selDiaLlegada, selMesLlegada, fechaActual, tipoSelector=='vertical' );
    llenarSelectsFecha( selDiaSalida, selMesSalida, fechaActual, tipoSelector=='vertical' );

   // Inicializamos el selector de desplazamiento.
   if( selDesp ){
      llenarSelectMes( selDesp, fechaActual );
      selDesp.options[ selDesp.options.length-1 ]=null;
   }

   // Inicializamos el selector de noches.
   selNoches=document.getElementById('noches');
   borrarSelect(selNoches);
   i=0;
   fechaTemp=new Date(fechaActual);
   do{
      selNoches.options[ selNoches.options.length ]=new Option( i, i );
      i++;
      fechaTemp.setDate( fechaTemp.getDate()+1 );
   }while( compararFechas( fechaTemp, fechaMax ) < 0 );

   // Creamos el objeto del selector.
   selector=new Selector();

    // Marcamos en los selects la fecha inicial como llegada y el día siguiente como salida.
    selecFecha( selDiaLlegada, selMesLlegada, fechaInicial );
    fechaTemp = new Date( fechaInicial );
    fechaTemp.setDate( fechaTemp.getDate()+1 );
    selecFecha( selDiaSalida, selMesSalida, fechaTemp );
    actualizarNoches();
    
   mostrarHabitaciones();
   }

//--------------------------------------------------------------------------------

function mostrarMasOpciones(){
   var obj=document.getElementById("opciones");
   var objMasOp=document.getElementById("linkMasOpciones");

   if( obj.style.display=="block" ){
      obj.style.display='none';
      objMasOp.className="linkMasOpciones";
   }else{
      obj.style.display='block';
      objMasOp.className="linkMenosOpciones";
   }
}

//--------------------------------------------------------------------------------

function llenarSelectDia( sel, fecha ){   
    borrarSelect( sel );
    
    for( var i=1; i<=31; i++ ){
        sel.options[ sel.options.length ]=new Option( i, i );
    }
}
 
//--------------------------------------------------------------------------------
 
 function llenarSelectMes( sel, fecha, dim ){
    var i, a;
    var f=new Date( fecha );
    var nombre, valor;
   var nomMeses;

   if( dim && dim==true ){
      nomMeses=mesesDim;
   }else{
      nomMeses=meses;
   }

    borrarSelect( sel );

    while( compararFechas( f, fechaMax ) < 0 ){
        i=sel.options.length;
        a=separarFecha( f );
        nombre = nomMeses[ a['month']-1 ]+'-'+a['year'];
        valor = a['month']+'/'+a['year'];
        sel.options[ i ] = new Option( nombre, valor );
        f.setDate(1);
        f.setMonth( f.getMonth()+1 );
    }
}

//--------------------------------------------------------------------------------

function llenarSelectsFecha( selDia, selMes, fecha, dim ){

    llenarSelectMes( selMes, fecha, dim );
    llenarSelectDia( selDia, fecha );
}

//--------------------------------------------------------------------------------

function mostrarHabitaciones(){
   var unidades, unidad, numero, p, num, sel, numHab, i, numUd;
   var objNumHab=document.getElementById('numHabitaciones');
   unidades=document.getElementById('unidades');

   numHab=objNumHab.options[ objNumHab.selectedIndex ].value;

   removeChildren( unidades );

   for( var i=0; i < numHab; i++ ){
      unidad=document.createElement("div");
      unidad.className="unidad";
      unidades.appendChild( unidad );

      numero=document.createElement("div");
      numero.className="numero";
      unidad.appendChild(numero);

      numUd=i+1;

      num=document.createElement("div");
      num.className="num";
      numero.appendChild(num);
      num.appendChild( document.createTextNode( numUd ) );

      // Campo adultos
      campo=crearCampoCantidad( textos["adultos"], 'adultos'+'_'+numUd, 0, document.getElementById('minimoAdultos').value, 8);
      unidad.appendChild(campo);

      // Campo niños
      campo=crearCampoCantidad( textos["nins"]+' <em>(2-12 '+textos["anys"]+')</em>', 'nins'+'_'+numUd, 0, 0, 4);
      unidad.appendChild(campo);

      // Campo bebés
      campo=crearCampoCantidad( textos["bebes"]+' <em>(0-2 '+textos["anys"]+')</em>', 'bebes'+'_'+numUd, 0, 0, 4);
      unidad.appendChild(campo);
   }
}

//--------------------------------------------------------------------------------

function selecFechaSalida( fecha ){
    selecFecha( selDiaSalida, selMesSalida, fecha );
}

//--------------------------------------------------------------------------------

function selecFechaLlegada( fecha ){
    selecFecha( selDiaLlegada, selMesLlegada, fecha );
}

//--------------------------------------------------------------------------------

function selecFecha( selDia, selMes, fecha ){

    selecMes( selMes, fecha );           
    selecDia( selDia, fecha );
}
   
//--------------------------------------------------------------------------------
 
function selecMes( selMes, fecha ){
    var f=separarFecha(fecha);
    var encontrado=false;

    for( var i=0; i < selMes.options.length && !encontrado; i++ ){
       encontrado = ( selMes.options[i].value == (f['month']+'/'+f['year']) );
       if( encontrado ){
           selMes.selectedIndex = i;
           return;
       }
     }
 }
 
 //--------------------------------------------------------------------------------
 
 function selecDia( selDia, fecha ){
    var f=separarFecha(fecha);

    for( var i=0; i < selDia.options.length; i++ ){
       if( selDia.options[i].value == f['day'] ){
           selDia.selectedIndex=i;
           return;
       }
    }
 }
   
//--------------------------------------------------------------------------------
// Devuelve un array con dia, mes, año.
function separarFecha( fecha ){
   var f=new Array();

   f['day']=fecha.getDate();
   f['month']=fecha.getMonth()+1;
   f['year']=fecha.getYear();
   if( f['year'] < 2000 ){
      f['year']+=1900;
   }

   return f;
}

//--------------------------------------------------------------------------------

function removeChildren( obj ){

   if( obj.hasChildNodes() ){
      for( var i=0; i<obj.childNodes.length; i++){
         removeChildren( obj.childNodes[i] );
      }
      while( obj.hasChildNodes() ){
         obj.removeChild( obj.firstChild );
      }
   }
}

//--------------------------------------------------------------------------------

function checkFormSelector () {
    var msg = new Array();
    
    if ( selNoches.selectedIndex == 0 ){
        msg[ msg.length ] = '- ' + textos['minimonoches'];
    }
    
    diaLlegada = getDiaLlegada();
    mesLlegada = getMesLlegada();    
    fechaLlegada = new Date(mesLlegada);
    fechaLlegada.setDate(diaLlegada);
    
    if( fechaLlegada.getMonth() != mesLlegada.getMonth() ){
        msg[ msg.length ] = '- ' + textos['llegada_incorrecta'];
    }
    
    diaSalida = getDiaSalida();
    mesSalida = getMesSalida();  
    fechaSalida = new Date(mesSalida);
    fechaSalida.setDate( diaSalida );          
    
    if( fechaSalida.getMonth() != mesSalida.getMonth() ){
        msg[ msg.length ] = '- ' + textos['salida_incorrecta'];
    }

   var objNumHab=document.getElementById('numHabitaciones');
   var numHab=objNumHab.options[ objNumHab.selectedIndex ].value;

   for( var i=1; i <= numHab; i++ ) {
      var adultos = new Number(document.getElementById('adultos_' + i).value);
      var nins = new Number(document.getElementById('nins_' + i).value);
      var ocupantes = adultos + nins;
      if (ocupantes <= 0) {
         msg[ msg.length ] = '- ' + 'debe introducir algún ocupante en la unidad ' + i;
      }
   }

    if ( msg.length == 0 ) {
        document.getElementById('formSelector').submit()
    }else{
        alert( msg.join('\n') );
    }    
}

//--------------------------------------------------------------------------------

function setFechaLlegada( fecha ){        
    selecFecha( selDiaLlegada, selMesLlegada, fecha );     
}

//--------------------------------------------------------------------------------

function setFechaSalida( fecha ){      
    selecFecha( selDiaSalida, selMesSalida, fecha );    
}

//--------------------------------------------------------------------------------
function fechaValida( tipo ){
    var dia, mes, any;
    
    switch( tipo ){
        case 'llegada':
            dia=parseInt( selDiaLlegada.options[ selDiaLlegada.selectedIndex ].value, 10 );
            mes=parseInt( selMesLlegada.options[ selMesLlegada.selectedIndex ].value.split('/')[0], 10 )-1;
            any=parseInt( selMesLlegada.options[ selMesLlegada.selectedIndex ].value.split('/')[1], 10 );
            break;
        case 'salida':
            dia=parseInt( selDiaSalida.options[ selDiaSalida.selectedIndex ].value, 10 );
            mes=parseInt( selMesSalida.options[ selMesSalida.selectedIndex ].value.split('/')[0], 10 )-1;
            any=parseInt( selMesSalida.options[ selMesSalida.selectedIndex ].value.split('/')[1], 10 );
            break;
    }
    
    var fecha = new Date( any, mes, dia );    
    return ( fecha.getMonth() == mes );
}

//--------------------------------------------------------------------------------

function getFechaLlegada(){
    return getFecha( selDiaLlegada, selMesLlegada );
}

//--------------------------------------------------------------------------------

function getFechaSalida(){
    return getFecha( selDiaSalida, selMesSalida );    
}

//--------------------------------------------------------------------------------

function getMesSalida(){
    return getMes( selMesSalida );
}

//--------------------------------------------------------------------------------

function getMesLlegada(){
    return getMes( selMesLlegada );
}

//--------------------------------------------------------------------------------

function getDiaLlegada(){
    return selDiaLlegada.options[selDiaLlegada.selectedIndex].value;
}

//--------------------------------------------------------------------------------

function getDiaSalida(){
    return selDiaSalida.options[selDiaSalida.selectedIndex].value;
}

//--------------------------------------------------------------------------------

function setNumNoches( noches ){
   var fechaSalida=getFecha( selDiaLlegada, selMesLlegada );

   while( noches != 0 ){
      fechaSalida.setDate( fechaSalida.getDate()+1 );
      noches--;
   }
   setFechaSalida( fechaSalida );    
    actualizarSelector();
}

//--------------------------------------------------------------------------------

function setNumHabitaciones( n ){
    
    marcarSelect( selHabitaciones, n );
    selHabitaciones.onchange();
}

//--------------------------------------------------------------------------------

function setHabitacion( n, adultos, nins, bebes ){
    
    sel = document.getElementById( 'adultos_'+n );
    marcarSelect( sel, adultos );
    
    sel = document.getElementById( 'nins_'+n );
    marcarSelect( sel, nins );
    
    sel = document.getElementById( 'bebes_'+n );
    marcarSelect( sel, bebes );
} 
