///////////////////////////////////////////////////////////////////////////////////////////////////
// Funciones de Art

  function Separa_Fecha_Spain(solucion,cadena)
  {
    pos=cadena.indexOf("-");
    DiaS=cadena.substring(0,pos);
	pos=pos+1;
	
	pos2=cadena.indexOf("-",pos);
    MesS=cadena.substring(pos,pos2);
	pos2=pos2+1;

    AnoS=cadena.substring(pos2,cadena.length);
	
	solucion[0]=DiaS;
	solucion[1]=MesS;
	solucion[2]=AnoS;
  }

	function prepara_fecha_comp(fecha){
		pasada_array=fecha.split('-');
		if(pasada_array[1]<10) pasada_array[1]='0'+pasada_array[1];
		if(pasada_array[0]<10) pasada_array[0]='0'+pasada_array[0];
		pasada_1=pasada_array[2]+pasada_array[1]+pasada_array[0];
			return pasada_1;
	}
	
	function DameDiaAnterior(datos){
		for(__i=0;__i<lista_pintados.length;__i++)
			if(lista_pintados[__i]==datos)
				return lista_pintados[__i-1];
	}
	
//JORGE FUNCION PARA CALCULAR LO QUE HAY QUE PINTAR HACIA DELANTE Y DETRAS DE LO SELECCIONADO
  	function Buscamos_pinchado(datos,cual)
	{
		var sacado='';
		var despintar_ini='';
		var despintar_fin='';
		
		/*************preparamos la seleccion***************/
		if (dias_ini_fin.length==0){
			dias_ini_fin[0]=datos;
			dias_ini_fin[1]=datos;
		}	
	/*	else if( (prepara_fecha_comp(dias_ini_fin[0])==prepara_fecha_comp(datos)) ||
				(prepara_fecha_comp(dias_ini_fin[1])==prepara_fecha_comp(datos)) )
	*/	else if(prepara_fecha_comp(dias_ini_fin[0])==prepara_fecha_comp(datos))
		{
			despintar_ini=dias_ini_fin[0];
			despintar_fin=dias_ini_fin[1];
			dias_ini_fin=new Array();
		}	
		// El día pulsado es menor que el inicio
		else if (prepara_fecha_comp(dias_ini_fin[0])>prepara_fecha_comp(datos))
			dias_ini_fin[0]=datos;
		// el día pulsado es mayor q el fin
		else if (prepara_fecha_comp(dias_ini_fin[1])<prepara_fecha_comp(datos))
			dias_ini_fin[1]=datos;		
		// el día pulsado está en medio del tramo seleccionado
		else if( (prepara_fecha_comp(dias_ini_fin[0])<prepara_fecha_comp(datos)) && 
			(prepara_fecha_comp(dias_ini_fin[1])>prepara_fecha_comp(datos)) )
		{
			despintar_ini=datos;
			despintar_fin=dias_ini_fin[1];
			dias_ini_fin[1]=datos;		
		}
		//alert('Rango:'+dias_ini_fin[0]+' / '+dias_ini_fin[1]);
	
		// Obtiene los índices de entrada y salida en el array de días de los 2 meses
		for(__i=0;__i<lista_pintados.length;__i++)
		{
			if(lista_pintados[__i]==dias_ini_fin[0])
				pos_salida=__i;
			if(lista_pintados[__i]==dias_ini_fin[1])
				pos_salida_new=__i;
		}
		  
		// Recorremos los días entre el 1ºSeleccionado y el último
		//alert(pos_salida+' - '+pos_salida_new);
		info_cuantas_noches=0;	// Para los campos información
		info_fecha_entarada='';
		if (dias_ini_fin.length!=0)
		for(__i=pos_salida;__i<=pos_salida_new;__i++)
		{
			  pasada_array=lista_pintados[__i].split('-');
			  __Dia=pasada_array[0];
			  __Mes=pasada_array[1];
			  __Ano=pasada_array[2];
					  
			  aux=document.getElementById(__Dia+"-"+__Mes+"-"+__Ano+'_b');
			  //alert('Ini: '+aux.id);
			  
			  // ----- Prepara datos de campos info.
			  if(__i==pos_salida)
				info_fecha_entarada=__Dia+"-"+__Mes+"-"+__Ano;
			  //info_cuantas_noches++;
			  
			  // No añade a la selección si ya estaba pulsado		  
			  _add=!Globales.Lista_Seleccion.Dia_Seleccionado(__Dia,__Mes,__Ano);
			  if((__i==pos_salida) && (pos_salida!=pos_salida_new))
				  Anade_colorea(aux,false,_add,__Dia,__Mes,__Ano,false);
			  else
				  Anade_colorea(aux,false,_add,__Dia,__Mes,__Ano,false);
				  
			  // Si no es el primero pintamos la mañana del día en cuestión
			  //alert('Posiciones: '+__i+' - '+pos_salida+' / '+lista_pintados[__i] +' / '+__Dia+"-"+__Mes+"-"+__Ano);
			  if(__i>pos_salida)
			  {
				aux=document.getElementById(__Dia+"-"+__Mes+"-"+__Ano+'_a');
				//alert('1: '+aux.id);
				Anade_colorea(aux,false,false,__Dia,__Mes,__Ano,false);
			  }
			  
			  // Si es el último seleccionado pintamos la mañana del dia siguiente pero no añadimos
			  if((__i==pos_salida_new) && (__i+1<lista_pintados.length))
			  {
				  pasada_array=lista_pintados[__i+1].split('-');
				  __Dia=pasada_array[0];
				  __Mes=pasada_array[1];
				  __Ano=pasada_array[2];
				  aux=document.getElementById(__Dia+"-"+__Mes+"-"+__Ano+'_a');
				  //alert('2: '+aux.id);
				  Anade_colorea(aux,false,false,__Dia,__Mes,__Ano,false);
			  }
			  
			  /*comprobamos que el siguiente dia no este completo*/		  
			  if(__i+1<lista_pintados.length)
			  {
				   pasada_array=lista_pintados[__i+1].split('-');
					  __Dia=pasada_array[0];
					  __Mes=pasada_array[1];
					  __Ano=pasada_array[2];
				  if (Lista_Reservas.Dia_Completo(__Dia,__Mes,__Ano))
				  {
					  if(prepara_fecha_comp(dias_ini_fin[1])>prepara_fecha_comp(lista_pintados[__i]))
						alert('Se han encontrado dias completos dentro de los días seleccionado.\n El sistema acomoda su reserva desde su dia de inicio hasta la fecha permitida.');
					  aux=document.getElementById(__Dia+"-"+__Mes+"-"+__Ano+'_a');
					  Anade_colorea(aux,false,false,__Dia,__Mes,__Ano,false);
					  despintar_ini=lista_pintados[__i+1];
					  despintar_fin=dias_ini_fin[1];
					  pos_salida_new=__i;
					  dias_ini_fin[1]=lista_pintados[__i];
					  
					  //alert(dias_ini_fin[0]+' - '+dias_ini_fin[1]);
				  }
			  } // Que no sobrepase el número de elementos pintados
		  } // Del For de pos_salida
		  //dias_ini_fin[1]=datos;
		  
		 // ******************** Desmarcados *******************
		// Obtiene los índices de entrada y salida en el array de días de los 2 meses
		if((despintar_ini!='') && (despintar_fin!=''))
		{
			for(__i=0;__i<lista_pintados.length;__i++)
			{
				if(lista_pintados[__i]==despintar_ini){
					pos_salida=__i;
				}
				else if(lista_pintados[__i]==despintar_fin){
					pos_salida_new=__i;
				}			
			}
		
			// Recorremos los días entre el 1ºSeleccionado y el último
			for(__i=pos_salida;__i<=pos_salida_new;__i++){
				  pasada_array=lista_pintados[__i].split('-');
				  __Dia=pasada_array[0];
				  __Mes=pasada_array[1];
				  __Ano=pasada_array[2];					  
				  aux=document.getElementById(__Dia+"-"+__Mes+"-"+__Ano+'_b');
				  //alert(__i+' b=> '+aux.id);
				  _add=Globales.Lista_Seleccion.Dia_Seleccionado(__Dia,__Mes,__Ano);
				  Anade_colorea(aux,false,_add,__Dia,__Mes,__Ano,true);
				  
				  pasada_array=lista_pintados[__i+1].split('-');
				  __Dia=pasada_array[0];
				  __Mes=pasada_array[1];
				  __Ano=pasada_array[2];  
				  aux=document.getElementById(__Dia+"-"+__Mes+"-"+__Ano+'_a');
				  //alert(__i+' a=> '+aux.id);
				  Anade_colorea(aux,false,false,__Dia,__Mes,__Ano,true);
			  } // Del For de pos_salida
		} // Si Despintar
	
		// ----- Mostramos en los campos de información los valores seleccionados	  
		document.getElementById('info_fecha_entrada').value=info_fecha_entarada;
		document.getElementById('info_n_noches').value=Globales.Lista_Seleccion.TReserva_NDias();
		  
	
		return sacado;
	}

	function Pulsa_Dia(buscador,aniadir,__Dia, __Mes, __Ano,auto)
	{
	  //Limpiar();
		if (auto)
		{
	    	aux=document.getElementById(__Dia+"-"+__Mes+"-"+__Ano+'_a');
			Anade_colorea(aux,false,false,__Dia,__Mes,__Ano,true);
	    	aux=document.getElementById(__Dia+"-"+__Mes+"-"+__Ano+'_b');
			Anade_colorea(aux,false,false,__Dia,__Mes,__Ano,true);
		} 
		else
			Buscamos_pinchado(__Dia+"-"+__Mes+"-"+__Ano,1);
	} // Pulsa_Dia
  
	function Anade_colorea(elementin,buscador,aniadir,__Dia, __Mes, __Ano,deseleccion)  
	{	
		if (aniadir)
		{
			//alert('Añadir:'+elementin.id);
			if(!buscador)
				Globales.Lista_Seleccion.Prepara_Dia(__Dia,__Mes,__Ano);
			else
				Lista_Seleccion.Prepara_Dia(__Dia,__Mes,__Ano);
		}
	
		if (elementin!=null)
		{
				
		  pasada_array=elementin.id.split('_');
		  _car=pasada_array[1];
		  		  
			//alert('Colorea:'+elementin.id);
		  color_seleccion="#FFFFFF";		  
		  color_txt="#000000";
		  if(!buscador)
		  {
			  tempo=Globales.Temporadas_Globales.Dame_Tarifa(__Dia,__Mes,__Ano); 
			  nombre_tempo='';
			  if (tempo==1) 
			  {
				  nombre_tempo='Temporada Baja';
				  //color_seleccion="#FFFFFF";
				  color_seleccion="#FFFFFF";
			  }
			  else if (tempo==2) 
			  {
				  nombre_tempo='Temporada Media';
				  //color_seleccion="#D9F0F1";
				  color_seleccion="#FFFFFF";
			  }
			  else if (tempo==3) 
			  {
				  nombre_tempo='Temporada Alta';
				  //color_seleccion="#C0E1A2";
				  color_seleccion="#FFFFFF";
			  }
			  else if (tempo==4)
			  {
				  nombre_tempo='Temporada Especial';
				  //color_seleccion="#FAF6A7";
				  color_seleccion="#FFFFFF";
			  }
	
			  if(!Lista_Reservas.Dia_Completo(__Dia,__Mes,__Ano))
				if(Lista_Reservas.Dia_SemiCompleto(__Dia,__Mes,__Ano))
				{
				  //color_seleccion="#ffd5d5";
					color_seleccion=color_semiocupado;
				}
	
			  if(_car=='b')
			  {
				  existe_version=(typeof(window['Version_plataforma']) == "undefined")?  false: true;
				  if((existe_version) && (Version_plataforma=='v8'))
					  _imagen_tempo='../../images/tempo_'+tempo+'.gif';
				  else
					  _imagen_tempo='./images/tempo_'+tempo+'.gif';
				  elementin.style.backgroundImage='url('+_imagen_tempo+')';
				  elementin.style.backgroundPosition='bottom';
				  elementin.style.backgroundRepeat='no-repeat';
			  }
				  
			  /*PONE EL COLOR AL DIA SELECCIONADO SI NO EXISTE BUSCADOR*/
			  if((!deseleccion) && (Globales.Lista_Seleccion.Dia_Seleccionado(__Dia,__Mes,__Ano)) )
			  {
				color_seleccion="#5f5b58";
				color_txt='#FFFFFF';
			  }
			  else if((_car=='a') && (!deseleccion))
				color_seleccion="#5f5b58";		  
			  else if (Lista_Reservas.Dia_Completo(__Dia,__Mes,__Ano))
				  color_seleccion="#F87E78";
			  
			  // ----- Si el color es anterior a hoy se pinta en gris
			  fecha_aux_=new Date(__Ano,(__Mes-1),__Dia,0,0,0);
			  hoy_=new Date();
			  hoy_=new Date(hoy_.getFullYear(),hoy_.getMonth(),hoy_.getDate(),0,0,0);
			  if(fecha_aux_ < hoy_)
				  color_seleccion="#DDDDDD";
				
			  
			  elementin.style.backgroundColor=color_seleccion;
			  elmentin_dia=document.getElementById(__Dia+"-"+__Mes+"-"+__Ano+"_dia");
			  elmentin_dia.style.color=color_txt;
			  
			   //onMouseOver="this.style.backgroundColor='#FF0000';" onMouseOut="this.style.backgroundColor='#00FF00';"
		  } else
		  {
			  
			  if (Lista_Seleccion.Dia_Seleccionado(__Dia,__Mes,__Ano))
			  /*PONE EL COLOR AL DIA SELECCIONADO SI ES EXISTE BUSCADOR*/		  
				color_seleccion="#5f5b58";
	
			  elementin.style.backgroundColor=color_seleccion;
	
			  
		  }
		}
		
		if(!buscador)
		{
			if (aniadir)
			{
				Globales.Hab_Seleccion.TLista_Vacia_Hotel();
				Pinta_Habitaciones_Libres();
				Pinta_Servicios(false);
				// ---- V6.0 ----
				Haz_Visible_TXT(2);
			}
		}
	} // Anade_colorea
	
	
  var cuan=0;
  function Fecha_DesdeHoy(Dia,Mes,Ano)
  {
	 // Las variables de hoy_dia,hoy_mes,hoy_ano se cargan con PHP antes de la inclusión de la libreria clases_calendario.js
    var year=hoy_ano;
    var month=hoy_mes;
	var day=hoy_dia;

	day=day+"";
	month=month+"";
	Dia=Dia+"";
	Mes=Mes+"";
	
	if(day.length==1)
	  day="0"+day;
	if(month.length==1)
	  month="0"+month;

	if(Dia.length==1)
	  Dia="0"+Dia;
	if(Mes.length==1)
	  Mes="0"+Mes;

	Esp=year+"-"+month+"-"+day;
	Hoy=Ano+"-"+Mes+"-"+Dia;
	
	// Comprobamos que el año pulsado no sea mayor q el actual+2
	if(Ano>=(year+2))
		return false;
	else 
		return(Hoy>=Esp);
  }
  
  function Pintar_Dia(buscador,Dia,Mes,Ano,dia_especial,dia_festivo)
  {
    _resultado="<font id=\""+Dia+"-"+Mes+"-"+Ano+"_dia\" class=\"texto_base\"";
	especial_i="";
	especial_f="";
	
	// Es día especial
	if (dia_especial)
	{
	  especial_i="<strong><i>";
	  especial_f="</i></strong>";
	}

	// Es día Festivo
	if (!buscador)
	 	if ((dia_festivo) && (!Globales.Lista_Seleccion.Dia_Seleccionado(Dia,Mes,Ano)))
	  		_resultado=_resultado+' color="' +  holidayColor+'"';
	_resultado=_resultado+">"+especial_i+Dia+especial_f+"&nbsp;<font>";
		
	if (!buscador)
	{
	 if (Fecha_DesdeHoy(Dia,Mes,Ano))
	  if (!Lista_Reservas.Dia_Completo(Dia,Mes,Ano))
	    _resultado="<a class=\"texto_base\" href=\"javascript:Pulsa_Dia("+buscador+",true,"+Dia+","+Mes+","+Ano+");\" >"+_resultado+"</a>";	
	} 
	else if (Fecha_DesdeHoy(Dia,Mes,Ano))
	  _resultado="<a class=\"texto_base\" href=\"javascript:Pulsa_Dia("+buscador+",true,"+Dia+","+Mes+","+Ano+");\" >"+_resultado+"</a>";	
	  
	return (_resultado);
  }
  
  function Limpiar(buscador)
  {
	  if(!buscador)
	  {
		cuantos=Globales.Lista_Seleccion.Lista.length;
		for (i_=0;i_<cuantos;i_++)
		{
		  salir=false;
		  if ((Globales.Lista_Seleccion.Lista[i_]!=null) && (!salir))
		  {
			Dia=Globales.Lista_Seleccion.Lista[i_].Dia;
			Mes=Globales.Lista_Seleccion.Lista[i_].Mes;
			Ano=Globales.Lista_Seleccion.Lista[i_].Ano;
			elemento=document.getElementById(Dia+"-"+Mes+"-"+Ano);
			if (elemento!=null)
			  elemento.style.backgroundColor="";
		  }
		}
		Globales.Lista_Seleccion.Limpiar();
	  }
  }
  
	function LimpiarEspacios(string) 
	{
		var temp = "";
		string = '' + string;
		splitstring = string.split(" ");
		for(ii_ = 0; ii_ < splitstring.length; ii_++)
		temp += splitstring[ii_];
		return temp;
	}
	
	function ControlCIF(texto)
	 {
		texto=LimpiarEspacios(texto);
        var pares = 0; 
        var impares = 0; 
        var suma; 
        var ultima; 
        var unumero; 
        var uletra = new Array("J", "A", "B", "C", "D", "E", "F", "G", "H", "I"); 
        var xxx; 
         
        texto = texto.toUpperCase(); 
         
        var regular =/^[ABCDEFGHKLMNPQS]\d\d\d\d\d\d\d[0-9,A-J]$/g; 
         if (!regular.exec(texto)) return false; 
              
         ultima = texto.substr(8,1); 

         for (var cont = 1 ; cont < 7 ; cont ++){ 
             xxx = (2 * parseInt(texto.substr(cont++,1))).toString() + 0; 
             impares += parseInt(xxx.substr(0,1)) + parseInt(xxx.substr(1,1)); 
             pares += parseInt(texto.substr(cont,1)); 
         } 
         xxx = (2 * parseInt(texto.substr(cont,1))).toString(); 
         impares += parseInt(xxx.substr(0,1)) + parseInt(0 + xxx.substr(1,1)); 
          
         suma = (pares + impares).toString(); 
         unumero = parseInt(suma.substr(suma.length - 1, 1)); 
         unumero = (10 - unumero).toString(); 
         if(unumero == 10) unumero = 0; 
          
         if ((ultima == unumero) || (ultima == uletra[unumero])) 
             return true; 
         else 
             return false; 
    } 

	function ControlDNI(dni) 
	{
		dni=LimpiarEspacios(dni);
		
		// Rellenamos con 0
		while(dni.length<9)
			dni='0'+dni;
		
		// Cogemos la letra
		var letraDNI=dni.substr(8,1);
		
		// Calculamos la letra que genera el número
		dni=dni.substr(0,8);
		if (!/^\d{8}$/.test(dni)) return false;
		var letras='TRWAGMYFPDXBNJZSQVHLCKE';
		var numero=dni%23;
		var letra_generada=letras.substring(numero,numero+1);
		
		// Comprobamos si coinciden las letras
		if(letra_generada.toUpperCase()==letraDNI.toUpperCase()) return true;
		else return false;
	}

  function Comprobar_Submit(formu,ver_alert)
  // Prevalecen las comprobaciones inferiores.
  // Devuelve => 0=OK, 1=Gestor Desactivad, 2=Gestor Disponibilidad, 
  //	3=SinDiasMarcados, 4=DíasMinimos, 5=Hab. sin marcar
  {
    puede=0;
	estadoscr=Globales.Casa_Actual.estadoscr;
	mostrar_msg=true;

	// ----- Control de Gestion => 0=Disponibilidad  1=Reserva  2=Desactivado
	if (estadoscr!=1)
	{		
		puede=1;
		if(estadoscr==0) // Disponibilidad
		{
			if(ver_alert)
				alert(Frase27);
			puede=2;
		}
		else if(estadoscr==2) // Desactivado
		{
			if(ver_alert)
				alert(Frase28);
			puede=1;
		}
		//alert('estadoscr:'+puede);
	}

	// ----- Tengamos Días seleccionados
	if(Globales.Lista_Seleccion.Vacia())
	{
		puede=3;
		if(ver_alert)
		  alert(Frase19);
	} // Días seleccionado
	
	// ----- Tenemos alguna habitación marcada
	if((puede==0) && (!Globales.Hab_Seleccion.TLista_Comprobar_Seleccionada()))
	{
		puede=5;
		if (ver_alert)
			alert(Frase22);
	} // Hab. marcada

	// ----- Cumplimos requisitos Días mínimos
	if((puede==0) && (!DiasMinimos.ComprobarDiasMinimos(ver_alert)))
		puede=4;
	
	if (puede==0)
	  Globales.Lista_Reservas=Lista_Reservas;
	  
	return (puede);
  }

