	/*
	Para usarlo añadimos el siguiente script en nuestro xsl:
	<script language="JavaScript" type="text/JavaScript" src="{/root/xsl_path}js/hb_calendarR2.js"></script>
	*/

    var nameForm = '';         // nombres de forms e inputs
    var nameInputFrom = '';
    var nameInputTo = '';
    var nameSelectNights = '';
    var typeInputNights = '';  //variable para controlar si el input nigths es una combo o no

    // Variables globales de formato
    var dFormat = '';       // Formato de fecha que usan los calendarios, util para poder usar notación americana
    var	fieldValue = '';     // Valor por defecto de los imputs de texto de fechas
    var	numNights = '';     // Número de noches que permite seleccionar el segundo calendario a partir de la fecha del primero


	//cal.enableAllDates();   //Esta funcion sirve para habilitar de nuevo todas las fechas seleccionables del calendario

	// PARA SOPORTAR MULTIDIOMA Y MULTIFORMATO ESTE BLOQUE DEBE SER DINÁMICO Y ESTAR FUERA DEL JS !!

    /*
      // por defecto: idioma inglés con notacion europea y 30 noches
      setGlobalVariables('dd/MM/yyyy','dd/mm/yyyy', 30);
      cal.setMonthNames('January','February','March','April','May','June','July','August','September','October','November','December');
      cal.setDayHeaders('Su','Mo','Tu','We','Th','Fr','Sa');
      cal2.setMonthNames('January','February','March','April','May','June','July','August','September','October','November','December');
      cal2.setDayHeaders('Su','Mo','Tu','We','Th','Fr','Sa');
    */

    /*
      // idioma inglés con notacion americana
      setGlobalVariables('MM/dd/yyyy','mm/dd/yyyy', 30);
      cal.setMonthNames('January','February','March','April','May','June','July','August','September','October','November','December');
      cal.setDayHeaders('Su','Mo','Tu','We','Th','Fr','Sa');
      cal2.setMonthNames('January','February','March','April','May','June','July','August','September','October','November','December');
      cal2.setDayHeaders('Su','Mo','Tu','We','Th','Fr','Sa');
    */

    /*
      // idioma español
      setGlobalVariables('dd/MM/yyyy','dd/mm/aaaa', 30);
      cal.setMonthNames('Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre');
      cal.setDayHeaders('Do','Lu','Ma','Mi','Ju','Vi','Sa');
      cal.setMonthNames('Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre');
      cal.setDayHeaders('Do','Lu','Ma','Mi','Ju','Vi','Sa');
    */

	/* Inicializa las variables globales y los calendarios */
	function setGlobalVariables(format,field,nights){
	
        dFormat = format;       // Formato de fecha que usan los calendarios, util para poder usar notación americana
       	fieldValue = field;     // Valor por defecto de los imputs de texto de fechas
       	numNights = nights;     // Número de noches que permite seleccionar el segundo calendario a partir de la fecha del primero


	    // Variables globales de fecha
       	now = new Date();
	    dateFrom = formatDate(now,dFormat);     // Fecha from actual
	    dateTo = dateFrom;                      // Fecha to actual

        // Inicialización de los calendarios
	    cal = new CalendarPopup('divcalendar');     // Calendarios van asociados a la capa
        cal2 = new CalendarPopup('divcalendar');
	    cal.addDisabledDates(null,calculateFinalDate(dateFrom,-1),dFormat);     // Desabilitar rangos de fechas por defecto en los calendarios
	    cal2.addDisabledDates(null,calculateFinalDate(dateFrom,-1),dFormat);
    }
	
	/* Retorna el numero de dias de un mes determinado */
	function numDaysMonth(month,year) {
		var days = 31;
		if (month == 4 || month == 6 || month == 9 || month == 11) 
			days = 30;
		if (month == 2 && (year/ 4) != Math.floor (year/4)) 
			days = 28;
		if (month == 2 && (year/ 4) == Math.floor (year/4))
			days = 29;
		return days;
	}
	
	/* Convierte de formato europeo a americano y viceversa cuando es necesario, segun la variable global que determina el formato usado */
	function convertDateFormat(string) { 
		if (dFormat == 'MM/dd/yyyy') {
		    var temp = new Array();
			temp = string.split('/');
			return (temp[1] + "/"+ temp[0] + "/" + temp[2]);
		}
		return string;
	}
	
	/* Añade ceros en el dia y el mes si es necesario */
	function completeDate(string) {
		var temp = new Array();
		temp = string.split('/');
		if (temp[0].length == 1)
			temp[0] = "0" + temp[0];
	    if (temp[1].length == 1)
			temp[1] = "0" + temp[1];
		return convertDateFormat((temp[0] + "/"+ temp[1] + "/" + temp[2]));
	}
	
	/* Devuelve una fecha real a partir de un string*/
	function createDate(string) {
		var newString = completeDate(string);
		var temp = new Array();	
		temp = newString.split('/');
		var date;
		date = new Date(temp[2],eval(temp[1])-1,temp[0]);
		return (date);	
	}	
	
	/* Suma o resta un número de noches a una fecha determinada */
	function calculateFinalDate(date,nights) {
		if (nights == 0) return (date);
		var newDate = convertDateFormat(date);
		var temp = new Array();
		temp = newDate.split('/');
		var d1 = eval(temp[0]);
		var m1 = eval(temp[1]);
		var y1 = eval(temp[2]);
		d1 += eval(nights);
		if (d1 > 0) {
			while (d1 > numDaysMonth (m1,y1)) {
				d1 -= numDaysMonth (m1,y1);
				m1++;
				if (m1 > 12) {
					 m1 = 1;
					 y1++;
				}
			}
		} else {
			while (d1 < 1) {
				m1--;
				if (m1 < 1) {
					 m1 = 12;
					 y1--;
				}
				d1 += numDaysMonth (m1,y1);
			}
		}
		return (completeDate(d1 + "/" + m1 + "/" + y1));
	}

    /*FUNCIONES PARA CALENDARIOS FROM Y TO*/
    /*
      Ejemplo de uso:

      <table border="0" cellspacing="0" cellpadding="0" class="motortit">
            <tr>
              <td width="6" height="16">&nbsp;</td>
              <td width="100">From</td>
              <td width="75">Nights</td>
              <td>To</td>
            </tr>
            <tr>
              <td align="left">&nbsp;</td>
              <td align="left"><input name="i_from" type="text" class="formmotor" id="i_from" value="dd/mm/yyyy" size="11" onchange="javascript: returnFrom('ft_search','i_from','i_to','s_nights');"/>
                  <a href="#" name="linkFrom" id="linkFrom" onclick="javascript: viewFromCal('ft_search','i_from','i_to','s_nights', 'linkFrom', dFormat, dateFrom ,'combo');return false;">
                      <!--el parametro combo es para saber si la input Nights es una combo o no, si no es combo lo pasamos vacio ('')-->
                      <img src="{root/xsl_path}images/ico_calendar.gif" width="19" height="17" border="0" align="absmiddle" />
                  </a>
              </td>
              <td align="left">
                  <select name="s_nights" id="s_nights" class="formmotor" onchange="javascript: returnNights('ft_search','i_from','i_to','s_nights');">
                    <option selected="selected">Nights</option>
                    <script type="text/javascript" language="JavaScript1.2"> putOptions(1, 30); </script>
                  </select>
               </td>
              <td align="left"><input name="i_to" type="text" class="formmotor" id="i_to" value="dd/mm/yyyy" size="11" onchange="javascript: returnTo('ft_search','i_from','i_to','s_nights');"/>
                  <a href="#" name="linkTo" id="linkTo" onclick="javascript: viewToCal('ft_search','i_from','i_to','s_nights', 'linkTo', dFormat, dateFrom, 'combo');return false;">
                      <img src="{root/xsl_path}images/ico_calendar.gif" width="19" height="17" border="0" align="absmiddle" />
                  </a>
              </td>
            </tr>
          </table>

        NOTA: si no usamos en nuestro caso un campo con las NOCHES, donde pone 's_nights' en el ejemplo anterior, pondremos '' (dos comillas)
    */


    /*  Funcion que se ejecuta al clicar calendario From */
     function viewFromCal(nombreForm, nombreInputFrom, nombreInputTo, nombreSelectNights, linkname, format, dateFrom, isSelect ) {
        nameForm = nombreForm;
        nameInputFrom = nombreInputFrom;
        nameInputTo = nombreInputTo;
        nameSelectNights = nombreSelectNights;
        typeInputNights = isSelect;
        cal.setReturnFunction('commonFrom');
	    cal.select(eval("document." + nameForm + "." + nameInputFrom), linkname, format, dateFrom);
    }

    /*  Funcion que se ejecuta modificar a mano el calendario From */
    function returnFrom(nombreForm, nombreInputFrom, nombreInputTo, nombreSelectNights) {
        nameForm = nombreForm;
        nameInputFrom = nombreInputFrom;
        nameInputTo = nombreInputTo;
        nameSelectNights = nombreSelectNights;
        commonFrom();
    }

	function commonFrom() {
	    var from = eval("document." + nameForm + "." + nameInputFrom).value;
		var to = '';
		if (nameInputTo !='') eval("document." + nameForm + "." + nameInputTo).value;
		if	(arguments.length == 0) {
			if (!isDate(from,dFormat)) {
				alert (calr_key945);
				eval("document." + nameForm + "." + nameInputFrom).value = fieldValue;
				eval("document." + nameForm + "." + nameInputFrom + ".focus()");
				return;
			}
			if (compareDates(from,dFormat,formatDate(now,dFormat),dFormat) == 0) {
				alert (calr_key950);
				eval("document." + nameForm + "." + nameInputFrom).value = fieldValue;
				eval("document." + nameForm + "." + nameInputFrom + ".focus()");
				return;
			}
			if ((to != fieldValue) && (to != '') && (compareDates(to,dFormat,dateFrom,dFormat) == 0)) {
			alert (calr_key949);
			eval("document." + nameForm + "." + nameInputTo).value = fieldValue;
			eval("document." + nameForm + "." + nameInputTo + ".focus()");
			return;
			}
			var temp = new Array();
			from = convertDateFormat(from);
			temp = from.split('/');
			d1 = temp[0]; m1 = temp[1]; y1 = temp[2];
			if ((y1 < now.getFullYear()) || (y1 > now.getFullYear() + 1)) {
				alert (calr_key947);
				eval("document." + nameForm + "." + nameInputFrom + ".focus()");
				return;
			}
			dateFrom = completeDate(from);
		} else {
			d1 = arguments[2]; m1 = arguments[1]; y1 = arguments[0];
			dateFrom = completeDate(d1 + "/" + m1 + "/" + y1);
		}
		dateTo = dateFrom;
		eval("document." + nameForm + "." + nameInputFrom).value = dateFrom;
		cal2.enableAllDates();
		cal2.addDisabledDates(null,calculateFinalDate(dateFrom,-1),dFormat);
		if ((nameSelectNights != '') && (nameInputTo !='')) {
		var dateLimit = calculateFinalDate(dateFrom,numNights);
		cal2.addDisabledDates(calculateFinalDate(dateLimit,1),null,dFormat);
		// marcar campos
		if (eval("document." + nameForm + "." + nameSelectNights + '.selectedIndex') != 0)
			returnNights(nameForm, nameInputFrom, nameInputTo, nameSelectNights);
		else
			eval("document." + nameForm + "." + nameInputTo).value = fieldValue;
		}
     }

     /*  Funcion que se ejecuta al clicar el calendario To */
     function viewToCal(nombreForm, nombreInputFrom, nombreInputTo, nombreSelectNights, linkname, format, dateFrom ) {
        nameForm = nombreForm;
        nameInputFrom = nombreInputFrom;
        nameInputTo = nombreInputTo;
        nameSelectNights = nombreSelectNights;
        cal2.setReturnFunction('commonTo');
	    cal2.select(eval("document." + nameForm + "." + nameInputTo), linkname, format, dateTo);
    }

    /*  Funcion que se ejecuta al modificar a mano el calendario To */
    function returnTo(nombreForm, nombreInputFrom, nombreInputTo, nombreSelectNights) {
        nameForm = nombreForm;
        nameInputFrom = nombreInputFrom;
        nameInputTo = nombreInputTo;
        nameSelectNights = nombreSelectNights;
        commonTo();
    }

	function commonTo() {
	    var from = eval("document." + nameForm + "." + nameInputFrom).value;
		var to = eval("document." + nameForm + "." + nameInputTo).value;
		if	(arguments.length == 0) {
			if (!isDate(to,dFormat)) {
				alert (calr_key945);
				eval("document." + nameForm + "." + nameInputTo).value = fieldValue;
				eval("document." + nameForm + "." + nameInputTo + ".focus()");
				return;
			}
			if (compareDates(to,dFormat,formatDate(now,dFormat),dFormat) == 0) {
				alert (calr_key950);
				eval("document." + nameForm + "." + nameInputTo).value = fieldValue;
				eval("document." + nameForm + "." + nameInputTo + ".focus()");
				return;
			}
			if ((to != fieldValue) && (compareDates(to,dFormat,dateFrom,dFormat) == 0)) {
				alert (calr_key949);
				eval("document." + nameForm + "." + nameInputTo).value = fieldValue;
				eval("document." + nameForm + "." + nameInputTo + ".focus()");
				return;
			}
			var dateLimit = calculateFinalDate(dateFrom,numNights);
			if ((from != fieldValue)&& (nameSelectNights != '') && (compareDates(dateLimit,dFormat,to,dFormat) == 0)) {
				alert (calr_key951 +" "+ numNights + " "+calr_key952);
				eval("document." + nameForm + "." + nameInputTo).value = fieldValue;
				eval("document." + nameForm + "." + nameInputTo + ".focus()");
				return;
			}
			var temp = new Array();
			to = convertDateFormat(to);
			temp = to.split('/');
			d1 = temp[0]; m1 = temp[1]; y1 = temp[2];
			if ((y1 < now.getFullYear()) || (y1 > now.getFullYear() + 1)) {
				alert (calr_key947);
				eval("document." + nameForm + "." + nameInputTo + ".focus()");
				return;
			}
			dateTo = completeDate(to);
		} else {
			d1 = arguments[2];
			m1 = arguments[1];
			y1 = arguments[0];
			dateTo = completeDate(d1 + "/" + m1 + "/" + y1);
		}
		eval("document." + nameForm + "." + nameInputTo).value = dateTo;
        if ((from != fieldValue) && (nameSelectNights != '')) {
            /*alert('if 2');
            from = convertDateFormat(from);
            temp = from.split('/');
            d1 = eval(d1);
            alert('d1: '+d1);
            d2 = eval(temp[0]);
            alert('d2: '+d2);
            alert('Math.max(0, d1-d2): ' +Math.max(0, d1-d2));
            alert('from '+ from);
		    alert('to '+ to);
		    alert('date to '+dateTo);*/
            eval("document."+ nameForm + "." + nameSelectNights).selectedIndex = restaFechas(convertDateFormat(from), convertDateFormat(dateTo));
		}
    }

	/* Funcion que se ejecuta al modificar las noches */
	function returnNights (nombreForm, nombreInputFrom, nombreInputTo, nombreSelectNights) {	
		var from = eval("document." + nombreForm + "." + nombreInputFrom).value;
		var nights = '';
		if (typeInputNights=='combo')
		    nights = eval("document." + nombreForm + "." + nombreSelectNights + ".options").selectedIndex;
		else
            nights = eval("document." + nombreForm + "." + nombreSelectNights ).value;
		if ((from != fieldValue) && (!isNaN(eval(nights)))) {
			// fijar variable global
			from = completeDate(calculateFinalDate(from,nights));
			dateTo = convertDateFormat(from);
			// marcar campo
			eval("document."+ nombreForm + "." + nombreInputTo).value = dateTo;
		}
	}


	function restaFechas(string1, string2) {

		var date1 = new Date();
		date1 = creaFecha(string1);
		var date2 = new Date();
		date2 = creaFecha(string2);

		// The number of milliseconds in one day
		  if (date2 < date1){
		        alert(fun_key945);
		        sendIt = false;
		        return;
		   }else {
            var ONE_DAY = 1000 * 60 * 60 * 24;

            // Convert both dates to milliseconds
            var date1_ms = date1.getTime();
            var date2_ms = date2.getTime();

            // Calculate the difference in milliseconds
            var difference_ms = Math.max(0, date2_ms - date1_ms);

            // Convert back to days and return
            return Math.round(difference_ms/ONE_DAY);
        }
	}
function creaFecha(string) {
		var temp = new Array();
		temp = string.split('/');
		var date;
		date = new Date(temp[2],eval(temp[1])-1,temp[0]);
		return (date);
	}
