﻿function ValidadeDate(aDisplayName, bDisplayName, defaultDayDiff, dtIda, shId, smiId, dtVolta, rhId, rmiId, msgPlaceHolderId)
{	
	var startHourVar = null;
	var startMinutesVar = null;
	var returnHourVar = null;
	var returnMinutesVar = null;
	
	ErrorFieldAlreadyFocused = false; 
	ErrorAlreadyShowed = false;

	var dateIda = document.getElementById(dtIda);
    if( dateIda.value == '' )
    {   
        alert("Têm que preencher a '" + aDisplayName +"'.");  
        dateIda.focus();  
        return false;
    }
	var auxDate = dateIda.value.split("/");

	var dateIn = new Date(auxDate[2], (auxDate[1]) - 1, auxDate[0]);
	var dateInStr = auxDate[0] + "/" + auxDate[1] + "/" + auxDate[2]; 

	if (!checkValidDate( aDisplayName, dateInStr, null, dtIda, null ))
		return false;

	/*if (!checkDate(aDisplayName, dateIn, K_DATE, defaultDayDiff, null, dtIda, null ))
	  return false;*/
	
	var Today = new Date();
	var oDate = new Date();
	
	oDate.setFullYear( auxDate[2], Number(auxDate[1]) - 1, auxDate[0] );			
	Today.setDate( Today.getDate() + defaultDayDiff );				
	//
	if ( auxDate[0] == "" || auxDate[1] == "" || auxDate[2] == "" || oDate < Today)
	{   
		alert("Terá que seleccionar uma data igual ou superior à de hoje mais " + defaultDayDiff + " dias.");	
		checkFocus(dtIda, null);
		return false;
	}

	/*var rdObj = document.getElementsByName("TripType");
	var rdBool = false; 	
	for (i = 0; i < rdObj.length; i++ )
	{
		if (rdObj[i].checked && rdObj[i].value != "OneWay")				
			rdBool = true;
	}*/
	
	//RentACar
	//if (ryId == "CarDropOFFDateYear")
	//	rdBool = true;
	if( dtVolta != null )
	{
	  var dateVolta = document.getElementById(dtVolta);
	  if( dateVolta.value == '' )
	  {
	    alert("Têm que preencher a '" + bDisplayName +"'."); 
	    dateVolta.focus();   
        return false;
	  }
	  auxDate = dateVolta.value.split("/");
	  var dateOut = new Date(auxDate[2], (auxDate[1]) - 1, auxDate[0]);
	  var dateOutStr = auxDate[0] + "/" + auxDate[1] + "/" + auxDate[2]; 

	  if (!checkValidDate( bDisplayName, dateOutStr, null, dtVolta, null ))
		return false;
		
	  if (!checkDate(bDisplayName, dateOut, K_DATE, defaultDayDiff - 1, null, dtVolta, null))
		return false;
  
	  if (!GetTestNights(dateOut, dateIn, aDisplayName, bDisplayName, null, dtVolta, null))			
	    return false;
	 }
	    
return true;
}

function checkDate( aDisplayName, aDate, t, defaultDayDiff, msgPlaceHolderId, idToFocus, aVar ) {
	dateNow = new Date();	
	
	var dayTime = Number(86400000);
	var dateNow = new Date();
	var diffDays = Number((aDate.valueOf() - dateNow.valueOf()) / dayTime);

	if (diffDays >= defaultDayDiff)
	  return true;
	
	var errormsg = 'O Campo \'' + aDisplayName + '\' não está válido.';
	WriteErrorMessage(msgPlaceHolderId, errormsg);
	checkFocus(idToFocus,aVar);
	
	return false;
}

function checkValidDate( aDisplayName, aDate, msgPlaceHolderId, idToFocus, aVar ) {
//alert("checkValidDate");

	var expReg = /^((0?[1-9]|[12]\d)\/(0?[1-9]|1[0-2])|30\/(0?[13-9]|1[0-2])|31\/(0?[13578]|1[02]))\/(19|20)?\d{2}$/;
	
	if( !aDate.match( expReg ) )
	{
		var errormsg = 'O Campo \'' + aDisplayName + '\' não está válido.';
		WriteErrorMessage(msgPlaceHolderId, errormsg);
		checkFocus(idToFocus,aVar);
		return false;
	}
	
	return true;
}

function GetNewDate(day, month, year)
{
	return new Date(year, month, day);
}

function GetNightsValue(dateOut, dateIn)
{
	var dayTime = 86400000;
	
	return ((dateOut.valueOf() - dateIn.valueOf()) / dayTime);
}

function GetTestNights(dateOut, dateIn, aDisplayName, bDisplayName, msgPlaceHolderId, idToFocus, aVar)
{	
	var dayTime = 86400000;
	var nights = GetNightsValue(dateOut, dateIn);
		
	if (nights >= 0)	
		return true;
	
	var errormsg = 'A ' + aDisplayName + '  é superior à  ' + bDisplayName + '.';
	WriteErrorMessage(msgPlaceHolderId, errormsg);
	checkFocus(idToFocus,aVar);
	
	return false;
}