// Fin Funciones de Art
///////////////////////////////////////////////////////////////////////////////////////////////////



/************************************************************************************************/



///////////////////////////////////////////////////////////////////////////////////////////////////
// Calendarios

if (URLargs.year)    { thisYear = parseInt(URLargs.year);            } 
if (URLargs.month)   { thisMonth = (parseInt(URLargs.month)%12);     } 
if (URLargs.starton) { calStartDOW = (parseInt(URLargs.starton)%7);  }

// Calcula si un año es bisiesto
function isLeapYear( year )
{
  return ( (0 == (year%4)) && ( (0 != (year%100)) || (0 == (year%400)))); 
} 


// Verifica si un día es válido
function isValidDayOfMonth( day, month, year) 
{ 
  if (day <= 0) { return false; }
  if (isLeapYear(year)) { return (day <= leapdays[month]);}
  return ( day <= yeardays[month]); 
} 

// Devuelve el número de días desde 0 Enero de 2000. Para días anteriores devuelve negativo
// Si no se le pasa ninguna fecha, coje la actual
function canonicalDate(day, month, year) 
{ 
  var canonDate = 0;

  var mday = myDate.getDate(); 
  var mmon = myDate.getMonth(); 
  var myr  = myDate.getFullYear(); 
  if( arguments.length > 0 ) 	 { mday = arguments[0];	 } 
  if( arguments.length > 1 ) 	 { mmon = arguments[1];	 } 
  if( arguments.length > 2 ) 	 { myr  = arguments[2];	 } 
  if(myr >= 2000) 
  { 
  	canonDate += mday; 
	while(mmon > 0)  { canonDate += isLeapYear(myr) ? leapdays[mmon]: yeardays[mmon]; mmon--;} 
	while(myr > 2000){ canonDate += isLeapYear(myr) ? 366: 365; myr--;  } 
  } 
  else
  { 
  	canonDate -= isLeapYear(myr) ? leapdays[mmon] - mday: yeardays[mmon] - mday; 
	while(mmon < 11)  { mmon++; canonDate -= isLeapYear(myr) ? leapdays[mmon]: yeardays[mmon];} 
	while(myr < 1999){ myr++; canonDate -= isLeapYear(myr) ? 366: 365;} 
  } 
  return canonDate; 
} 

