function ValidValue(value)
{
	return value != null && value != "" && value != "undefined";
}
function SetDefaultElems(objID)
{
	if (!objID.selectIndexOnly)
	{
		objID.defaultDay = objID.day;
		objID.defaultMonth = objID.month;
		objID.defaultYear = objID.year;
	}
}

function SetOpenerElems(objID)
{
	if (ValidValue(objID) && Number(objID.type) == 1)
	{
		window.opener.SetFormElem(objID.elemDay, objID.day);
		window.opener.SetFormElem(objID.elemMonth, Number(objID.month) + 1);
		window.opener.SetFormElem(objID.elemYear, objID.year);
		window.opener.SetFormElem(obj2ID.elemDay, obj2ID.day);
		window.opener.SetFormElem(obj2ID.elemMonth, Number(obj2ID.month) + 1);
		window.opener.SetFormElem(obj2ID.elemYear, obj2ID.year);
		window.close();
	}
}


function GetPageCoords(element)
{
     var coords = {x: 0, y: 0};
     while (element)
     {
       coords.x += element.offsetLeft;
       coords.y += element.offsetTop;
       element = element.offsetParent;
     }
     return coords;
}

function GetPageCoordsById(elementId)
{
	if (document.all)
	{
       return GetPageCoords(document.all[elementId]);
    }
    else if (document.getElementById)
    {
		return GetPageCoords(document.getElementById(elementId));
    }    
}


function ShowDiv(objID, refID)
{	
	ShowDivWithInc(objID, refID, 0, 5);
}

function ShowDivVisibility(objID)
{	
	ShowDivWithIncVisibility(objID);
}

function ShowDivVisibilityIndex(objID, index, refID)
{	
	try
	{
		objID.indexControl = index;
	}
	catch (exception)
	{
	}	
	
	document.getElementById(objID.divID).style.top = GetPageCoordsById(refID).y - 5;
	document.getElementById(objID.divID).style.left = GetPageCoordsById(refID).x - 77;
	
	ShowDivWithIncVisibility(objID);
}

function ShowDivVisibilityIndexMainDivNoDraw(objID, index, refID, mainDivID)
{	
	try
	{
		objID.indexControl = index;
	}
	catch (exception)
	{
	}	
	
	document.getElementById(objID.divID).style.top = GetPageCoordsById(refID).y - 5 - GetPageCoordsById(mainDivID).y;
	document.getElementById(objID.divID).style.left = GetPageCoordsById(refID).x - 77 - GetPageCoordsById(mainDivID).x;
	
	ShowDivWithIncVisibility(objID);
}

function ShowDivVisibilityIndexMainDiv(objID, index, refID, mainDivID)
{	
	try
	{
		objID.indexControl = index;
	}
	catch (exception)
	{}
	
	document.getElementById(objID.elem).innerHTML = DrawCalendarSingle(objID);
	
	document.getElementById(objID.divID).style.top = GetPageCoordsById(refID).y - 5 - GetPageCoordsById(mainDivID).y;
	document.getElementById(objID.divID).style.left = GetPageCoordsById(refID).x - 77 - GetPageCoordsById(mainDivID).x;
	
	ShowDivWithIncVisibility(objID);
}

function ShowDivWithInc(objID, refID, x, y)
{	
	if (ValidValue(objID.divID))
	{	
		document.getElementById(objID.divID).style.top = GetPageCoordsById(refID).y - y;
		document.getElementById(objID.divID).style.left = GetPageCoordsById(refID).x - x;
		document.getElementById(objID.divID).style.display = "block";
		document.getElementById(objID.divID).style.visibility = "visible";
		
		
		for (var i = 0; i < objID.hideableElems.length; i++)
		{
			if (ValidValue(document.getElementById(objID.hideableElems[i])))
			{				
				document.getElementById(objID.hideableElems[i]).style.visibility = "hidden";
				document.getElementById(objID.hideableElems[i]).style.display = "none";
			}
		}	
	}
	
}

