﻿var OWSCtl_currentHotelPageInfo = null;
var OWSCtl_currentPackageInfo = null;
var OWSCtl_hotelsCombos = new Array();
var OWSCtl_mustOpenConfWindowBeforeSubmit = false;

function OWSCtl_getConfData()
{
	return _oVacationConf2;
}

function OWSCtl_1(button, overrideObject, packageObj)
{
	var oConf = OWSCtl_getConfData();

	if (oConf.HCONF_CONFIRM_OWS_AVAILABILITY_IS_DISABLED != "")
	{
		if (window.confirm(oConf.HCONF_CONFIRM_OWS_AVAILABILITY_IS_DISABLED))
		{
			var sOverValue1 = (overrideObject == null || typeof (overrideObject) != 'string') ? "" : overrideObject;
			if (sOverValue1 == "" && OWSCtl_currentHotelPageInfo != null)
			{
				sOverValue1 = OWSCtl_currentHotelPageInfo.key;
			}
			if (sOverValue1 == "")
			{
				location.href = oConf.HCONF_CONFIRM_OWS_AVAILABILITY_IS_DISABLED_CMD;
			} else
			{
				location.href = oConf.HCONF_CONFIRM_OWS_AVAILABILITY_IS_DISABLED_CMD + "?SVOWSSRCHEX=" + sOverValue1;
			}
		}
		return;
	}

	if (packageObj != null)
	{
		if (typeof (packageObj) == "string")
		{
			oConf.PACKAGE = { ID: packageObj, T: "package: " + packageObj, H: {}, DG: true, DF: true, D1: null, D2: null, DM: 0 };
		} else
		{
			if (!packageObj.DG)
			{
				alert(oConf.HCONF_INPOSSIBLE_TO_CHOOSE_DATES);
				return;
			}
			oConf.PACKAGE = packageObj;
		}
	} else
	{
		oConf.PACKAGE = null;
	}

	var sOverValue = (overrideObject == null || typeof (overrideObject) != 'string') ? "" : overrideObject;
	document.getElementById(oConf.CLID + "___OVEROBJECT").value = sOverValue;

	if (OWSCtl_mustOpenConfWindowBeforeSubmit)
	{
		OWSCtl_openConfWindow(button);
	} else
	{
		if (oConf.PACKAGE != null)
		{
			document.getElementById(oConf.CLID + "___PACKAGEID").value = oConf.PACKAGE.ID;
			OWSCtl_fixMainHotelComboBox();
			if (OWSCtl_fixFilteredHotelComboBox() == 0)
			{
				OWSCtl_openConfWindow(button);
				return;
			}

			var oDateBegin = PioDateControl_Get(oConf.ctlDateBegin);
			var oDateEnd = PioDateControl_Get(oConf.ctlDateEnd);
			var dBegin = oDateBegin.getCurrentDate();
			var dEnd = oDateEnd.getCurrentDate();

			if (oConf.PACKAGE.DM > 0)
			{
				var dTmp = new Date(dEnd - dBegin);
				var iTmp = dTmp.getDate() - 1;
				if (iTmp < oConf.PACKAGE.DM)
				{
					OWSCtl_openConfWindow(button);
					return;
				}
			}

			if (!oConf.PACKAGE.DF)
			{
				if (oConf.PACKAGE.D1 == null || oConf.PACKAGE.D2 == null)
				{
					alert("No dates provided by author");
				} else
				{
					/* @@@ not needed?
					if ((dBegin - oConf.PACKAGE.D1) != 0 || (dEnd - oConf.PACKAGE.D2) != 0)
					{
						OWSCtl_openConfWindow(button);
						return;
					}*/;
				}
			} else
			{
				if ((oConf.PACKAGE.D1 != null && dBegin < oConf.PACKAGE.D1) || (oConf.PACKAGE.D2 != null && dEnd > oConf.PACKAGE.D2))
				{
					OWSCtl_openConfWindow(button);
					return;
				}
			}

			if (packageObj != null && typeof (packageObj) == "string")
			{
				oDateBegin.setCurrentDate(null);
				oDateEnd.setCurrentDate(null);
			}
		} else
		{
			document.getElementById(oConf.CLID + "___PACKAGEID").value = "";
		}
		OWSCtl_submitConfWindow(button);
	}
}

function OWSCtl_openConfWindow(button)
{
	var oConf = OWSCtl_getConfData();
	var pnlConfWindow = document.getElementById(oConf.pnlConfWindow);
	if (pnlConfWindow != null)
	{
		var oPackageObj = oConf.PACKAGE;
		if (oPackageObj == null && OWSCtl_currentPackageInfo != null)
		{
			oPackageObj = OWSCtl_currentPackageInfo;
		}
		if (oPackageObj != null && !oPackageObj.DG)
		{
			alert(oConf.HCONF_INPOSSIBLE_TO_CHOOSE_DATES);
			return;
		}

		if (oConf.PACKAGE == null && OWSCtl_currentPackageInfo != null)
		{
			oConf.PACKAGE = OWSCtl_currentPackageInfo;
		}

		if (oConf.PACKAGE != null)
		{
			document.getElementById(oConf.CLID + "___PACKAGEID").value = oConf.PACKAGE.ID;
			document.getElementById(oConf.lblPackageTitle).innerHTML = oConf.PACKAGE.T;
			document.getElementById(oConf.pnlPackageTitle).style.display = "";
		} else
		{
			document.getElementById(oConf.CLID + "___PACKAGEID").value = "";
			document.getElementById(oConf.pnlPackageTitle).style.display = "none";
		}

		//~~~ set selected hotel value
		OWSCtl_fixMainHotelComboBox();
		OWSCtl_fixFilteredHotelComboBox();

		//~~~ load custom dates repository
		OWSCtl_loadCustomDatesRepository(document.getElementById(oConf.ddlHotels).value);
		
		//~~~ re-calculate date control settings
		OWSCtl_dateControlFix();

		f_ModalBehaivor_Open();
		pnlConfWindow.style.display = "";
		OWSCtl_hdlResizeForConfWindow(null, true);
		pnlConfWindow.style.visibility = "visible";

		//~~~ set stuff selection according to hotel max guests selection settings
		OWSCtl_setStuffDisplay();

		//~~~ enable submit button if hotel and dates selection are valid and disable it otherwise
		OWSCtl_setSubmitButtonDisplay();
	}
}

function OWSCtl_closeConfWindow(button)
{
	var oConf = OWSCtl_getConfData();
	var pnlConfWindow = document.getElementById(oConf.pnlConfWindow);
	if (pnlConfWindow != null)
	{
		f_ModalBehaivor_Close();
		pnlConfWindow.style.visibility = "hidden";
		pnlConfWindow.style.display = "none";

		oConf.PACKAGE = null;
		document.getElementById(oConf.CLID + "___PACKAGEID").value = "";
		document.getElementById(oConf.CLID + "___OVEROBJECT").value = "";

		document.getElementById(oConf.pnlPackageTitle).style.display = "none";
		OWSCtl_fixMainHotelComboBox();
		//OWSCtl_fixFilteredHotelComboBox();

		OWSCtl_dateControlFix();
		var dStart = eval(document.getElementById(oConf.CLID + "___S_BEGIN").value);
		var dEnd = eval(document.getElementById(oConf.CLID + "___S_END").value);
		var oStart = PioDateControl_Get(oConf.ctlDateBegin);
		var oEnd = PioDateControl_Get(oConf.ctlDateEnd);
		oStart.setCurrentDate(dStart);
		oEnd.setCurrentDate(dEnd);

		OWSCtl_setStuffComboBoxes(document.getElementById(oConf.CLID + "___S_STUFFCONF").value);
	}
}