// Número de días entre dos fechas. Devuelve negativo si la segunda es mayor
function dateDiff(firstDate, secondDate) 
{ 
  var days= ( canonicalDate(secondDate.getDate(), secondDate.getMonth(), secondDate.getFullYear()) -  
				  canonicalDate(firstDate.getDate(), firstDate.getMonth(), firstDate.getFullYear())); 
  return days; 
} 

function shiftArray(myArray) 
{ 
  // since Array.shift() is missing or broken on some versions of MSIE
  // we fake it here. 
  if(-1 != navigator.appVersion.indexOf("MSIE")) 		{ 
	 var myVal = myArray[0];
	 for(i__=0; i__<(myArray.length -1); i__++)
		{ myArray[i__] = myArray[i__+1];}
	 myArray.length = myArray.length -1; 
	 return myVal; 		} 
	 else return myArray.shift(); 
} 

// Comprueba si es fiesta. Teniendo en cuenta que en el array de Vacaciones "holydays" el mes está
// en letras y es "case sensitive"
function isHoliday(year,mon,mday)
{ 
  var dStr = mday + " " + mon + " " + year; 
  if(holidays[dStr]) { return true; } 
  return false; 
} 

// Comprueba si es fin de semana
function isWeekend( year, mon, mday) 
{ 
  var mDate = new Date(mday + " " + mon + " " + year); 
  return ( ( 0 == mDate.getDay())  ||  ( 6 == mDate.getDay()  )); 
} 

