function Calendar_initialize(parent, form, container, arvl_day, arvl_mnthyr, dprt_day, dprt_mnthyr, tr_nights, lbl_nights, arvl_wd, dprt_wd)
{
	Init_Localizations();
	
	calWin = document.getElementById(container);
	
  	addCalendar(parent + "_1", "smBuscadores.ELEGIR_FECHA", arvl_mnthyr, arvl_day, form);
  	addCalendar(parent + "_2", "smBuscadores.ELEGIR_FECHA", dprt_mnthyr, dprt_day, form);
  	setWidth(90, 15, 1);
  	
  	updateDateCombos_OnChange(form, arvl_day, arvl_mnthyr, dprt_day, dprt_mnthyr, tr_nights, lbl_nights, arvl_wd, dprt_wd);
}

function getDateFromCombos(comboDay, comboMonthYear)
{
	if(comboDay.selectedIndex == 0 && comboMonthYear.selectedIndex > 0)
		comboDay.selectedIndex = 1;

	var d = NaN;
	var day = comboDay.options[comboDay.selectedIndex].value;

	var mnthyr = comboMonthYear.options[comboMonthYear.selectedIndex].value.split("-");
	var mnth = mnthyr[0];
	var year = mnthyr[1];
	if(comboDay.selectedIndex > 0 && comboMonthYear.selectedIndex > 0)
		d = new Date(year, mnth - 1, day);

	return d;
}

function adaptahasta(form, arvl_day, arvl_mnthyr, dprt_day, dprt_mnthyr)
{
	// Obtain combos
	var comboDayIni = eval("document." + form + "." + arvl_day);
	var comboMonthYearIni = eval("document." + form + "." + arvl_mnthyr);
	var comboDayEnd = eval("document." + form + "." + dprt_day);
	var comboMonthYearEnd = eval("document." + form + "." + dprt_mnthyr);
	
	var today = new Date();
	today = new Date(today.getFullYear(), today.getMonth(), today.getDate(), 0, 0, 0);

	// Obtain values of the combos
	var dFrom = getDateFromCombos(comboDayIni, comboMonthYearIni);
	var dTo = getDateFromCombos(comboDayEnd, comboMonthYearEnd);
	
	if(!isNaN(dFrom))
	{
		if(dFrom < today) dFrom = today;
		loadDate(DateAdd(dFrom.getDate(), dFrom.getMonth(), dFrom.getFullYear(), 0, 0, 0), comboDayIni, comboMonthYearIni);
		if(isNaN(dTo) || dFrom >= dTo)
		{
			loadDate(DateAdd(dFrom.getDate(), dFrom.getMonth(), dFrom.getFullYear(), 1, 0, 0), comboDayEnd, comboMonthYearEnd);
			dTo = getDateFromCombos(comboDayEnd, comboMonthYearEnd);
		}
	}

	if(!isNaN(dTo) && dTo <= today)
	{
		loadDate(DateAdd(today.getDate(), today.getMonth(), today.getFullYear(), 1, 0, 0), comboDayEnd, comboMonthYearEnd);
		dTo = getDateFromCombos(comboDayEnd, comboMonthYearEnd);
	}

	var dFrom2 = NaN;
	if(!isNaN(dFrom)) dFrom2 = dFrom.getTime() + 63*24*60*60*1000;
	
	if(!isNaN(dTo) && dTo > today)
	{
		datePrevious = dTo;
	}
	else
		datePrevious = NaN;
}

function update_nights(tr_nights, lbl_nights, form, arvl_day, arvl_mnthyr, dprt_day, dprt_mnthyr) 
{
	// Obtain combos
	var comboDayIni = eval("document." + form + "." + arvl_day);
	var comboMonthYearIni = eval("document." + form + "." + arvl_mnthyr);
	var comboDayEnd = eval("document." + form + "." + dprt_day);
	var comboMonthYearEnd = eval("document." + form + "." + dprt_mnthyr);
	var trNights = document.getElementById(tr_nights);
	var lblNights = document.getElementById(lbl_nights);
	// Obtain values of the combos
	var arvlx_monthyear	= comboMonthYearIni.value.split("-");
	var dprtx_monthyear	= comboMonthYearEnd.value.split("-");	
	var n_nights = subtractDates(comboDayIni.value, arvlx_monthyear[0], arvlx_monthyear[1], comboDayEnd.value, dprtx_monthyear[0], dprtx_monthyear[1]);
	if(n_nights > 0)
	{
		trNights.style.display = "";		
		lblNights.innerHTML = n_nights + "&nbsp;" + set_nights_text(n_nights);
		lblNights.style.visibility = "visible";
	}
	else 
	{
		trNights.style.display = "none";
		lblNights.innerHTML = "";
		lblNights.style.visibility = "hidden";
	}
}