function OWSCtl_clearConfWindow()
{
	var oConf = OWSCtl_getConfData();

	oConf.PACKAGE = null;
	document.getElementById(oConf.CLID + "___PACKAGEID").value = "";
	document.getElementById(oConf.CLID + "___OVEROBJECT").value = "";

	document.getElementById(oConf.pnlPackageTitle).style.display = "none";
	if (OWSCtl_currentHotelPageInfo != null)
	{
		OWSCtl_selectInHotelComboBox(document.getElementById(oConf.ddlHotels), OWSCtl_currentHotelPageInfo.key);
	} else
	{
		document.getElementById(oConf.ddlHotels).selectedIndex = 0;
	}
	OWSCtl_fixFilteredHotelComboBox();

	var oStart = PioDateControl_Get(oConf.ctlDateBegin);
	var oEnd = PioDateControl_Get(oConf.ctlDateEnd);
	oStart.setCurrentDate(null);
	oEnd.setCurrentDate(null);

	OWSCtl_setStuffComboBoxes(null);
	//~~~ if selected hotel is carmel forest allow only selection of the number of adults and
	//~~~ hide other selections
	OWSCtl_setStuffDisplay();
}

function OWSCtl_submitConfWindow(button)
{
	var oConf = OWSCtl_getConfData();
	OWSCtl_fixMainHotelComboBox();
	//OWSCtl_fixFilteredHotelComboBox();
	eval(oConf.MAKESEARCHPOSTBACK);
}

function OWSCtl_resetConfWindow(button)
{
	var oConf = OWSCtl_getConfData();
	eval(oConf.MAKERESETPOSTBACK);
}

function OWSCtl_openClearConfWindow(button)
{
	OWSCtl_openConfWindow(button);
	OWSCtl_clearConfWindow();
}

function OWSCtl_loadCustomDatesRepository(selectedHotelValue)
{
	var oConf = OWSCtl_getConfData();
	if (!oConf.CUSTOM_DATES_ENABLED)
		return;
	
	selectedHotelValue = selectedHotelValue || null;
	if (selectedHotelValue == null)
		return;

	//~~~ get date picker instances
	var oDateBegin = PioDateControl_Get(oConf.ctlDateBegin);
	var oDateEnd = PioDateControl_Get(oConf.ctlDateEnd);
	
	//~~~ get new and current custom dates repositories
	var sHotelKey = OWSCtl_hotelsComboBoxValueToHotelCode(selectedHotelValue);
	var sReposKeyNew = sHotelKey == null ? null : oConf.CUSTOM_DATES_REPOSITORY_KEY_PREFIX + sHotelKey;
	var sReposKeyNewEnd = sHotelKey == null ? null : oConf.CUSTOM_DATES_REPOSITORY_KEY_PREFIX_END + sHotelKey;
	var sReposKeyCurrent = oDateBegin.getCustomDatesRepositoryKey();
	var bReposInstanceChanged = sReposKeyNew != sReposKeyCurrent;
	
	//~~~ set custom dates repositories
	oDateBegin.setCustomDatesRepositoryKey(sReposKeyNew);
	oDateEnd.setCustomDatesRepositoryKey(sReposKeyNewEnd);
	if (bReposInstanceChanged) {
		OWSCtl_dateControlEndDateSetMinAndMax(oDateBegin.getCurrentDate());
		oDateBegin.refreshForCurrentDisplayDate();
		oDateEnd.refreshForCurrentDisplayDate();
	}
}

function OWSCtl_isValidHotel()
{
	var oConf = OWSCtl_getConfData();
	var ddlHotels = document.getElementById(oConf.ddlHotels); //debugger
	return ddlHotels != null && ddlHotels.value != oConf.HCONF_INVALID_HOTEL_VALUE;
}

function OWSCtl_validateHotel()
{
	if (!OWSCtl_isValidHotel())
	{
		alert(oConf.HCONF_INVALID_HOTEL_MESSAGE);
		PioWeb.setClassName(null, $get(oConf.cmdFind), null, "button-disabled", false, false); //~~~ enable submit button
		return false;
	}
	return true;
}

function OWSCtl_setSubmitButtonDisplay()
{
	//~~~ disable submit button if dates and hotel selection is invalid and enable it otherwise
	var oConf = OWSCtl_getConfData();
	var oDateBegin = PioDateControl_Get(oConf.ctlDateBegin);
	var oDateEnd = PioDateControl_Get(oConf.ctlDateEnd);
	var dBegin = oDateBegin.getCurrentDate();
	var dEnd = oDateEnd.getCurrentDate();
	var bHotelIsValid = OWSCtl_isValidHotel();
	var bDisableSubmitButton = dBegin == null || dEnd == null || dBegin >= dEnd || !bHotelIsValid;
	PioWeb.setClassName(null, $get(oConf.cmdFind), null, "button-disabled", bDisableSubmitButton, false);
}