// Calcula entre dos fechas el número de días laborables
// restando fiestas y fines de semana
function calculateWorkDays( startDate, endDate) 
{ 
  var myEndDate = canonicalDate(endDate.getDate(), endDate.getMonth(), endDate.getFullYear()); 
  var counter = 0; 
  var mDay = startDate.getDate(); 
  var mMonth = startDate.getMonth(); 
  var mYear  = startDate.getFullYear(); 
  while  (canonicalDate(mDay, mMonth, mYear) <= myEndDate)
    { 
		if(! ( isHoliday(mYear,months[mMonth],mDay) ||	 isWeekend(mYear,months[mMonth],mDay)) ) 
		{ counter++; } 

      // incrementamos la fecha. Es final de mes? 
      var omDay = mDay;
      var omMonth = mMonth; 
      var omYear = mYear; 
      mDay = isLeapYear(mYear) ? 
		  ((mDay >= leapdays[mMonth]) ? 1 : mDay+1):
		  ((mDay >= yeardays[mMonth]) ? 1 : mDay+1);
      // necesitamos incrementar el mes ? 

      mMonth = (mDay == 1) ?  (mMonth +1) % 12: mMonth; 
      // necesitamos incrementar el año? 
      mYear = ( (mDay == 1) && (mMonth == 0)) ? mYear + 1: mYear;
      // startDate = new Date(mDay, mMonth, mYear); 
    }
  return counter; 
} 