function fixPreviousDate(form, dprt_day, dprt_mnthyr)
{
	// Obtain combos
	var comboDayEnd = eval("document." + form + "." + dprt_day);
	var comboMonthYearEnd = eval("document." + form + "." + dprt_mnthyr);
	// Obtain the values of the combo and update the value of the datePrevious variable
	var day = comboDayEnd.options[comboDayEnd.selectedIndex].value;
	var mnthyr = comboMonthYearEnd.options[comboMonthYearEnd.selectedIndex].value.split("-");
	var mnth = mnthyr[0];
	var year = mnthyr[1];
	if ((day != "") && (mnthyr != ""))
	{
		datePrevious = new Date(year, mnth - 1, day);
	}
}

function updateDateCombos_OnFocus(form, arvl_day, arvl_mnthyr, dprt_day, dprt_mnthyr, tr_nights, lbl_nights, arvl_wd, dprt_wd)
{
  	adaptahasta(form, arvl_day, arvl_mnthyr, dprt_day, dprt_mnthyr);
	update_nights(tr_nights, lbl_nights, form, arvl_day, arvl_mnthyr, dprt_day, dprt_mnthyr);
	printLayerWeekDay(arvl_wd, form, arvl_mnthyr, arvl_day);
	correctDate2(form, arvl_day, arvl_mnthyr);
	printLayerWeekDay(dprt_wd, form, dprt_mnthyr, dprt_day);
}

function updateDateCombos_OnChange(form, arvl_day, arvl_mnthyr, dprt_day, dprt_mnthyr, tr_nights, lbl_nights, arvl_wd, dprt_wd)
{
  	adaptahasta(form, arvl_day, arvl_mnthyr, dprt_day, dprt_mnthyr);
	update_nights(tr_nights, lbl_nights, form, arvl_day, arvl_mnthyr, dprt_day, dprt_mnthyr);
	printLayerWeekDay(arvl_wd, form, arvl_mnthyr, arvl_day);
	correctDate2(form, arvl_day, arvl_mnthyr);
	printLayerWeekDay(dprt_wd, form, dprt_mnthyr, dprt_day);
}

function validateDateForm() 
{
	if (!validateCombos() || !validateDates()) 
	{
		clearFields();
	}
	submitForm();
}

function validateDateForm_NoSubmit() 
{
    combosOK = validateCombos();
    datesOK = validateDates();
    if (!(combosOK && datesOK))
        clearFields();
    if (datesOK)
		submitForm();
}       

function validateCombos() 
{
	if (document.searchForm.arvl_day.value    != "" &&
		document.searchForm.arvl_mnthyr.value != "" &&
		document.searchForm.dprt_day.value    != "" &&
		document.searchForm.dprt_mnthyr.value != "") 
	{
		return true;
	}
	else
	{
		return false;
	}
}

function validateDates() 
{
	var retVal = validateDate(today);
	if(document.all)
	{
		event.returnValue = retVal;
	}

	return retVal;
}

function clearFields() 
{
	document.searchForm.dia_en.value  = "";
	document.searchForm.mes_en.value  = "";
	document.searchForm.anyo_en.value = "";
	document.searchForm.dia_sa.value  = "";
	document.searchForm.mes_sa.value  = "";
	document.searchForm.anyo_sa.value = "";
}

function submitForm() 
{
	document.searchForm.submit();
}

function loadDateSession() 
{
	var datesLoaded = false;
	
	var day_i  = "";
	var month_i  = "";
	var year_i = "";
	if (day_i != "" && month_i != "" && year_i != "") 
	{
		var dia_f  = "";
		var mes_f  = "";
		var anio_f = "";
		if (dia_f != "" && mes_f != "" && anio_f != "") 
		{
			loadDate(DateAdd(new Number(day_i), new Number(month_i) - 1, new Number(year_i), 0, 0, 0), document.searchForm.arvl_day, document.searchForm.arvl_mnthyr);
			loadDate(DateAdd(new Number(dia_f), new Number(mes_f) - 1, new Number(anio_f), 0, 0, 0), document.searchForm.dprt_day, document.searchForm.dprt_mnthyr);
			datesLoaded = true;
		}
	}
	return datesLoaded;
}

function cargarFechasServidor() 
{
	day 	= new Number("20");
	mnth 	= new Number("3")-1;
	anio 	= new Number("2007");
	loadDate(DateAdd(day,mnth,anio,0,0,0),document.searchForm.arvl_day,document.searchForm.arvl_mnthyr);
	loadDate(DateAdd(day,mnth,anio,1,0,0),document.searchForm.dprt_day,document.searchForm.dprt_mnthyr);
}