function ShowDivWithIncVisibility(objID)
{	
	if (ValidValue(objID.divID))
	{	
		document.getElementById(objID.divID).style.visibility = "visible";
		document.getElementById(objID.divID).style.display = "block";
		
		for (var i = 0; i < objID.hideableElems.length; i++)
		{
			if (ValidValue(document.getElementById(objID.hideableElems[i])))
			{
				document.getElementById(objID.hideableElems[i]).style.visibility = "hidden";
				document.getElementById(objID.hideableElems[i]).style.display = "none";
			}
		}	
	}	
}

function HideDiv(objID)
{
	if (ValidValue(objID.divID))
	{		
		document.getElementById(objID.divID).style.display = "none";	
		document.getElementById(objID.divID).style.visibility = "hidden";		
		
		for (var i = 0; i < objID.hideableElems.length; i++)
			if (ValidValue(document.getElementById(objID.hideableElems[i])))
			{
				document.getElementById(objID.hideableElems[i]).style.visibility = "visible";
				document.getElementById(objID.hideableElems[i]).style.display = "block";
			}
	}
}

function OpenWindow(windowLink, windowName, windowFeatures)
{	
	window.open(String(windowLink), String(windowName), String(windowFeatures));
}

function OpenWindowOffset(windowLink, windowName, windowFeatures)
{
	var x = window.event.clientX;
	var y = window.event.clientY - 20;
	var windowFeatures = windowFeatures + "; left=" + x + "; top=" + y;
	OpenWindow(windowLink, windowName, windowFeatures);
}

function GetWindowSize(idElem, incWidth, incHeight)
{
	var width = document.getElementById(idElem).offsetWidth + Number(incWidth);
	var height = document.getElementById(idElem).offsetHeight + Number(incHeight);
	
	resizeTo(width, height);		
}



// HTML Elems Functions 
function ValidFieldValue(value)
{
	return value != null && value != "undefined" && value != "";
}

function ValidFieldValueReplace(value, newValue)
{
	return ValidFieldValue(value) ? value : newValue;
}

function SetElemNewValue(elemObj, newValue)
{
	if (ValidFieldValue(elemObj))
		elemObj.value = newValue;
}

function SetDateFieldsCalendar_single(objID)
{
	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");
	
	if (date < minDate)
	{
		SetElemNewValue(document.getElementById(objID.elemYear), date.getFullYear() + 1);
		SetElemNewValue(document.getElementById(objID.elemMonth), date.getMonth() + 1);
		
		objID.year = date.getFullYear() + 1;
		objID.month = date.getMonth();
	}	
	else
	{	
		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();
		
	}
	SetNewDate(objID, document.getElementById(objID.elemDay).value);
}

function SetRelatedFieldsValue(objID, obj2ID, index)
{	
	try
	{	
		document.getElementsByName(objID.elemMonthYear)[index].value = Number(objID.month + 1)+ " " + objID.year;
		document.getElementsByName(obj2ID.elemMonthYear)[index].value = Number(obj2ID.month + 1) + " " + obj2ID.year;
		
		try
		{
			//if (document.getElementById('hotelaria_1').style.display != 'none')
			{
				document.getElementById("MotorHotel_fldPartidaHotelDia").value = document.getElementsByName("fldPartidaDia")[index].value;
				document.getElementById("MotorHotel_fldPartidaHotelMes").value = document.getElementsByName("fldPartidaMes")[index].value;
				document.getElementById("MotorHotel_fldPartidaHotelAno").value = document.getElementsByName("fldPartidaAno")[index].value;
				document.getElementById("MotorHotel_fldPartidaHotelMesAno").value = Number(objID.month)+ " " + objID.year;			
				SetDateFieldsCalendar(calendarDepartDIV2, calendarReturnDIV2, 0);			
				GetNights();
			}
		}
		catch (exception){}
		
		try
		{
			//if (document.getElementById('hotelaria_1').style.display != 'none')
			{
				document.getElementById("MotorHotel_fldRegressoHotelDia").value = document.getElementsByName("fldRegressoDia")[index].value;
				document.getElementById("MotorHotel_fldRegressoHotelMes").value = document.getElementsByName("fldRegressoMes")[index].value;
				document.getElementById("MotorHotel_fldRegressoHotelAno").value = document.getElementsByName("fldRegressoAno")[index].value;
				document.getElementById("MotorHotel_fldRegressoHotelMesAno").value = Number(obj2ID.month)+ " " + obj2ID.year;
				SetDateFieldsCalendar(calendarDepartDIV2, calendarReturnDIV2, 1);
				GetNights();
			}
		}
		catch (exception){}		
	}
	catch (exception)
	{}
}