function writeCalendar(buscador,target, myYear, myMonth, sday, eday, qano)
{ 
  var resultar="";
  // writes a calendar to target  for myMonth myYear. 
  // sday and eday are optional values indicating the range of dates 
  // to be set in bold. 
  // get a new date for the first day of the month the user is looking at
  var calDate = new Date( myYear,  myMonth, 1, 0,0,0,0 ); 
  // how many days are in the month ? 
  var mDays = isLeapYear(myYear) ? leapdays[myMonth]: yeardays[myMonth]; 
  var i = 0; 
  // what day of the week does the month start on? 
  var wkDay = calDate.getDay(); 
  var dateBgAtt = ""; 
  var dateFontTag = "";
  var fontCloseTag = ""; 
  var boldTag = "";
  var unBoldTag = ""; 
  // if the function was called with the sday and eday arguments, then the 
  // caller wants a range of dates written in bold 
  var useBold = arguments.length >= 5 ? true: false; 
  
  // Escribimos la cabecera para el calendario (mes y año)
  resultar+="<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";

  ani1="<span class=\"textos_oscuros\">" + longmonths[myMonth] + 
  		"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" + 
		myYear +"</strong>";
  if (qano==1)
    elem_hab=document.getElementById("anio1");
  else
    elem_hab=document.getElementById("anio2");
  elem_hab.innerHTML=ani1;
  					

  // Escribe los nombre de los días de la semana
  resultar+="<TR ALIGN=\"RIGHT\">"; 
  for(i=0; i< 7; i++) 
  { 
    resultar+="<td width=\"25\" height=\"15\" align=\"center\"><font class=\"textos_oscuros\">"+ dow[((i+calStartDOW)%7)]+ "</font></td><td width=\"1\"></td>";
  }
  resultar+="</TR>\n";

  // Empieza con espacios hasta encontrar el 1º día del mes
  resultar+="<TR ALIGN='RIGHT'>"; 
  for(i=0 ; i < ((7 - calStartDOW + wkDay)%7); i++) 
  { 
    resultar+="<td width=\"25\" height=\"21\">&nbsp;&nbsp;</TD><td width=\"1\"></td>";	 
  }

  // since javascript doesn't do modulus on negative numbers, 
  // add 7 to anything that might be negative
  var cmdate = i - ((7 - calStartDOW + wkDay)%7); 
  var diapinta=cmdate;
  var fechapinta=sday+"/"+myMonth+"/"+myYear;
 
  // Escribe los días de la semana
  for( i=i; cmdate < mDays ; i++) 
  {  
    // what is the date ? 
	cmdate++; 
   // Si hemos encontrado el último día de la semana, empezamos otra semana
	if(0 == (i%7))
	{
	  resultar+="</tr><tr><td height=\"1\"></td><td width=\"1\" height=\"1\"></td><td height=\"1\"></td></tr><TR ALIGN='RIGHT'>"; 
	} 

	// Marcamos el día como festivo
	dia_festivo=false;
	if( (isHoliday(calDate.getFullYear(),months[calDate.getMonth()],cmdate)) || (isWeekend(calDate.getFullYear(),months[calDate.getMonth()],cmdate)) )
	  dia_festivo=true;

	// Marcar el dia especial
	dia_especial=false;
	if( ( useBold )  && (cmdate >= sday) && (cmdate <= eday))
	  dia_especial=true;

	// Pintamos el dia
    diapinta=Pintar_Dia(buscador,cmdate,(myMonth+1),myYear,dia_especial,dia_festivo);
	resultar+="<td width=\"23\" height=\"21\" align=\"right\" valign=\"top\" bgcolor=\"#FFFFFF\" style=\"border: 1px solid #000000;\">";
	nom_elem=cmdate+"-"+(myMonth+1)+"-"+myYear;
	lista_pintados.push(cmdate+"-"+(myMonth+1)+"-"+myYear);//JORGE - ALMACENAMOS LOS NOMBRE DE LOS ELEMENTOS PINTADOS-

//	if (navigator.appName == "Netscape")
	if (false)
	{ 
	/*************************** JORGE*///////////////
//Construismo el calendario con un table para cada cuadro con el fin de que nos permita poner un div al lado del otro

		resultar+='<table width=" 100%" border="0" cellspacing="0" cellpadding="0"><tr><td width="12">';
		resultar+='<layer width=\" 100%\" height=\"21\" name=\""+nom_elem+"_a\" id=\""+nom_elem+"_a\" visibility=show>" + diapinta + "</layer>';
		resultar+='</td><td width="12" >';
		resultar+='<layer width=\" 100%\" height=\"21\" name=\""+nom_elem+"_b\" id=\""+nom_elem+"_b\" visibility=show>" + diapinta + "</layer>';
		resultar+='</td></tr></table>';

	}	
	else 
	{
/*************************** JORGE*///////////////
//Construismo el calendario con un table para cada cuadro con el fin de que nos permita poner un div al lado del otro
		resultar+='<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td width="12">';
		resultar+='<div name="'+nom_elem+'_a" id="'+nom_elem+'_a" style="height: 21px; width: 100%; text-align:left;"></div>';
		resultar+='</td><td>';
		resultar+='<div name="'+nom_elem+'_b" id="'+nom_elem+'_b" style="height: 21px; width: 100%; color:#000000;">'+ diapinta + '</div>';
		resultar+='</td></tr></table>';
		//alert("<div width=\"100%\" height=\"100%\" name=\""+cmdate+"-"+(myMonth+1)+"-"+myYear+"\" id=\""+cmdate+"-"+(myMonth+1)+"-"+myYear+"\">"+ diapinta + "</div>");
	}	
	resultar+="</td><td width=\"1\"></td>";

   //alert(resultar);

	pa_pulsar[pa_pulsar.length]=nom_elem;
  }

  while(0 != (i%7)) 
  {
    resultar+="<TD>   </TD>"; 
	i++; 
  }
  resultar+="</TR>"; 
  resultar+="</TABLE>"; 
  return (resultar);
} 