function ShowErrorMenssage(aDisplayName, msgPlaceHolderId, idToFocus, aVar)
{
	var errormsg = 'O Campo \'' + aDisplayName + '\' não está válido.';
	WriteErrorMessage(msgPlaceHolderId, errormsg);
	checkFocus(idToFocus,aVar);
	
	return false;	
}



////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////

// HTML Elems Functions 
function ValidFieldValue(value)
{
	return value != null && value != "undefined" && value != "";
}

function SetElemNewValue(elemObj, newValue)
{
	if (ValidFieldValue(elemObj))
		elemObj.value = newValue;
}

function SetDateFieldsCalendar(objID, obj2ID, control)
{
	var today = new Date();
	
	var minDate = new Date(today.getFullYear(), today.getMonth(), today.getDate());
	var date = new Date(document.getElementById(objID.elemYear).value, document.getElementById(objID.elemMonth).value - 1, document.getElementById(objID.elemDay).value, "23", "59", "59");
	var date2 = new Date(document.getElementById(obj2ID.elemYear).value, document.getElementById(obj2ID.elemMonth).value - 1, document.getElementById(obj2ID.elemDay).value, "23", "59", "59");
	
	if (((control == 0) ? date : date2) < minDate)
	{
		SetElemNewValue(document.getElementById(objID.elemYear), date.getFullYear() + 1);
		SetElemNewValue(document.getElementById(objID.elemMonth), date.getMonth() + 1);
		SetElemNewValue(document.getElementById(obj2ID.elemYear), date.getFullYear() + 1);
		SetElemNewValue(document.getElementById(obj2ID.elemMonth), date.getMonth() + 1);
		
		objID.year = date.getFullYear() + 1;
		objID.month = date.getMonth();
		obj2ID.year = objID.year;
		obj2ID.month = objID.month;
	}
	else if (date > date2)
	{
		SetElemNewValue(document.getElementById(objID.elemDay), (control == 0) ? date.getDate() : date2.getDate());
		SetElemNewValue(document.getElementById(objID.elemMonth), (control == 0) ? date.getMonth() + 1 : date2.getMonth() + 1);
		SetElemNewValue(document.getElementById(objID.elemYear), (control == 0) ? date.getFullYear() : date2.getFullYear());
		SetElemNewValue(document.getElementById(obj2ID.elemDay), (control == 0) ? date.getDate() + 1 : date2.getDate());
		SetElemNewValue(document.getElementById(obj2ID.elemMonth), (control == 0) ? date.getMonth() + 1 : date2.getMonth() + 1);
		SetElemNewValue(document.getElementById(obj2ID.elemYear), (control == 0) ? date.getFullYear() : date2.getFullYear());
		
		objID.year = ((control == 0) ? date.getFullYear() : date2.getFullYear());
		objID.month = ((control == 0) ? date.getMonth() : date2.getMonth());
		obj2ID.year = objID.year;
		obj2ID.month = objID.month;
	}
	else
	{	
		if (control == 0)
		{
			SetElemNewValue(document.getElementById(objID.elemYear), date.getFullYear());
			SetElemNewValue(document.getElementById(objID.elemMonth), date.getMonth() + 1);
			SetElemNewValue(document.getElementById(objID.elemDay), date.getDate());		
		
			objID.year = date.getFullYear();
			objID.month = date.getMonth();
		}
		else
		{
			SetElemNewValue(document.getElementById(obj2ID.elemYear), date2.getFullYear());
			SetElemNewValue(document.getElementById(obj2ID.elemMonth), date2.getMonth() + 1)
			SetElemNewValue(document.getElementById(obj2ID.elemDay), date2.getDate());
			
			obj2ID.year = date2.getFullYear();
			obj2ID.month = date2.getMonth();
		}
	}
	
	
	SetNewDate(objID, obj2ID, document.getElementById(objID.elemDay).value);
	SetNewDate(obj2ID, objID, document.getElementById(obj2ID.elemDay).value);
}


function ChangeDaysMonth(objIDDay, Month, Year)
{
	var list = document.getElementById(objIDDay);
	var newOption;
	var selected = list.selectedIndex;
	
	list.length = 29;
	
	switch (Month.value)
	{
		case "2":
			if( ( Year.value % 400 == 0 ) || ( Year.value % 4 == 0 && Year.value % 100 != 0 ) )
			{
				newOption = document.createElement("option");
				newOption.text = "29";
				newOption.value = "29";
				list.options.add(newOption);
				if (selected < 29)
					list.selectedIndex = selected;
				else
					list.selectedIndex = 1;
			}
			break;
		case "1":
		case "3":
		case "5":
		case "7":
		case "10":
		case "12":
				newOption = document.createElement("option");
				newOption.text = "29";
				newOption.value = "29";
				list.options.add(newOption);
				newOption = document.createElement("option");
				newOption.text = "30";
				newOption.value = "30";
				list.options.add(newOption);
				newOption = document.createElement("option");
				newOption.text = "31";
				newOption.value = "31";
				list.options.add(newOption);
				list.selectedIndex = selected;
			break;
		case "4":
		case "6":
		case "9":
		case "11":
				newOption = document.createElement("option");
				newOption.text = "29";
				newOption.value = "29";
				list.options.add(newOption);
				newOption = document.createElement("option");
				newOption.text = "30";
				newOption.value = "30";
				list.options.add(newOption);
				list.selectedIndex = selected;
				if (selected < 30)
					list.selectedIndex = selected;
				else
					list.selectedIndex = 1;
			break;
	}
}