function SetRelatedFieldsValueSingle(objID, index)
{		
	try
	{
		document.getElementsByName(objID.elemMonthYear)[index].value = Number(objID.month + 1)+ " " + objID.year;
	}
	catch (exception)
	{}
}

function SetDateFieldsCalendarMonthYear(objID, obj2ID, control, index, valueStr)
{
	try
	{
		var date1Str = valueStr.split(" ");
		
		if (control == 0)
			SetDateFieldsCalendarValues(objID, obj2ID, control, document.getElementsByName("fldPartidaDia")[index].value, date1Str[0], date1Str[1], document.getElementsByName("fldRegressoDia")[index].value, document.getElementsByName("fldRegressoMes")[index].value, document.getElementsByName("fldRegressoAno")[index].value);			
		else
			SetDateFieldsCalendarValues(objID, obj2ID, control, document.getElementsByName("fldPartidaDia")[index].value, document.getElementsByName("fldPartidaMes")[index].value, document.getElementsByName("fldPartidaAno")[index].value, document.getElementsByName("fldRegressoDia")[index].value, date1Str[0], date1Str[1]);
	}
	catch (exception)
	{
	}
}

function SetDateFieldsCalendarMonthYearSingle(objID, index, valueStr)
{
	try
	{
		var date1Str = valueStr.split(" ");
		SetDateFieldsCalendarValuesSingle(objID, document.getElementsByName("fldPartidaDia")[index].value, date1Str[0], date1Str[1]);
	}
	catch (exception)
	{
	}
}

function SetDateFieldsCalendarMonthYearIndexed(objID, index, minIndex, maxIndex, valueStr)
{
	try
	{		
		var date1Str = valueStr.split(" ");
		SetDateFieldsCalendarValuesIndexed(objID, index, document.getElementsByName("fldPartidaDia")[index].value, date1Str[0], date1Str[1]);		
		SetDateFieldsCalendarIndexed(objID, index, minIndex, maxIndex);
	}
	catch (exception){}
}

function SetDateFieldsCalendarValuesIndexed(objID, index, day, month, year)
{
	var today = new Date();	
	var minDate = new Date(today.getFullYear(), today.getMonth(), today.getDate());
	var date = new Date(year, month - 1, day, "23", "59", "59");
	
	if (date < minDate)
	{
		minDate.setFullYear(date.getFullYear() + 1);		
		
		SetElemNewValue(document.getElementsByName(objID.elemYear)[index], minDate.getFullYear());
		SetElemNewValue(document.getElementsByName(objID.elemMonth)[index], minDate.getMonth());		
		
		objID.year = minDate.getFullYear();
		objID.month = minDate.getMonth();
		objID.day = minDate.getDate();		
	}
	else
	{	
		SetElemNewValue(document.getElementsByName(objID.elemYear)[index], date.getFullYear());
		SetElemNewValue(document.getElementsByName(objID.elemMonth)[index], date.getMonth() + 1);
		SetElemNewValue(document.getElementsByName(objID.elemDay)[index], date.getDate());		
	
		objID.year = date.getFullYear();
		objID.month = date.getMonth();
	}
	SetNewDateSingle(objID, document.getElementById(objID.elemDay).value);
}

function SetDateFieldsCalendarValuesSingle(objID, day, month, year)
{
	var today = new Date();	
	var minDate = new Date(today.getFullYear(), today.getMonth(), today.getDate());
	var date = new Date(year, month - 1, day, "23", "59", "59");
	
	if (date < minDate)
	{
		minDate.setFullYear(date.getFullYear() + 1);		
		
		SetElemNewValue(document.getElementById(objID.elemYear), minDate.getFullYear());
		SetElemNewValue(document.getElementById(objID.elemMonth), minDate.getMonth());		
		
		objID.year = minDate.getFullYear();
		objID.month = minDate.getMonth();
		objID.day = minDate.getDate();		
	}
	else
	{	
		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();
	}
	SetNewDateSingle(objID, document.getElementById(objID.elemDay).value);
}