function drawCalendar(buscador, ourTarget, ourYear, ourMonth, startDay, endDay, qano)
{
  resulta="";
  var myMonth = myDate.getMonth(); 
  var myYear  = myDate.getFullYear(); 
  var target = document; 
  if(arguments.length >= 1) { target = ourTarget; }
  if(arguments.length >= 2) { myYear = ourYear; } 
  if(arguments.length >= 3) { myMonth = ourMonth; } 
	 { resulta=writeCalendar(buscador,target, myYear, myMonth, startDay, endDay, qano); }
	 
  return (resulta);
} 

function Dias_A_Pulsar(buscador)
{
  solo=new Array();
  for(dp=0;dp<pa_pulsar.length;dp++)
  {
    Separa_Fecha_Spain(solo,pa_pulsar[dp]);
  	Pulsa_Dia(buscador,false,solo[0],solo[1],solo[2],true);
  }

}

// Crea un nuevo calendario. Los argumentos son opcionales
// Si se usa myear => es el año del calendario del centro
// Si se usa mmonth => es el mes del calendario del centro
function Crear_Calendarios(buscador,myear, mmonth)
{ 
  resul="";
  var myMonth = thisMonth; 
  var myYear  = thisYear; 
  if(arguments.length == 2) { myMonth = mmonth; myYear == myear; } 
  // it's surprising how many coders don't use modular arithmetic to 
  // do date and time. Javascript doesn't understand negative numbers in
  // positive modulus, so we add 11 instead of subtracting 1. 
  var lastMonth = (myMonth + 11) % 12; 
  var lmYear    = (myMonth == 0)? myYear -1: myYear; 
  var nextMonth = (myMonth +1)%12; 
  var nmYear    = (myMonth == 11)? myYear + 1: myYear;

  //resul+="<TABLE ALIGN=\"TOP\">";
  if (buscador)
  {
    var buttonStringA = "<a href=\"" + docName + "?opcion=1&month=" + lastMonth+  "&year=" + lmYear +"&startOn="+ calStartDOW +"&grupo="+ grupo +"\" onClick=\"Limpiar(true);\"><span class=\"texto_blanco\">"+anterior+"</span></a>";
    var buttonStringS = "<a href=\"" + docName + "?opcion=1&month=" + nextMonth+  "&year=" + nmYear +"&startOn="+ calStartDOW +"&grupo="+ grupo +"\" onClick=\"Limpiar(true);\"><span class=\"texto_blanco\">"+siguiente+"</span></a>";
  } else
  {
	  existe_version=(typeof(window['Version_plataforma']) == "undefined")?  false: true;
	  if((existe_version) && (Version_plataforma=='v8'))
	  {
		var buttonStringA = "<a href=\"" + docName + "?opcion_n=1&opcion=1&month=" + lastMonth+  "&year=" + lmYear +"&startOn="+ calStartDOW +"&id_casa="+ Globales.id_casa +"&calendario_abierto=1&operador="+ Globales.operador +"\" onClick=\"Limpiar(false);\"><img src=\"../../images/flecha_gris_izq.gif\" border=\"0\"></a>";
		var buttonStringS = "<a href=\"" + docName + "?opcion_n=1&opcion=1&month=" + nextMonth+  "&year=" + nmYear +"&startOn="+ calStartDOW +"&id_casa="+ Globales.id_casa +"&calendario_abierto=1&operador="+ Globales.operador +"\" onClick=\"Limpiar(false);\"><img src=\"../../images/flecha_gris_der.gif\" border=\"0\"></a>";
	  } else
	  {
		var buttonStringA = "<a href=\"" + docName + "?opcion=1&month=" + lastMonth+  "&year=" + lmYear +"&startOn="+ calStartDOW +"&id_casa="+ Globales.id_casa +"&operador="+ Globales.operador +"&quitar_cabecera="+ quitar_cabecera +"\" onClick=\"Limpiar(false);\"><span class=\"texto_blanco\">"+anterior+"</span></a>";
		var buttonStringS = "<a href=\"" + docName + "?opcion=1&month=" + nextMonth+  "&year=" + nmYear +"&startOn="+ calStartDOW +"&id_casa="+ Globales.id_casa +"&operador="+ Globales.operador +"&quitar_cabecera="+ quitar_cabecera +"\" onClick=\"Limpiar(false);\"><span class=\"texto_blanco\">"+siguiente+"</span></a>";
	  }
  }
  elem_hab=document.getElementById("btn_anterior");
  elem_hab.innerHTML=buttonStringA;
  elem_hab=document.getElementById("btn_siguiente");
  elem_hab.innerHTML=buttonStringS;

  /////////////////////////////////////////////////////////////////////////////////////////
  // Pinta los calendarios

  var isThisMonth = ((lastMonth == myDate.getMonth())&& (lmYear==myDate.getFullYear())); 
  resul="";
  var calendar1=document.getElementById("calendar1");
  isThisMonth = ((myMonth == myDate.getMonth())&& (myYear==myDate.getFullYear())); 
  resul+=drawCalendar(buscador,document, myYear, myMonth, (isThisMonth? myDate.getDate():0), (isThisMonth? myDate.getDate():0),1); 
  calendar1.innerHTML=resul;

  // WRITE CALENDAR #3
  resul="";
  var calendar2=document.getElementById("calendar2");
  isThisMonth = ((nextMonth == myDate.getMonth())&& (nmYear==myDate.getFullYear())); 
  resul+=(drawCalendar(buscador,document, nmYear, nextMonth,	(isThisMonth ? myDate.getDate():0), (isThisMonth ? myDate.getDate():0),2)); 
  calendar2.innerHTML=resul;
  
  Dias_A_Pulsar(buscador);
  
  //return (resul);
} 