function validateForm() 
{
    if (document.searchForm.areatwo.value == "") 
    {
		var sThirdLevel 	= '4317;4368;4750;4838';
		var arrayThird 		= sThirdLevel.split(';');
		var thirdLevel 	= false;
		for(i = 0; i < arrayThird.length && !thirdLevel; i++)
		{
			if(document.searchForm.areaone.options[document.searchForm.areaone.selectedIndex].value == arrayThird[i]) thirdLevel = true;
		}
		if (thirdLevel) 
		{
			alert('Please select the destination you would like to search');
			return;
		}
    }
    validateDateForm_NoSubmit();
}

/**
* correctDate2. 
* It corrects the style of the dates in the date combos.
* The year and the month are joind in one combo
*
* @param form_name: Name of the form
* @param day_field: Name of the day combo
* @param month_year_field: Name of the month and year combo
*/
function correctDate2(form_name, day_field, month_year_field) 
{ 	
	var comboDay 	= eval("document." + form_name + "." + day_field);
	var comboMnth 	= eval("document." + form_name + "." + month_year_field);	
	var day 		= comboDay.options[comboDay.selectedIndex].value;
	var date_comp	= comboMnth.options[comboMnth.selectedIndex].value.split("-");
	var month 		= date_comp[0] - 1;	
	var year		= date_comp[1];
	
	if ((day != "") && (month != "") && (year != "") && (month != "-1"))
	{
		// Verify the number of zero options that are at the beginning of the days combo
		var optionDayZero = 0;
		for (var i = 0; i < comboDay.length; i++)
		{
			if (comboDay.options[i].value == "")
			{
				optionDayZero++;
			}
		}
				
		// Verify the number of zero options that are at the beginning of the month combo
		var optionMnthZero = 0;
		for (var j = 0; j < comboMnth.length; j++)
		{
			if (comboMnth.options[j].value == "")
			{
				optionMnthZero++;
			}
		}
		
		// Construct date from those components
		var a_date 	= new Date(year, month, day);	
		//alert(a_date);	

		// Obtain the day and the month of the validated date
		day = a_date.getDate();
		month = a_date.getMonth() + 1;
		year = a_date.getFullYear();
		var mesanyo = month + '-' + year;
		
		// Correct the combo, adding to it the number of empty options that each combo has
		eval("document." + form_name + "." + day_field + ".selectedIndex = " + (day - 1 + optionDayZero));
		
		for (var j = 0; j < comboMnth.length; j++)
		{
			var temp = comboMnth.options[j].value.split('-');
			if((month == temp[0]) && (year == temp[1]))
			{
				eval("document." + form_name + "." + month_year_field + ".selectedIndex = " + j);	
				return;				
			}
		}
	}
}

/**
* selectData.
* Selects an option from the list
*
* @param list: Name of the list
* @param value: Value to be selected
*/
function selectData(list, value)
{
	try
	{
		for (var i = 0; i < list.length; i++)
		{
			if (list.options[i].value == value)
			{
				list.options[i].selected = true;
				break;
			}
		}
	} 
	catch(e)
	{ }
}

/**
* loadDate.
* It loads the date in a date combo. 
* The month and year are joined 
*
* @param sDate: Date loaded in format dd/mm/yyyy
* @param fiedDay: Name of the day combo
* @param fieldMonthYear: Name of the month and year combo
*/
function loadDate(sDate, fiedDay, fieldMonthYear)
{	
	loadDateSeparator(sDate, fiedDay, fieldMonthYear, "/");
}

/**
* loadDateSeparator.
* It loads the date in a date combo. 
* The month and year combo are joined and delimited by a separator 
*
* @param sDate: Date loaded in format dd/mm/yyyy
* @param fiedDay: Name of the day combo
* @param fieldMonthYear: Name of the month and year combo
* @param separator: separator of the month and year
*/
function loadDateSeparator(sDate, fieldDay, fieldMonthYear, separator)
{	
	var sDate = sDate.split(separator);	
	selectData(fieldDay, sDate[0]);
	selectData(fieldMonthYear, "" + sDate[1] + "-" + sDate[2]);	
}

/**
* subtractDates.
* it gives back the difernce between two dates
*
* @param day: Start day 
* @param mnth: Start month
* @param year: Start year
* @param day1: End day
* @param mnth1: End month
* @param year1: End year
*/
function subtractDates(day, mnth, year, day1, mnth1, year1) 
{
	var dates 		= new Date(mnth + "/" + day + "/" + year); 
	var dated 		= new Date(mnth1 + "/" + day1 + "/" + year1); 
	var timeDiff 	= dated.getTime() - dates.getTime(); 
	var nights 		= Math.round(timeDiff / (1000 * 60 * 60 * 24));
	
	return nights;
}