function SetDateFieldsCalendarValues(objID, obj2ID, control, day1, month1, year1, day2, month2, year2)
{
	var today = new Date();	
	var minDate = new Date(today.getFullYear(), today.getMonth(), today.getDate());
	var date = new Date(year1, month1 - 1, day1, "23", "59", "59");
	var date2 = new Date(year2, month2 - 1, day2, "23", "59", "59");
	
	if (((control == 0) ? date : date2) < minDate)
	{
		minDate.setFullYear(date.getFullYear() + 1);		
		
		SetElemNewValue(document.getElementById(objID.elemYear), minDate.getFullYear());
		SetElemNewValue(document.getElementById(objID.elemMonth), minDate.getMonth());		
		SetElemNewValue(document.getElementById(obj2ID.elemYear), minDate.getFullYear());
		SetElemNewValue(document.getElementById(obj2ID.elemMonth), minDate.getMonth());
				
		objID.year = minDate.getFullYear();
		objID.month = minDate.getMonth();
		objID.day = minDate.getDate();
		obj2ID.year = objID.year;
		obj2ID.month = objID.month;
		obj2ID.day = objID.day;
	}
	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() : 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 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() : 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 SetDateFieldsCalendarIndexed(objID, index, minIndex, maxIndex)
{
	var today = new Date();	
	var minDate = new Date(today.getFullYear(), today.getMonth(), today.getDate());
	
	var date = new Date(document.getElementsByName(objID.elemYear)[index].value, document.getElementsByName(objID.elemMonth)[index].value - 1, document.getElementsByName(objID.elemDay)[index].value, "23", "59", "59");
	var refDate = new Date(document.getElementsByName(objID.elemYear)[minIndex].value, document.getElementsByName(objID.elemMonth)[minIndex].value - 1, document.getElementsByName(objID.elemDay)[minIndex].value, "23", "59", "59");
	
	if (refDate < minDate)
	{
		alert("1");
		for (var i = minIndex; i < maxIndex; i++)
		{
			SetElemNewValue(document.getElementsByName(objID.elemYear)[i], date.getFullYear() + 1);
			SetElemNewValue(document.getElementsByName(objID.elemMonth)[i], date.getMonth() + 1);
		}
		
		objID.year = date.getFullYear() + 1;
		objID.month = date.getMonth();		
	}
	else
	{	
		for (var i = minIndex; i < maxIndex; i++)
		{
			var currentDate = new Date(document.getElementsByName(objID.elemYear)[i].value, document.getElementsByName(objID.elemMonth)[i].value - 1, document.getElementsByName(objID.elemDay)[i].value, "23", "59", "59");
			
			if (date > currentDate)
			{
				SetElemNewValue(document.getElementsByName(objID.elemYear)[i], date.getFullYear());
				SetElemNewValue(document.getElementsByName(objID.elemMonth)[i], date.getMonth() + 1);
				SetElemNewValue(document.getElementsByName(objID.elemDay)[i], date.getDate());			
				SetElemNewValue(document.getElementsByName(objID.elemMonthYear)[i], Number(date.getMonth() + 1)+ " " + date.getFullYear());
			}
			
			if (refDate > currentDate)
			{
				SetElemNewValue(document.getElementsByName(objID.elemYear)[i], refDate.getFullYear());
				SetElemNewValue(document.getElementsByName(objID.elemMonth)[i], refDate.getMonth() + 1);
				SetElemNewValue(document.getElementsByName(objID.elemDay)[i], refDate.getDate());
				SetElemNewValue(document.getElementsByName(objID.elemMonthYear)[i], Number(refDate.getMonth() + 1)+ " " + refDate.getFullYear());
			}
		}
	
		objID.year = date.getFullYear();
		objID.month = date.getMonth();		
	}	
	
	SetElemNewValue(document.getElementsByName(objID.elemYear)[index], objID.year);
	SetElemNewValue(document.getElementsByName(objID.elemMonth)[index], date.getMonth() + 1);
	SetElemNewValue(document.getElementsByName(objID.elemDay)[index], date.getDate());	
}


function SetCalendarIndexControl(objID, indexControl)
{
	objID.indexControl = indexControl;
}