// Fin Calendarios
///////////////////////////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////////////////////////
// Funciones para los Servicios

  function Pinta_Servicios(Solo_Lectura)
  {
	if (Globales.ListaServicios.Lista.length>0)
	{
	  salida=Globales.ListaServicios.PintarServicios(Solo_Lectura);
      elem_hab=document.getElementById("servicios");
      elem_hab.innerHTML=salida;
	} // Si hay servicios
  }
  

// Fin Funciones para los Servicios
///////////////////////////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////////////////////////
// Funciones para las Ofertas

/*  function Pinta_Servicios(Solo_Lectura)
  {
	if (Globales.ListaServicios.Lista.length>0)
	{
	  salida=Globales.ListaServicios.PintarServicios(Solo_Lectura);
      elem_hab=document.getElementById("servicios");
      elem_hab.innerHTML=salida;
	} // Si hay servicios
  }
*/  
  function VerOfertas()
  {
    dir="./ofertas_v0_2.php?id_casa="+Globales.id_casa+"&idioma="+Globales.idioma+"&operador="+Globales.operador;
    window.open(dir,'condicionesreserva','scrollbars=yes,width=510,height=450,status=yes');
  }

// Fin Funciones para las Ofertas
///////////////////////////////////////////////////////////////////////////////////////////////////


	function Pinta_Elementos_Reserva()
	{
		Pinta_Habitaciones_Libres();
		Pinta_Servicios(false);
	}