function OWSCtl_setStuffDisplay()
{
    //~~~ see also BookingPackage.ascx
    
	var oConf = OWSCtl_getConfData();
	var ddlHotels = document.getElementById(oConf.ddlHotels);
	var stuffconf = document.getElementById(oConf.CLID + "___S_STUFFCONF").value;
	var oMaxGuests;
	if (ddlHotels!=null)
		oMaxGuests = oConf.HCONF_MAX_GUESTS[ddlHotels.value];
	else
		oMaxGuests = {MaxAdults: 5, MaxChildren: 4, MaxBabies: 4};;
	
	if (ddlHotels == null)
		return;
		
	var tested;
	var MaxItem;
	for (var j = 0; j < 6 ; j++)
		{
		var zero=1;
		switch (j)
			{
			case 0:	
				tested = document.getElementById(oConf.ddlStuffAdults1);
				zero=0;
				MaxItem = oMaxGuests.MaxAdults;
				label = document.getElementById(oConf.lblStuffAdults1);
				break;
			case 1: 
				tested = document.getElementById(oConf.ddlStuffAdults2);
				MaxItem = oMaxGuests.MaxAdults;
				label = document.getElementById(oConf.lblStuffAdults2);
				break;
			case 2:
				tested = document.getElementById(oConf.ddlStuffChildren1);
				MaxItem = oMaxGuests.MaxChildren;
				label = document.getElementById(oConf.lblStuffChildren1);
				break;
			case 3:
				tested = document.getElementById(oConf.ddlStuffChildren2);
				MaxItem = oMaxGuests.MaxChildren;
				label = document.getElementById(oConf.lblStuffChildren2);
				break;
			case 4:
				tested = document.getElementById(oConf.ddlStuffBabies1);
				MaxItem = oMaxGuests.MaxBabies;
				label = document.getElementById(oConf.lblStuffBabies1);
				break;
			case 5:
				tested = document.getElementById(oConf.ddlStuffBabies2);
				MaxItem = oMaxGuests.MaxBabies;
				label = document.getElementById(oConf.lblStuffBabies2);
				break;
			}
		if (MaxItem == 0)
			{
			tested.style.visibility = "hidden";
			label.style.visibility = "hidden";
			}
		if (MaxItem+zero!=tested.options.length)
			{
			if (MaxItem+zero<=tested.options.length)
				{
				tested.options.length=MaxItem+zero;
				}
			else
				{
				tested.style.visibility = "";
				label.style.visibility = "";
				for (var i = tested.options.length + 1 - zero; i <= MaxItem;i++)
					{
					/*var opt = document.createElement("option");
					opt.value=i;
					opt.text=i;
					tested.add(opt,null);*/
					var opt = tested.options;
					opt[opt.length] = new Option(i,i)
					}
				}
			}
		}
	
	
    var bIsCF = /^CF|FC\{/.test(ddlHotels.value);
    var bShowNumAdultsSelectionOnly = bIsCF;
      
    var lblStuffAdults1 = document.getElementById(oConf.lblStuffAdults1);
    if (lblStuffAdults1 != null) {
        if (bIsCF) {
            lblStuffAdults1.innerHTML = lblStuffAdults1.innerHTML.replace("12", "16");
        } else {
            lblStuffAdults1.innerHTML = lblStuffAdults1.innerHTML.replace("16", "12");
        }
    }
    var lblStuffAdults2 = document.getElementById(oConf.lblStuffAdults2);
    if (lblStuffAdults2 != null) {
        if (lblStuffAdults1 != null) {
            lblStuffAdults2.innerHTML = lblStuffAdults1.innerHTML;
        } else {
            if (bIsCF) {
                lblStuffAdults2.innerHTML = lblStuffAdults2.innerHTML.replace("12", "16");
            } else {
                lblStuffAdults2.innerHTML = lblStuffAdults2.innerHTML.replace("16", "12");
            }
        }
    }    
	/*
	var lblStuffChildren1 = document.getElementById(oConf.lblStuffChildren1);
	if (lblStuffChildren1 != null) lblStuffChildren1.style.visibility = !bShowNumAdultsSelectionOnly ? "visible" : "hidden";
	var ddlStuffChildren1 = document.getElementById(oConf.ddlStuffChildren1);
	if (ddlStuffChildren1 != null)
	{
		ddlStuffChildren1.style.visibility = !bShowNumAdultsSelectionOnly ? "visible" : "hidden";
		if (bShowNumAdultsSelectionOnly) ddlStuffChildren1.selectedIndex = 0;
	}
	var lblStuffBabies1 = document.getElementById(oConf.lblStuffBabies1);
	if (lblStuffBabies1 != null) lblStuffBabies1.style.visibility = !bShowNumAdultsSelectionOnly ? "visible" : "hidden";
	var ddlStuffBabies1 = document.getElementById(oConf.ddlStuffBabies1);
	if (ddlStuffBabies1 != null)
	{
		ddlStuffBabies1.style.visibility = !bShowNumAdultsSelectionOnly ? "visible" : "hidden";
		if (bShowNumAdultsSelectionOnly) ddlStuffBabies1.selectedIndex = 0;
	}
	var lblStuffChildren2 = document.getElementById(oConf.lblStuffChildren2);
	if (lblStuffChildren2 != null) lblStuffChildren2.style.visibility = !bShowNumAdultsSelectionOnly ? "visible" : "hidden";
	var ddlStuffChildren2 = document.getElementById(oConf.ddlStuffChildren2);
	if (ddlStuffChildren2 != null)
	{
		ddlStuffChildren2.style.visibility = !bShowNumAdultsSelectionOnly ? "visible" : "hidden";
		if (bShowNumAdultsSelectionOnly) ddlStuffChildren2.selectedIndex = 0;
	}
	var lblStuffBabies2 = document.getElementById(oConf.lblStuffBabies2);
	if (lblStuffBabies2 != null) lblStuffBabies2.style.visibility = !bShowNumAdultsSelectionOnly ? "visible" : "hidden";
	var ddlStuffBabies2 = document.getElementById(oConf.ddlStuffBabies2);
	if (ddlStuffBabies2 != null)
	{
		ddlStuffBabies2.style.visibility = !bShowNumAdultsSelectionOnly ? "visible" : "hidden";
		if (bShowNumAdultsSelectionOnly) ddlStuffBabies2.selectedIndex = 0;
	}
	*/
}

function OWSCtl_hdlResizeForConfWindow(e, force)
{
	var oConf;
	try { oConf = OWSCtl_getConfData(); } catch (e) { oConf = null; }
	if (oConf == null) return;
	var pnlConfWindow = document.getElementById(oConf.pnlConfWindow);
	if (pnlConfWindow == null) return;

	if (force || pnlConfWindow.style.visibility != "hidden")
	{
		var bIsStrictDocType = PioWeb.getDocTypeInfo().importance == "STRICT";
		var iX = (document.body.clientWidth - pnlConfWindow.offsetWidth) / 2;
		var iY = (document.body.clientHeight - pnlConfWindow.offsetHeight) / 2;
		if (PioWeb.BrName == "IE" && !bIsStrictDocType)
		{
			pnlConfWindow.style.left = iX + "px";
			pnlConfWindow.style.setExpression("top", "document.getElementsByTagName('body')[0].scrollTop+" + iY + "+'px'");
		}
		else
		{
			if (bIsStrictDocType)
				{
				iY = (document.documentElement.clientHeight - pnlConfWindow.offsetHeight) / 2; //fix for viewport
				if (PioWeb.BrName == "IE")
					iY=iY+document.documentElement.scrollTop;
				}
			pnlConfWindow.style.left = iX + "px";
			pnlConfWindow.style.top = iY + "px";
		}
	}
}
PioWeb.attachEvent(window, "resize", OWSCtl_hdlResizeForConfWindow);


function OWSCtl_renderHotelComboBoxOptions(newComboBoxId)
{
	var oConf = OWSCtl_getConfData();
	var ctlHotel = document.getElementById(oConf.ddlHotels);

	if (OWSCtl_currentHotelPageInfo != null)
	{
		sOverValue = OWSCtl_currentHotelPageInfo.key;
		OWSCtl_selectInHotelComboBox(ctlHotel, sOverValue);
	}

	//document.write(ctlHotel.innerHTML);
	for (var i = 0; i < ctlHotel.options.length; i++)
	{
		document.write("<OPTION value=\"" + ctlHotel.options[i].value + "\"");
		if (i == ctlHotel.selectedIndex) document.write(" selected");
		document.write(">" + PioWeb.htmlEncode(ctlHotel.options[i].text) + "</OPTION>");
	}

	if (OWSCtl_hotelsCombos.length == 0)
	{
		OWSCtl_hotelsCombos.push(oConf.ddlHotels);
	}
	OWSCtl_hotelsCombos.push(newComboBoxId);
}

function OWSCtl_renderStuffComboBoxOptions(type, stuffCong)
{
	var iStart = 0;
	var iEnd = 4;
	
	var oMaxGuests
	var oConf = OWSCtl_getConfData();
	var ddlHotels = document.getElementById(oConf.ddlHotels);
	if (ddlHotels!=null)
		oMaxGuests = oConf.HCONF_MAX_GUESTS[ddlHotels.value];
	else
		oMaxGuests = {MaxAdults: 5, MaxChildren: 4, MaxBabies: 4};;

	switch (type)
	{
		case 0: //~~~ render number of rooms selection
		    //alert(stuffCong);
		    var oConf = OWSCtl_getConfData();
			iStart = 1;
			iEnd = (oConf.ENABLE_MULTI_ROOM != 0) ? 2 : 1;
			break;
		case 1: //~~~ render number of adults in 1st room selection
			iStart = 1;
			iEnd = oMaxGuests.MaxAdults;
			break;
		case 2:  //~~~ render number of children in 1st room selection
			iEnd = oMaxGuests.MaxChildren;
			break;
		case 3:  //~~~ render number of babies in 1st room selection
			iEnd = oMaxGuests.MaxBabies;
			break;
		case 4: //~~~ render number of adults in 2nd room selection
			iEnd = oMaxGuests.MaxAdults;
			break;
		case 5: //~~~ render number of children in 2nd room selection
			iEnd = oMaxGuests.MaxChildren;
			break;
		case 6: //~~~ render number of babies in 2nd room selection
			iEnd = oMaxGuests.MaxBabies;
			break;
	}

	var sSelected = new String(stuffCong);
	sSelected = sSelected.substr(type, 1);
	var iSelected = sSelected * 1;

	if ((type == 1 || type == 4) && iSelected == 0)
	{
		var sSelected1 = new String(stuffCong);
		if (sSelected1.substr(type + 1, 1) * 1 == 0 && sSelected1.substr(type + 2, 1) * 1 == 0)
		{
			iSelected = 2; //~~~ default stuff
		}
	}

	for (var i = iStart; i <= iEnd; i++)
	{
		document.write("<OPTION value=\"" + i + "\"" + ((iSelected == i) ? " selected" : "") + ">" + i + "</OPTION>");
	}
}

function OWSCtl_fixHotelComboBox(combo, isMainCombobox)
{
	if (combo != null && combo.value == "")
	{
		//~~~ change selection if selected option is a region rather than a specific hotel
		if (combo.selectedIndex <= combo.options.length - 2)
			combo.selectedIndex = combo.selectedIndex + 1;
		else
			combo.selectedIndex = 0;
	}
	if (combo != null)
	{
		//~~~ if selected hotel is carmel forest allow only selection of the number of adults and
		//~~~ hide other selections
		OWSCtl_setStuffDisplay();

		//~~~ enable submit button if hotel and dates selection are valid and disable it otherwise
		OWSCtl_setSubmitButtonDisplay();
	}
	if (isMainCombobox)
	{
		OWSCtl_dateControlFix_ByHotelComboBox();
	}
}

function OWSCtl_fixMainHotelComboBox()
{
	var oConf = OWSCtl_getConfData();

	var sOverValue = document.getElementById(oConf.CLID + "___OVEROBJECT").value;
	if (sOverValue != "")
	{
		OWSCtl_selectInHotelComboBox(document.getElementById(oConf.ddlHotels), sOverValue);
	} else if (OWSCtl_hotelsCombos.length > 1)
	{
		document.getElementById(oConf.ddlHotels).selectedIndex = document.getElementById(OWSCtl_hotelsCombos[1]).selectedIndex;
	} else if (OWSCtl_currentHotelPageInfo != null)
	{
		sOverValue = OWSCtl_currentHotelPageInfo.key;
		OWSCtl_selectInHotelComboBox(document.getElementById(oConf.ddlHotels), sOverValue);
	} else
	{
		document.getElementById(oConf.ddlHotels).value = document.getElementById(oConf.CLID + "___S_HOTEL").value;
	}
}

function OWSCtl_fixFilteredHotelComboBox()
{
	var iRv = -1;
	var oConf = OWSCtl_getConfData();

	var ddlHotelsFiltered = document.getElementById(oConf.ddlHotelsFiltered);
	var ddlHotels = document.getElementById(oConf.ddlHotels);

	ddlHotelsFiltered.options.length = 0;
	if (oConf.PACKAGE != null)
	{
		var ar_sHotels = oConf.PACKAGE.H;
		if (ar_sHotels != null && ar_sHotels.length > 0)
		{
			for (var i = 0; i < ar_sHotels.length; i++)
			{
				var sHotelKey = ar_sHotels[i];
				for (var j = 0; j < ddlHotels.options.length; j++)
				{
					var sOpt = ddlHotels.options[j].value;
					var sSeparatorIndex = sOpt.indexOf("{");
					if (sSeparatorIndex < 0) continue;
					var sHotelKey1 = sOpt.substr(0, sSeparatorIndex);
					if (sHotelKey == sHotelKey1)
					{
						var oHotelOption = new Option();
						oHotelOption.text = ddlHotels.options[j].text;
						oHotelOption.value = sOpt;
						ddlHotelsFiltered.options[ddlHotelsFiltered.options.length] = oHotelOption;
						if (ddlHotels.selectedIndex == j)
						{
							ddlHotelsFiltered.selectedIndex = ddlHotelsFiltered.options.length - 1;
							iRv = 1;
						}
						break;
					}
				}
			}
		}
	}

	ddlHotelsFiltered.disabled = (ddlHotelsFiltered.options.length == 1);
	ddlHotelsFiltered.style.display = (ddlHotelsFiltered.options.length > 0) ? "" : "none";
	ddlHotels.style.display = (ddlHotelsFiltered.options.length == 0) ? "" : "none";

	if (iRv == -1)
	{
		if (ddlHotelsFiltered.options.length > 0)
		{
			iRv = 0;
			for (var j = 0; j < ddlHotels.options.length; j++)
			{
				if (ddlHotels.options[j].value == ddlHotelsFiltered.options[0].value)
				{
					ddlHotels.selectedIndex = j;
					break;
				}
			}
		}
	}
	return iRv;
}

function OWSCtl_fixFilteredHotelComboBox1(filteredHotelCombo)
{
	var oConf = OWSCtl_getConfData();
	var sValue = filteredHotelCombo.options[filteredHotelCombo.selectedIndex].value;
	var ddlHotels = document.getElementById(oConf.ddlHotels);
	for (var j = 0; j < ddlHotels.options.length; j++)
	{
		if (ddlHotels.options[j].value == sValue)
		{
			ddlHotels.selectedIndex = j;
			break;
		}
	}
}

function OWSCtl_selectInHotelComboBox(hotelCombo, hotelOrRoomKey)
{
	if (hotelCombo == null || hotelOrRoomKey == null || typeof (hotelOrRoomKey) != 'string' || hotelOrRoomKey == "")
	{
		return;
	}

	var ctlHotel = hotelCombo;
	var sOverValue = hotelOrRoomKey;

	var sSeparatorIndex = sOverValue.indexOf(":");
	var sHotelKey = sOverValue;
	if (sSeparatorIndex > 0)
	{
		sHotelKey = sOverValue.substr(0, sSeparatorIndex);
	}

	for (var i = 0; i < ctlHotel.options.length; i++)
	{
		var sOpt = ctlHotel.options[i].value;
		sSeparatorIndex = sOpt.indexOf("{");
		if (sSeparatorIndex < 0) continue;
		var sHotelKey1 = sOpt.substr(0, sSeparatorIndex);
		if (sHotelKey == sHotelKey1)
		{
			ctlHotel.selectedIndex = i;
			break;
		}
	}
}

function OWSCtl_hotelsComboBoxValueToHotelCode(hotelsComboValue)
{
	if (hotelsComboValue == null || hotelsComboValue  == "")
		return null;

	var sSeparatorIndex = hotelsComboValue.indexOf("{");
	if (sSeparatorIndex < 0)
		return null;
	var sHotelKey = hotelsComboValue.substr(0, sSeparatorIndex);
	return sHotelKey;
}

function OWS_writeHotelTitleInNotActiveMode(hotelTitle, hotelUrl)
{
	if (OWSCtl_currentHotelPageInfo != null)
	{
		document.write("<A href=\"" + OWSCtl_currentHotelPageInfo.url + "\">" + OWSCtl_currentHotelPageInfo.title + "</A>");
	} else if (hotelUrl != "")
	{
		document.write("<A href=\"" + hotelUrl + "\">" + hotelTitle + "</A>");
	} else
	{
		document.write(hotelTitle);
	}
}

function OWSCtl_setStuffComboBoxes(stuffConf)
{
	if (stuffConf != null && (stuffConf.length == 4 || stuffConf.length == 7))
	{
		var oConf = OWSCtl_getConfData();

		var ddlStuffRoomsNumber = document.getElementById(oConf.ddlStuffRoomsNumber);
		var ddlStuffAdults1 = document.getElementById(oConf.ddlStuffAdults1);
		var ddlStuffChildren1 = document.getElementById(oConf.ddlStuffChildren1);
		var ddlStuffBabies1 = document.getElementById(oConf.ddlStuffBabies1);
		var ddlStuffAdults2 = document.getElementById(oConf.ddlStuffAdults2);
		var ddlStuffChildren2 = document.getElementById(oConf.ddlStuffChildren2);
		var ddlStuffBabies2 = document.getElementById(oConf.ddlStuffBabies2);
		var pnlStuffRoom2 = document.getElementById(oConf.pnlStuffRoom2);

		//~~~ show all stuff combo boxes except for adult in case they are hidden because of a previous hotel selection
		ddlStuffChildren1.style.visibility = "visible";
		ddlStuffBabies1.style.visibility = "visible";
		ddlStuffChildren2.style.visibility = "visible";
		ddlStuffBabies2.style.visibility = "visible";

		//~~~ set stuff combo boxes selected values according to configuration
		var sRoomNumber = stuffConf.substr(0, 1);
		if (sRoomNumber != "1" && sRoomNumber != "2") sRoomNumber = "1";
		ddlStuffRoomsNumber.value = sRoomNumber;
		ddlStuffAdults1.value = stuffConf.substr(1, 1);
		ddlStuffChildren1.value = stuffConf.substr(2, 1);
		ddlStuffBabies1.value = stuffConf.substr(3, 1);

		if (stuffConf.length == 7 && sRoomNumber != "1")
		{
			ddlStuffAdults2.value = stuffConf.substr(4, 1);
			ddlStuffChildren2.value = stuffConf.substr(5, 1);
			ddlStuffBabies2.value = stuffConf.substr(6, 1);
			pnlStuffRoom2.style.display = "";
		}
		else
		{
			ddlStuffAdults2.selectedIndex = 0;
			ddlStuffChildren2.selectedIndex = 0;
			ddlStuffBabies2.selectedIndex = 0;
			pnlStuffRoom2.style.display = "none";
		}
	}
	else
	{
		OWSCtl_setStuffComboBoxes("1200");
	}
}

function OWSCtl_fixStuffComboBox(combo)
{
	var oConf = OWSCtl_getConfData();

	var ddlStuffRoomsNumber = document.getElementById(oConf.ddlStuffRoomsNumber);
	var ddlStuffAdults1 = document.getElementById(oConf.ddlStuffAdults1);
	var ddlStuffChildren1 = document.getElementById(oConf.ddlStuffChildren1);
	var ddlStuffBabies1 = document.getElementById(oConf.ddlStuffBabies1);
	var ddlStuffAdults2 = document.getElementById(oConf.ddlStuffAdults2);
	var ddlStuffChildren2 = document.getElementById(oConf.ddlStuffChildren2);
	var ddlStuffBabies2 = document.getElementById(oConf.ddlStuffBabies2);
	var pnlStuffRoom2 = document.getElementById(oConf.pnlStuffRoom2);

	OWSCtl_fixStuffComboBox2(ddlStuffRoomsNumber, ddlStuffAdults1, ddlStuffChildren1, ddlStuffBabies1, ddlStuffAdults2, ddlStuffChildren2, ddlStuffBabies2, pnlStuffRoom2);
}
function OWSCtl_fixStuffComboBox1(comboGroupId)
{
	var ddlStuffRoomsNumber = document.getElementById(comboGroupId + "__ddlStuffRoomsNumber");
	var ddlStuffAdults1 = document.getElementById(comboGroupId + "__ddlStuffAdults1");
	var ddlStuffChildren1 = document.getElementById(comboGroupId + "__ddlStuffChildren1");
	var ddlStuffBabies1 = document.getElementById(comboGroupId + "__ddlStuffBabies1");
	var ddlStuffAdults2 = document.getElementById(comboGroupId + "__ddlStuffAdults2");
	var ddlStuffChildren2 = document.getElementById(comboGroupId + "__ddlStuffChildren2");
	var ddlStuffBabies2 = document.getElementById(comboGroupId + "__ddlStuffBabies2");
	var pnlStuffRoom2 = document.getElementById(comboGroupId + "__pnlStuffRoom2");

	OWSCtl_fixStuffComboBox2(ddlStuffRoomsNumber, ddlStuffAdults1, ddlStuffChildren1, ddlStuffBabies1, ddlStuffAdults2, ddlStuffChildren2, ddlStuffBabies2, pnlStuffRoom2);
}
function OWSCtl_fixStuffComboBox2(ddlStuffRoomsNumber, ddlStuffAdults1, ddlStuffChildren1, ddlStuffBabies1, ddlStuffAdults2, ddlStuffChildren2, ddlStuffBabies2, pnlStuffRoom2)
{
	var iStuffRoomsNumber = ddlStuffRoomsNumber.value * 1;
	var iStuffAdults1 = ddlStuffAdults1.value * 1;
	var iStuffChildren1 = ddlStuffChildren1.value * 1;
	var iStuffBabies1 = ddlStuffBabies1.value * 1;
	var iStuffAdults2 = ddlStuffAdults2.value * 1;
	var iStuffChildren2 = ddlStuffChildren2.value * 1;
	var iStuffBabies2 = ddlStuffBabies2.value * 1;

	if (iStuffRoomsNumber < 1 || iStuffRoomsNumber > 2)
	{
		iStuffRoomsNumber = 1;
		ddlStuffRoomsNumber.value = "1";
	}
	pnlStuffRoom2.style.display = (iStuffRoomsNumber == 2) ? "" : "none";
	if (pnlStuffRoom2.getAttribute("nextRowIsMine") == "yes")
	{
//		try
//		{
//			pnlStuffRoom2.nextSibling.style.display = pnlStuffRoom2.style.display;
//		} catch (e) { }
		for (var oStuffFieldsRow = pnlStuffRoom2.nextSibling; oStuffFieldsRow != null && oStuffFieldsRow.tagName != "TR"; oStuffFieldsRow = oStuffFieldsRow.nextSibling)
			;
		if (oStuffFieldsRow != null)
			oStuffFieldsRow.style.display = pnlStuffRoom2.style.display;
	}

	if (iStuffAdults1 < 1)
	{
		iStuffAdults1 = 1;
		ddlStuffAdults1.value = "1";
	}

	if (iStuffAdults2 == 0 && iStuffBabies2 > 0)
	{
		iStuffBabies2 = 0;
		ddlStuffBabies2.value = "0";
	}
}

function OWSCtl_setDatesRange(startDate, endDate)
{
	if (startDate == null || endDate == null || startDate >= endDate) return;
	var oConf = OWSCtl_getConfData();

	var oStart = PioDateControl_Get(oConf.ctlDateBegin);
	var oEnd = PioDateControl_Get(oConf.ctlDateEnd);

	oStart.setCurrentDate(startDate);
	oEnd.setCurrentDate(endDate);
}

function OWSCtl_dateControlFix()
{
	var oConf = OWSCtl_getConfData();
	var oDateBegin = PioDateControl_Get(oConf.ctlDateBegin);
	var oDateEnd = PioDateControl_Get(oConf.ctlDateEnd);

	if (oConf.PACKAGE != null && oConf.PACKAGE.DG)
	{
		if (!oConf.PACKAGE.DG)
		{
			// ???             
		} else if (!oConf.PACKAGE.DF)
		{
			if (oConf.PACKAGE.D1 != null && oConf.PACKAGE.D2 != null)
			{
				oDateBegin.setMinDate(oConf.PACKAGE.D1);
				oDateBegin.setMaxDate(oConf.PACKAGE.D1);
				oDateBegin.setCurrentDate(oConf.PACKAGE.D1);

				oDateEnd.setMinDate(oConf.PACKAGE.D2);
				oDateEnd.setMaxDate(oConf.PACKAGE.D2);
				oDateEnd.setCurrentDate(oConf.PACKAGE.D2);

				return;
			}
		} else
		{
			if (oConf.PACKAGE.D1 != null && oConf.PACKAGE.D2 != null)
			{
				oDateBegin.setMinDate(oConf.PACKAGE.D1);
				oDateBegin.setMaxDate(new Date(oConf.PACKAGE.D2.getFullYear(), oConf.PACKAGE.D2.getMonth(), oConf.PACKAGE.D2.getDate() - oConf.PACKAGE.DM));
				OWSCtl_dateControlEndDateSetMinAndMax(oDateBegin.getCurrentDate());
				oDateBegin.refresh();
				oDateEnd.refresh();
				OWSCtl_prevNextMonth(null, oConf.ctlDateBegin, 0, true);
				var dDisplayBegin = oDateBegin.getDisplayDate();
				var dDisplayEnd = oDateEnd.getDisplayDate();
				if (dDisplayBegin > dDisplayEnd)
					OWSCtl_prevNextMonth(null, oConf.ctlDateEnd, 1, false);
				else
					OWSCtl_prevNextMonth(null, oConf.ctlDateEnd, 0, true);
				return;
			} //else if(oConf.PACKAGE.DM > 0){               
			//}
		}
	}

	oDateBegin.setMinDate(PioDateMonthView_today);
	oDateBegin.setMaxDate(null);
	OWSCtl_dateControlEndDateSetMinAndMax(oDateBegin.getCurrentDate());
	
	oDateBegin.refresh();
	oDateEnd.refresh();
	OWSCtl_prevNextMonth(null, oConf.ctlDateBegin, 0, true);
	OWSCtl_prevNextMonth(null, oConf.ctlDateEnd, 0, true);
	return;
}

function OWSCtl_dateControlFix_ByHotelComboBox()
{
	var oConf = OWSCtl_getConfData();
	var oDateBegin = PioDateControl_Get(oConf.ctlDateBegin);
	var oDateEnd = PioDateControl_Get(oConf.ctlDateEnd);
	
	oDateBegin.setMinDate(PioDateMonthView_today);
	oDateBegin.setMaxDate(null);
	OWSCtl_dateControlEndDateSetMinAndMax(oDateBegin.getCurrentDate());
//	//~~~ beresheet starts from april 2011
//	//~~~ TODO remove this after april
//	if (new Date() < new Date(2011,3,1))
//	{
//		var ddlHotels = document.getElementById(oConf.ddlHotels);
//		var sCurrentHotelValue = ddlHotels.value;
//		if (/^BR\{/.test(sCurrentHotelValue))
//		{
//			oDateBegin.setMinDate(new Date(2011, 3, 1));
//			oDateEnd.setMinDate(new Date(2011, 3, 2));;
//		}
//	}

	oDateBegin.refresh();
	oDateEnd.refresh();
	OWSCtl_prevNextMonth(null, oConf.ctlDateBegin, 0, true);
	OWSCtl_prevNextMonth(null, oConf.ctlDateEnd, 0, true);
}

function OWSCtl_dateControlEndDateSetMinAndMax(date)
{
	var oConf = OWSCtl_getConfData();
	var oDateBegin = PioDateControl_Get(oConf.ctlDateBegin);
	var oDateEnd = PioDateControl_Get(oConf.ctlDateEnd);

	var iMinDays = 1;
	var iMaxDays = 14;

	//~~~ compute min and max date by package and hotel	
	if (oConf.PACKAGE != null && oConf.PACKAGE.DM > 0)
	{
		if (date != null)
			iMinDays = oConf.PACKAGE.DM;
	}
	else
	{
		var ddlHotels = document.getElementById(oConf.ddlHotels);
		var sCurrentHotelValue = ddlHotels.value;
		//if (sCurrentHotelValue.indexOf("DS{") == 0 || sCurrentHotelValue.indexOf("TT{") == 0 || sCurrentHotelValue.indexOf("CF{") == 0 || sCurrentHotelValue.indexOf("FC{") == 0){
		if (/^DS|TT|CF|FC\{/.test(sCurrentHotelValue))
		{
			iMaxDays = 30;
		}
	}
	
	//~~~ compute min and max date by custom dates
	if (oConf.CUSTOM_DATES_ENABLED)
	{//debugger;
		var dSelectedArrivalDate = oDateBegin.getCurrentDate();
		if (dSelectedArrivalDate != null)
		{			
			var oCustomDatesRepos = oDateBegin.getCustomDatesRepositoryInstance();
			if (oCustomDatesRepos != null)
			{
				var dDateFrom = new Date(dSelectedArrivalDate);
				var dDateTo = new Date(dSelectedArrivalDate); dDateTo.setDate(dDateTo.getDate() + iMaxDays);
				var hdlGetCustomDatesAsync = function(obj){};
				var oCustomDates = oCustomDatesRepos.getCustomDates(dDateFrom, dDateTo, hdlGetCustomDatesAsync);
				if (oCustomDates != null && oCustomDates.FullyLoaded && oCustomDates.Data != null)
				{
					oCustomDates = oCustomDates.Data;
					var oCustomDate = oCustomDates[dSelectedArrivalDate];
					if (oCustomDate != null && !oCustomDate.Selectable)
					{
						date = null;
						oDateBegin.setCurrentDate(null);
					}
					
					var dDate = new Date(dSelectedArrivalDate);
					var iFirstDate = dSelectedArrivalDate.getDate();
					var dSelectedDepartureDate = oDateEnd.getCurrentDate();
					for (var i = 1; i <= iMaxDays; i++)
					{
						dDate.setDate(iFirstDate + i); //~~~ will also increament month / year if iFirstDate + i is greater than number of days in current month
						var oCustomDate = oCustomDates[dDate];
						if (oCustomDate != null && !oCustomDate.Selectable)
						{
							if (dSelectedDepartureDate != null && dSelectedDepartureDate > dDate) //~~~ departure date can be set to first non selectable date
							{
								//date = null;
								date = dSelectedArrivalDate;
							}
							break;
						}
					}
					iMaxDays = i;
				} //~~~ if(oCustomDates != null && oCustomDates.FullyLoaded && oCustomDates.Data != null)
			} //~~~ if (oCustomDatesRepos != null)
		} //~~~ if (dSelectedArrivalDate != null)
	} //~~~ if (oConf.CUSTOM_DATES_ENABLED)
	
	if (date == null)
	{
		oDateEnd.setCurrentDate(null);
	}

	var dMin1 = (date == null) ? PioDateMonthView_today : date;
	var dMin = new Date(dMin1.getFullYear(), dMin1.getMonth(), dMin1.getDate() + iMinDays);
	var dMax = (date == null) ? null : new Date(dMin1.getFullYear(), dMin1.getMonth(), dMin1.getDate() + iMaxDays);

	//if(oConf.PACKAGE != null && oConf.PACKAGE.DF && oConf.PACKAGE.D2 != null && (dMax == null || oConf.PACKAGE.D2 < dMax)){
	if (oConf.PACKAGE != null && oConf.PACKAGE.D2 != null && (dMax == null || oConf.PACKAGE.D2 < dMax))
	{
		dMax = oConf.PACKAGE.D2;
	}

	if (dMax != null && dMax < dMin) dMax = dMin;
	//alert(iMinDays + "\n" + iMaxDays + "\n" + dMin + "\n" + dMax); 

	oDateEnd.setMinDate(dMin);
	oDateEnd.setMaxDate(dMax);
}

function OWSCtl_dateControlChangeHandler(dateControl)
{
	var oConf = OWSCtl_getConfData();
	var oDate = PioDateControl_Get(dateControl);
	var oDateBegin = PioDateControl_Get(oConf.ctlDateBegin);
	var oDateEnd = PioDateControl_Get(oConf.ctlDateEnd);

	var bIsBegin = false;
	var sClientId = oConf.ctlDateEnd;
	if (oDate == oDateBegin)
	{
		bIsBegin = true;
		sClientId = oConf.ctlDateBegin;
	}
	else
	{
		if (oDateEnd.clickDayOnMonthViewHandler == null)
		{
			oDateEnd.clickDayOnMonthViewHandler = function(dateControl)
			{
				if (oDateBegin.getCurrentDate() == null)
				{
					alert(oConf.HCONF_CHOOSE_DATE_START_ALERT);
				}
			};
		}
	}

	var dBegin = oDateBegin.getCurrentDate();

	var dDisplayEndSaved = null;
	//if (bIsBegin){
	if (dBegin != null && oDateEnd.getCurrentDate() == null)
	{
		dDisplayEndSaved = oDateEnd.getDisplayDate();
	}
	//}

	OWSCtl_dateControlEndDateSetMinAndMax(dBegin);

	//if (bIsBegin){
	oDateEnd.refresh();
	if (dDisplayEndSaved != null)
	{
		//alert(dDisplayEndSaved);
		if (!oDateEnd.setDisplayDate(dDisplayEndSaved))
		{
			oDateEnd.setDisplayDate(new Date(dDisplayEndSaved.getFullYear(), dDisplayEndSaved.getMonth(), 32));
		}
		//alert(dDisplayEndSaved + "\n" + oDateEnd.getDisplayDate());
	}
	OWSCtl_prevNextMonth(null, oConf.ctlDateEnd, 0, true);
	//}else{
	oDateBegin.refresh();
	OWSCtl_prevNextMonth(null, oConf.ctlDateBegin, 0, true);
	//}

	var dEnd = oDateEnd.getCurrentDate();
	var dCurrent = (bIsBegin) ? dBegin : dEnd;

	var lblCurrentDate = document.getElementById(sClientId + "__currentDate");
	if (dCurrent == null)
	{
		lblCurrentDate.innerHTML = (bIsBegin) ? oConf.HCONF_CHOOSE_DATE_START_ALERT_NOT_SELECTED : oConf.HCONF_CHOOSE_DATE_END_ALERT_NOT_SELECTED;
	}
	else
	{
		var iDay = dCurrent.getDate();
		var iMonth = dCurrent.getMonth() + 1;
		lblCurrentDate.innerHTML = PioDateMonthView_dayNames[dCurrent.getDay()] + " " + ((iDay < 10) ? "0" : "") + iDay + "/" + ((iMonth < 10) ? "0" : "") + iMonth + "/" + (dCurrent.getFullYear() + "").substr(2, 2);
	}

	var pnlDuration = document.getElementById(oConf.pnlDuration);
	if (dBegin != null && dEnd != null && dBegin < dEnd)
	{
		var dTmp = new Date(dEnd - dBegin);
		var iDuration = dTmp.getDate() - 1;
		pnlDuration.innerHTML = PioWeb.stringFormat(((iDuration == 1) ? oConf.HCONF_DATE_DURATION_ONE : oConf.HCONF_DATE_DURATION_FORMAT), iDuration);
	}
	else
	{
		pnlDuration.innerHTML = oConf.HCONF_CHOOSE_DATE_DURATION_ALERT_NOT_SELECTED;
	}

	//~~~ disable submit button if dates and hotel selection is invalid and enable it otherwise
	var bDisableSubmitButton = dBegin == null || dEnd == null || dBegin >= dEnd || !OWSCtl_isValidHotel();
	PioWeb.setClassName(null, $get(oConf.cmdFind), null, "button-disabled", bDisableSubmitButton, false);
}

function OWSCtl_prevNextMonth(button, clientId, dir, recurs)
{
	var oDate = PioDateControl_Get(clientId);

	var iDir = 0;
	if (dir != null)
	{
		if (dir < 0) iDir = -1; else if (dir > 0) iDir = 1;
	}
	if (iDir != 0) if (!oDate.nextPrevMonthView(iDir)) return;

	var dDisplay = oDate.getDisplayDate();
	if (dDisplay == null) return;

	if (button == null)
	{
		button = document.getElementById(clientId + ((iDir < 0) ? "__prevMonthButton" : "__nextMonthButton"));
	}

	if (button != null)
	{
		var ctlMonthLabel = (iDir < 0) ? button.nextSibling : button.previousSibling;
		if (ctlMonthLabel != null)
		{
			ctlMonthLabel.innerHTML = PioDateMonthView_monthNames[dDisplay.getMonth()] + " " + dDisplay.getFullYear();
		}
	}

	//return;

	if (!recurs)
	{
		var oConf = OWSCtl_getConfData();
		var oDateBegin;
		var oDateEnd;
		if (clientId == oConf.ctlDateBegin)
		{
			oDateBegin = oDate;
			oDateEnd = PioDateControl_Get(oConf.ctlDateEnd);
			var dDisplayBegin = dDisplay;
			var dDisplayEnd = oDateEnd.getDisplayDate();

			switch (iDir)
			{
				case 0:
					break;
				case 1:
					//alert(dDisplayBegin + "\n" + dDisplayEnd + "\n" + (dDisplayEnd < dDisplayBegin));
					if (dDisplayEnd < dDisplayBegin)
					{
						var bAtLeastOne = false;
						while (true)
						{
							//oDateEnd.nextPrevMonthViewIsEnabled(iDir)
							//oDateEnd.setDisplayDate(dDisplayBegin);
							if (!oDateEnd.nextPrevMonthView(iDir))
							{
								break;
							}
							bAtLeastOne = true;
							dDisplayEnd = oDateEnd.getDisplayDate();
							if (!(dDisplayEnd > dDisplayBegin))
							{
								break;
							}
						}
						if (bAtLeastOne)
						{
							OWSCtl_prevNextMonth(null, oConf.ctlDateEnd, 0, true);
						}
					}
					break;
				case -1:
					var iDiff = dDisplayEnd - dDisplayBegin;
					//alert(iDiff + "\n" + dDisplayBegin + "\n" + dDisplayEnd);
					if (iDiff > 2678400000)
					{ //~~~ more then 1 month
						var bAtLeastOne = false;
						while (true)
						{
							if (!oDateEnd.nextPrevMonthView(iDir))
							{
								break;
							}
							bAtLeastOne = true;
							dDisplayEnd = oDateEnd.getDisplayDate();
							iDiff = dDisplayEnd - dDisplayBegin;
							if (!(iDiff > 2678400000))
							{
								break;
							}
						}
					}
					if (bAtLeastOne)
					{
						OWSCtl_prevNextMonth(null, oConf.ctlDateEnd, 0, true);
					}
					break;
			}
		} else
		{
			oDateBegin = PioDateControl_Get(oConf.ctlDateBegin);
			oDateEnd = oDate;
			var dDisplayBegin = oDateBegin.getDisplayDate();
			var dDisplayEnd = dDisplay;

			switch (iDir)
			{
				case 0:
					break;
				case 1:
					var iDiff = dDisplayEnd - dDisplayBegin;
					//alert(iDiff + "\n" + dDisplayBegin + "\n" + dDisplayEnd);
					if (iDiff > 2678400000)
					{ //~~~ more then 1 month
						var bAtLeastOne = false;
						while (true)
						{
							if (!oDateBegin.nextPrevMonthView(iDir))
							{
								break;
							}
							bAtLeastOne = true;
							dDisplayBegin = oDateBegin.getDisplayDate();
							iDiff = dDisplayEnd - dDisplayBegin;
							if (!(iDiff > 2678400000))
							{
								break;
							}
						}
					}
					if (bAtLeastOne)
					{
						OWSCtl_prevNextMonth(null, oConf.ctlDateBegin, 0, true);
					}
					break;
				case -1:
					//alert(dDisplayBegin + "\n" + dDisplayEnd + "\n" + (dDisplayEnd < dDisplayBegin));
					if (dDisplayEnd < dDisplayBegin)
					{
						var bAtLeastOne = false;
						while (true)
						{
							if (!oDateBegin.nextPrevMonthView(iDir))
							{
								break;
							}
							bAtLeastOne = true;
							dDisplayBegin = oDateBegin.getDisplayDate();
							if (!(dDisplayEnd > dDisplayBegin))
							{
								break;
							}
						}
						if (bAtLeastOne)
						{
							OWSCtl_prevNextMonth(null, oConf.ctlDateBegin, 0, true);
						}
					}
					break;
			}
		}
	}
}

//function OWSCtl_ModifyCustomDatesRepositoryForDepartureDateControl(customDates, dateFrom, dateTo, fullyLoaded)
function OWSCtl_MCDRFDDC(repository, customDates, dateFrom, dateTo, fullyLoaded)
{
	if (dateFrom == null || dateTo == null || dateFrom > dateTo) return null;
	if (customDates == null) return null;
	
	//~~~ search all fully-booked ranges, and mark as selecatable fisrst custom date in each range (disable custom date)

	var bFirstDateMustBeRegistred = false;
	//~~~ to calclulate bSkipCheckFirstDateInTheRange we need to make:
	//~~~ 1. calculate if first date in range is fullybooked
	//~~~ 2. get previous custom date relative to dateFrom from the repository	
	//~~~	 we will get it from base repository to avaoid recursive calls
	//~~~	 we will get only chashed results to avoid additional server calls, bu this may get an incorrect result
	if (OWSCtl_MCDRFDDC_CustomDateIsFullyBooked(customDates[dateFrom])) 
	{
		var oBaseRepository = repository.getBaseRepository();
		var dFromToBaseRepository = new Date(dateFrom); dFromToBaseRepository.setDate(dFromToBaseRepository.getDate() - 1);
		var oHzFromBaseRepository = oBaseRepository.getCustomDates(dFromToBaseRepository, dFromToBaseRepository, function() { });
		if (oHzFromBaseRepository != null && oHzFromBaseRepository.Data != null) 
		{
			if (OWSCtl_MCDRFDDC_CustomDateIsFullyBooked(oHzFromBaseRepository.Data[dFromToBaseRepository])) 
			{
				//~~~ previuous custom date is fully booked so we do not needs to enable first date in the input range
				bFirstDateMustBeRegistred = true;				
			}
		}
	}

	var oRv = {};
	var bHave = false;
	
	var dDate = new Date(dateFrom);
	while (dDate <= dateTo)
	{
		var oCustomDate = customDates[dDate];
		if (oCustomDate != null)
		{
			if (OWSCtl_MCDRFDDC_CustomDateIsFullyBooked(oCustomDate))
			{				
				var bEndOfFullyBookedRangeWasFound = false;
				//~~~ calculate bEndOfFullyBookedRangeWasFound
				var dDate1 = new Date(dDate); dDate1.setDate(dDate1.getDate() + 1);
				while (dDate1 <= dateTo)
				{
					var oCustomDate1 = customDates[dDate1];
					if (oCustomDate1 != null)
					{
						//~~~ always register next date
						oRv[dDate1] = oCustomDate1;
						bHave = true;
					}
					if (OWSCtl_MCDRFDDC_CustomDateIsFullyBooked(oCustomDate1))
					{
						//~~~ next date (dDate1) is fully-booked, so we will continue to search last fully-booked date
					}
					else
					{
						//~~~ if current date is not fully booked then end of range is found
						bEndOfFullyBookedRangeWasFound = true;
						//~~~ skip registration of dDate
						if (bFirstDateMustBeRegistred) 
						{
							oRv[dDate] = oCustomDate;
							bFirstDateMustBeRegistred = false;
						}
						//~~~ modify dDate to go to the next external loop
						dDate = new Date(dDate1);
						break;
					}

					dDate1.setDate(dDate1.getDate() + 1);
				} //~~~ while (dDate1 <= dateTo) {

				if (!bEndOfFullyBookedRangeWasFound) 
				{
					//~~~ all dates in input range was processed	
					//~~~ skip registration of dDate
					if (bFirstDateMustBeRegistred) 
					{
						oRv[dDate] = oCustomDate;
						bFirstDateMustBeRegistred = false;
					}
					//~~~ all dates in input range was processed so exit loop
					break;
				}
			}
			else //~~~ else of if (OWSCtl_MCDRFDDC_CustomDateIsFullyBooked(oCustomDate))
			{
				oRv[dDate] = oCustomDate;
				bHave = true;
			}
		} //~~~ if (oCustomDate != null) {
		dDate.setDate(dDate.getDate() + 1);
	} //~~~ while (dDate <= dateTo) {

	if (bHave)
		return oRv;
	return null;
}
function OWSCtl_MCDRFDDC_CustomDateIsFullyBooked(customDate) {
	return (customDate != null && customDate.CssClass != null && customDate.CssClass.indexOf("fully-booked") >= 0);
}

//************************************************
function f_CityStreetAutoComplete_Shown(sender, args)
{
	if (PioWeb.BrName == "IE")
	{
		PioWeb.setChildCoordinates(sender._element, sender._completionListElement, "align", "align", "bottom", "top", 0, 0);
	}
}

function f_CityStreetAutoComplete_ItemSelected(sender, args)
{
	sender._element.value = args._value;
}

function f_CityStreetAutoComplete_Populating(sender, args)
{
	var sContextId = sender._element.id.replace("fldStreet", "fldCity");
	var ctlContext = $get(sContextId);
	var sContext = ctlContext.value;
	sender._contextKey = sContext;
}

//************************************************

var OWSCtl_PackageItemsIncludedInPriceClick_state = null;
function OWSCtl_PackageItemsIncludedInPriceClick(radiobox)
{
	if (radiobox == null || radiobox.type != "checkbox") return true;

	var iOWSCnt = radiobox.parentNode.getAttribute("owscnt");
	var colCheckboxes = radiobox.form.elements[radiobox.name];

	var iOWSCntCur = 0;
	for (var i = 0; i < colCheckboxes.length; i++)
	{
		if (colCheckboxes[i].checked) iOWSCntCur++;
	}

	if (iOWSCntCur == iOWSCnt) return true;

	if (iOWSCntCur < iOWSCnt)
	{
		return false;
	} else if (iOWSCntCur > iOWSCnt)
	{
		if (radiobox.checked)
		{
			for (var i = 0; i < colCheckboxes.length; i++)
			{
				var oCheckbox = colCheckboxes[i];
				if (radiobox != oCheckbox && oCheckbox.checked && oCheckbox.id != OWSCtl_PackageItemsIncludedInPriceClick_state)
				{
					oCheckbox.checked = false;
					break;
				}
			}
			OWSCtl_PackageItemsIncludedInPriceClick_state = radiobox.id;
			return true;
		}
	}

	alert("not implemented");
	return false;
}

//************************************************

function OWSCtl_searchResults_PageLoaded(sender, args)
{
	var ctlGetMoreStatus = document.getElementById(__OWSCtl_searchResults_PageLoaded__);
	if (ctlGetMoreStatus != null)
	{
		window.setTimeout("OWSCtl_searchResults_PageLoaded1();", 1500);
	}
}

function OWSCtl_searchResults_PageLoaded1()
{
	var ctlGetMoreStatus = document.getElementById(__OWSCtl_searchResults_PageLoaded__);
	if (ctlGetMoreStatus != null && ctlGetMoreStatus.value == "")
	{
		//alert("get more results");
		ctlGetMoreStatus.value += "g";
		eval(__OWSCtl_searchResults_PageLoaded1__);
	}
}

function OWSCtl_stayHistrory_PageLoaded(sender, args)
{
	var elTag = document.getElementById("coreTemplate_OWSControls_UserStayHistrory____id");
	if (elTag != null)
	{
		//alert(elTag.value);
		window.setTimeout(elTag.value, 1500);
	}
}