function SyncDatesPlus(StartDateDay, StartDateMonth, StartDateYear, RetDateDay, RetDateMonth, RetDateYear)
{
	var startDateDay = document.getElementById(StartDateDay);
	var startDateMonth = document.getElementById(StartDateMonth);
	var startDateYear = document.getElementById(StartDateYear);
	var retDateDay = document.getElementById(RetDateDay);
	var retDateMonth = document.getElementById(RetDateMonth);
	var retDateYear = document.getElementById(RetDateYear);

	/*
	alert(startDateDay.value);
	alert(startDateMonth.value);
	alert(startDateYear.value);
	alert(retDateDay.value);
	alert(retDateMonth.value);
	alert(retDateYear.value);
	*/
	
	startData = new Date();
	retData = new Date();
	startData.setTime(Date.parse(startDateYear.value + "/" + startDateMonth.value + "/" + startDateDay.value));
	retData.setTime(Date.parse(retDateYear.value + "/" + retDateMonth.value + "/" + retDateDay.value));
	
	if (startData > retData)
	{
		retDateDay.selectedIndex = startDateDay.selectedIndex;
		retDateMonth.selectedIndex = startDateMonth.selectedIndex;
		retDateYear.selectedIndex = startDateYear.selectedIndex;
	}
	//alert(startData);
	//alert(retData);
}

function SyncDatesLess(StartDateDay, StartDateMonth, StartDateYear, RetDateDay, RetDateMonth, RetDateYear)
{
	var startDateDay = document.getElementById(StartDateDay);
	var startDateMonth = document.getElementById(StartDateMonth);
	var startDateYear = document.getElementById(StartDateYear);
	var retDateDay = document.getElementById(RetDateDay);
	var retDateMonth = document.getElementById(RetDateMonth);
	var retDateYear = document.getElementById(RetDateYear);

	startData = new Date();
	retData = new Date();
	startData.setTime(Date.parse(startDateYear.value + "/" + startDateMonth.value + "/" + startDateDay.value));
	retData.setTime(Date.parse(retDateYear.value + "/" + retDateMonth.value + "/" + retDateDay.value));
	
	if (retData < startData)
	{
		startDateDay.selectedIndex = retDateDay.selectedIndex;
		startDateMonth.selectedIndex = retDateMonth.selectedIndex;
		startDateYear.selectedIndex = retDateYear.selectedIndex;
	}
	//alert(startData);
	//alert(retData);
}


function validateDate( objDate, calendarType, calendarObj, calendarObj2 )
{
 var bool = true;
 var data = new Date();	
 var dteValue = String(objDate.value);

	if (String(dteValue) == "") bool = true;
	else 
	{	
	    if (Number(dteValue.length)<8) bool=false;
		else 
		{	s1 = String(dteValue.indexOf("/"));
			if (s1!="-1") strarray = dteValue.split("/");
			else strarray = dteValue.split("-");	
	
			dia = Number(strarray[0]);
			mes = (Number(strarray[1])-1);
			ano = Number(strarray[2]);
			if (String(ano).length<4) ano += 2000;

			if ( isNaN(dia) || isNaN(mes) || isNaN(ano) ) bool=false;
			else 
			{	data.setFullYear(ano);
				data.setMonth(mes);
				data.setDate(dia);
				objDate.value = String(data.getDate())+"/"+String(Number(data.getMonth())+1)+"/"+String(data.getFullYear());
				
				switch( String(calendarType) )
				{
				    case "hotel":				        
				        document.getElementById("HotelStartDateDay").value = String(data.getDate());				        
				        document.getElementById("HotelStartDateMonth").value = String(Number(data.getMonth())+1);				        
				        document.getElementById("HotelStartDateYear").value = String(data.getFullYear());
				        //
				        //SetNewDate(calendarObj, dia, calendarType);
				        SetNewDate_Input(calendarObj, dia, mes, ano, 'hotel');
				        break;
				    case "airPartida":
				        document.getElementById("AirStartDateDay").value = String(data.getDate());
				        document.getElementById("AirStartDateMonth").value = String(Number(data.getMonth())+1);
				        document.getElementById("AirStartDateYear").value = String(data.getFullYear());
				        //
				        SetNewDate2_input(calendarObj, calendarObj2, dia, mes, ano, 'air');				        
				        break;
				    case "airChegada":
                        document.getElementById("AirRetStartDateDay").value = String(data.getDate());
                        document.getElementById("AirRetStartDateMonth").value = String(Number(data.getMonth())+1);
                        document.getElementById("AirRetStartDateYear").value = String(data.getFullYear());				        
				        //
				        SetNewDate2_input(calendarObj, calendarObj2, dia, mes, ano, 'air');
				        break;
				     default:
				        break;
				}
			}
		}
    }
}