/*	function AddServicios(ListaS)
	{
		//alert('1');
		Globales.AddServicios(ListaS);
		Pinta_Servicios(false);
	}
*/

/******************** FUNCIONES RELACIONADAS CON LA INFORMACION DE LAS HABITACIONES*********************************************/
  function Pinta_Habitaciones_Libres()
  {
    Lista_Ocupacion=null;
    Lista_Ocupacion=new Array();
	omitidas=null;
	omitidas=new Array();
	Globales.total_euro=0;

	//alert('Dias Marcados:'+Globales.Lista_Seleccion.Lista.length);
	for (iOc=0;iOc<Globales.Lista_Seleccion.Lista.length;iOc++)
	  if (Globales.Lista_Seleccion.Lista[iOc]!=null)
	  {
	    Dia=Globales.Lista_Seleccion.Lista[iOc].Dia;
	    Mes=Globales.Lista_Seleccion.Lista[iOc].Mes;
	    Ano=Globales.Lista_Seleccion.Lista[iOc].Ano;
        Lista_Reservas.Dame_Habitaciones_Ocupadas(Lista_Ocupacion,Dia,Mes,Ano);
	  }
	
	Globales.Hab_Seleccion.TLista_Vaciar();
	salida="";
	
	if (!Globales.Lista_Seleccion.Vacia())
	{
	  if (Globales.modo_hotel)  // Pintamos en modo Hotel
	  {
	    __j=0;
	    casa_completisima=false;
		//alert('Nª Habitaciones:'+Globales.Lista_Habitaciones.TLista_Lista_Hab.length);
		while ((__j<Globales.Lista_Habitaciones.TLista_Lista_Hab.length) && (!casa_completisima))
		{
		  habitania=Globales.Lista_Habitaciones.TLista_Lista_Hab[__j];	
		  pinta_h=true; 
		  for(io=0;io<omitidas.length;io++)
		  {
		    if (habitania.id_habitacion==omitidas[io])
			  pinta_h=false;
		  }
		  
		  if(pinta_h)
		  {
			  if (!habitania.THab_Habitacion_Completa_Hotel(Lista_Ocupacion,omitidas))
			  {
				if ((habitania.tipo_agrupacion==0) && (habitania.Lista_Hijas[0].nseleccionado>0))		    
				  casa_completisima=true;
				libre=!((habitania.tipo_agrupacion==0) && (Lista_Ocupacion.length>0));
				if ((libre) && (Globales.Lista_Habitaciones.TLista_Lista_Hab[__j].desactivada==0))
				{ 
				  Globales.Hab_Seleccion.TLista_Lista_Hab[Globales.Hab_Seleccion.TLista_Lista_Hab.length]=Globales.Lista_Habitaciones.TLista_Lista_Hab[__j];
				  salida+=Globales.Lista_Habitaciones.TLista_Lista_Hab[__j].THab_Pinta_Listado_A_Elegir(false,true,Lista_Ocupacion,Globales.ano1);
				}	
			  } else
				omitidas[omitidas.length]=habitania.id_habitacion;
		  } // Si pintar
		  
	      __j++;
		} // Del While Habitaciones Padre

	  } // Del Modo Hotel
	  else						// Pintamos en modo rural
	  {
	    j=0;
	    casa_completisima=false;
		//alert('Nº Habitaciones:'+Globales.Lista_Habitaciones.TLista_Lista_Hab.length);
		while ((j<Globales.Lista_Habitaciones.TLista_Lista_Hab.length) && (!casa_completisima))
		{
		  habitania=Globales.Lista_Habitaciones.TLista_Lista_Hab[j];	 
		  for (l=0;l<habitania.Lista_Hijas.length;l++)
		  {
		    if ((habitania.tipo_agrupacion==0) && (habitania.Lista_Hijas[l].nseleccionado>0))		    
			  casa_completisima=true;
			libre=true;
		  	k=0;
			//alert('Nº Hab. Ocupadas:'+Lista_Ocupacion.length);
			while ((k<Lista_Ocupacion.length) && (libre))
			{
			  libre=!(habitania.Lista_Hijas[l].id_habitacion_base==Lista_Ocupacion[k]);
			  k++;
			}
			if (libre)
			  libre=!((habitania.tipo_agrupacion==0) && (Lista_Ocupacion.length>0));
			//alert('Libre:'+libre+' - '+Globales.Lista_Habitaciones.TLista_Lista_Hab[j].desactivada);
			if ((libre) && (Globales.Lista_Habitaciones.TLista_Lista_Hab[j].desactivada==0))
			{ 
			  Globales.Hab_Seleccion.TLista_Lista_Hab[Globales.Hab_Seleccion.TLista_Lista_Hab.length]=Globales.Lista_Habitaciones.TLista_Lista_Hab[j];
			  salida+=Globales.Lista_Habitaciones.TLista_Lista_Hab[j].THab_Pinta_Listado_A_Elegir(false,false,habitania.Lista_Hijas[l].id_habitacion_base,Globales.ano1);
			}	
		  }	// De las habitaciones Base
		  j++;
		} // De Habitaciones Padre
	  } // Del modo rural
	} // Si la lista no está vacía

//	alert('Total_euro: '+ Globales.total_euro);
    document.getElementById("habitaciones").innerHTML=salida;
    //elem_hab=document.getElementById("total");
    //elem_hab.innerHTML="Total: "+Globales.total_euro+"€";
  }
