private void ConfigureRoomExtra(RoomDetailSelectorControl ucRoomDetailSelectorControl, HotelRoomAvailInfo objHotelRoomAvailInfo, HotelDescriptiveInfo objHotelDescriptiveInfo)
    {
        // Selected Room Rate
          var selectedRoomRate = (from rrs in RoomRateSelections
                              where rrs.RoomRefID == ucRoomDetailSelectorControl.RoomRefID
                              select rrs).FirstOrDefault();

          if (selectedRoomRate == null || string.IsNullOrWhiteSpace(selectedRoomRate.RatePlanCode))
         return;

          var roomRateInfo = (from item in objHotelRoomAvailInfo.RatePlans
                          where item.Code == selectedRoomRate.RatePlanCode
                          select item).FirstOrDefault();
          var packages = from package in roomRateInfo.Packages
                     where package.RoomTypeCode.Equals(string.Empty) || package.RoomTypeCode == selectedRoomRate.RoomTypeCode
                     select package;

          var roomOccupantSelection = StayCriteriaSelection.RoomOccupantSelections.FirstOrDefault(room => room.RoomRefID == ucRoomDetailSelectorControl.RoomRefID);
          var selectedExtras = from extra in AddOnPackageSelections where extra.RoomRefID == ucRoomDetailSelectorControl.RoomRefID select extra;

          List<string> packageForShowingInRemoteContent = new List<string>();

          //Render selected Extras
          if (selectedExtras.Count() > 0)
          {
         foreach (var extra in selectedExtras)
         {
            var localExtra = extra;
            var selectedPackage = packages.Where(pkg => pkg.Code == localExtra.PackageCode).FirstOrDefault();
            AddOnPackageSelectorItemControl ucAddOnPackageSelectorItemControl = (AddOnPackageSelectorItemControl)LoadControl(strAddOnPackageSelectorItemControlPath);
            ucAddOnPackageSelectorItemControl.ID = string.Format("{0}_{1}_{2}_selected"
                                                                 , "AddOnPackageSelectorItemControl"
                                                                 , ucRoomDetailSelectorControl.RoomRefID
                                                                 , RemoveSpecialCharFromString(selectedPackage.Code));
            ucAddOnPackageSelectorItemControl.IsItemRemovable = (!bIsConfirmed && Step != BookingSteps.GuestInfo);
            ucAddOnPackageSelectorItemControl.RoomRefID = ucRoomDetailSelectorControl.RoomRefID;
            ucAddOnPackageSelectorItemControl.NumberAdults = roomOccupantSelection.NumberAdults;
            ucAddOnPackageSelectorItemControl.NumberStayNights = (StayCriteriaSelection.DepartureDate - StayCriteriaSelection.ArrivalDate).Days;
            ucAddOnPackageSelectorItemControl.PackageDescription = objHotelDescriptiveInfo.Packages.FirstOrDefault(pkg => pkg.Code == selectedPackage.Code);
            ucAddOnPackageSelectorItemControl.PackageRate = packages.FirstOrDefault(pkg => pkg.Code == selectedPackage.Code);
            ucAddOnPackageSelectorItemControl.PackageQuantity = localExtra.Quantity;
            ucAddOnPackageSelectorItemControl.Selected = true;

            ucRoomDetailSelectorControl.AddSelectedRoomExtraItemControl(ucAddOnPackageSelectorItemControl);

         }
          }
          //Render available extras
          if (CurrentRoomRefID == ucRoomDetailSelectorControl.RoomRefID && ucRoomDetailSelectorControl.Step == RoomDetailSelectionStep.SelectExtra)
          {
         foreach (HotelAvailPackage package in packages)
         {
            var localPackage = package;

            if (!packageForShowingInRemoteContent.Contains(localPackage.Code))
               packageForShowingInRemoteContent.Add(localPackage.Code);

            if (selectedExtras.Count() > 0)
            {
               HotelAvailPackage cpPackage = package;
               var selectedAddOn = selectedExtras.Where(addOn => addOn.RoomRefID == CurrentRoomRefID && addOn.PackageCode == cpPackage.Code);
               if (selectedAddOn.Count() > 0)
                  continue;
            }

            AddOnPackageSelectorItemControl ucAddOnPackageSelectorItemControl = (AddOnPackageSelectorItemControl)LoadControl(strAddOnPackageSelectorItemControlPath);
            ucAddOnPackageSelectorItemControl.ID = string.Format("{0}_{1}_{2}_available"
                                                                 , "AddOnPackageSelectorItemControl"
                                                                 , ucRoomDetailSelectorControl.RoomRefID
                                                                 , RemoveSpecialCharFromString(package.Code));
            ucAddOnPackageSelectorItemControl.RoomRefID = ucRoomDetailSelectorControl.RoomRefID;
            ucAddOnPackageSelectorItemControl.NumberAdults = roomOccupantSelection.NumberAdults;
            ucAddOnPackageSelectorItemControl.NumberStayNights = (StayCriteriaSelection.DepartureDate - StayCriteriaSelection.ArrivalDate).Days;
            ucAddOnPackageSelectorItemControl.PackageDescription = objHotelDescriptiveInfo.Packages.FirstOrDefault(pkg => pkg.Code == localPackage.Code);
            ucAddOnPackageSelectorItemControl.PackageRate = packages.FirstOrDefault(pkg => pkg.Code == localPackage.Code);
            ucAddOnPackageSelectorItemControl.PackageQuantity = 0;
            ucAddOnPackageSelectorItemControl.Selected = false;

            ucRoomDetailSelectorControl.AddRoomExtraItemControl(ucAddOnPackageSelectorItemControl);
         }
          }
          if (Step == BookingSteps.SelectRoomDetail && CurrentRoomDetailStep == RoomDetailSelectionStep.SelectExtra && !bShowRoomTypePhoto)
         ucRemoteContentContainer.Src += string.Format("?show={0}", string.Join(",", packageForShowingInRemoteContent));
    }
    private void ConfigureTempTotalCostControl(RoomDetailSelectorControl ucRoomDetailSelectorControl)
    {
        if (Step.Equals(BookingSteps.SelectRoomDetail) && CurrentRoomRefID.Equals(ucRoomDetailSelectorControl.RoomRefID))
          {
         TotalCostControl totalCostControl = (TotalCostControl)LoadControl(strTotalCostControlPath);
         totalCostControl.ID = "TempTotalCostControl";
         ucRoomDetailSelectorControl.AddTempTotalCostControl(totalCostControl);
         totalCostControl.CurrencyCode = "EUR";
         totalCostControl.Mode = SelectionMode.Edit;

         decimal totalCost = 0;
         for (int i = 0; i < phRoomDetailSelectorControl.Controls.Count; i++)
         {
            totalCost += ((RoomDetailSelectorControl)phRoomDetailSelectorControl.Controls[i]).TotalCost();

         }
         totalCostControl.TotalCost = totalCost;
          }
    }
    private void ConfigureChildrenQuantityControl(RoomDetailSelectorControl ucRoomDetailSelectorControl)
    {
        SelectionMode selectionMode = ((CurrentRoomRefID == ucRoomDetailSelectorControl.RoomRefID && CurrentRoomDetailStep == RoomDetailSelectionStep.SelectChildrenQuantity) ?
                                          SelectionMode.Edit : SelectionMode.Selected);
          if (bIsConfirmed)
         selectionMode = SelectionMode.NonModifiable;

          var ucChildrenQuantitySelectorControl = (PeopleQuantitySelectorControl)LoadControl(strPeopleQuanitySelectorControlPath);
          ucChildrenQuantitySelectorControl.Mode = selectionMode;
          ucChildrenQuantitySelectorControl.DetailStep = RoomDetailSelectionStep.SelectChildrenQuantity;
          ucChildrenQuantitySelectorControl.ID = "ChildrenQuantitySelectorControl_" + ucRoomDetailSelectorControl.RoomRefID;
          ucChildrenQuantitySelectorControl.MinQuantity = 0;
          ucChildrenQuantitySelectorControl.MaxQuantity = WebconfigHelper.GetMaxChildrenByHotel(StayCriteriaSelection.HotelCode);
          ucChildrenQuantitySelectorControl.RoomRefID = ucRoomDetailSelectorControl.RoomRefID;
          ucChildrenQuantitySelectorControl.NumberOfPeople = StayCriteriaSelection.RoomOccupantSelections.FirstOrDefault(item => item.RoomRefID == ucRoomDetailSelectorControl.RoomRefID).NumberChildren;
          ucRoomDetailSelectorControl.AddChildrenQuantitySelectorContorl(ucChildrenQuantitySelectorControl);
    }
    private void ConfigureRoomRateSelectorControl(RoomDetailSelectorControl ucRoomDetailSelectorControl, HotelRoomAvailInfo objHotelRoomAvailInfo, HotelDescriptiveInfo objHotelDescriptiveInfo)
    {
        // Selected Mode
          var selectedRoomRate = (from rrs in RoomRateSelections
                              where rrs.RoomRefID == ucRoomDetailSelectorControl.RoomRefID
                              select rrs).FirstOrDefault();

          // Edit Mode
          if (Step == BookingSteps.SelectRoomDetail
              && CurrentRoomRefID == ucRoomDetailSelectorControl.RoomRefID
              && ucRoomDetailSelectorControl.Step == RoomDetailSelectionStep.SelectRoomType)
          {
         List<string> roomTypesForFilter = new List<string>();
         foreach (var roomType in objHotelRoomAvailInfo.RoomTypes)
         {
            bool bRatesAvailable = false;
            HotelAvailRoomType localRoomType = roomType;
            var roomRates = objHotelRoomAvailInfo.RoomRates.Where(item => item.RoomTypeCode == localRoomType.Code);
            if (roomRates.Count() <= 0)
               continue;

            foreach (HotelAvailRoomRate roomRate in roomRates)
            {
               var localRoomRate = roomRate;
               if (!IsRoomRateDescriptionModel || localRoomRate.DescriptionStatus == RoomRateDescriptionStatus.Active)
               {
                  bRatesAvailable = true;
                  break;
               }

               var ratePlans = objHotelRoomAvailInfo.RatePlans.Where(ratePlan => ratePlan.Code == localRoomRate.RatePlanCode &&
                       (ratePlan.Type == RatePlanType.Negotiated || ratePlan.Type == RatePlanType.Consortia));

               if (ratePlans.Count() > 0)
                  bRatesAvailable = true;
            }

            if (!bRatesAvailable)
               continue;

            HtmlGenericControl rtPanelWrapper = new HtmlGenericControl("div");
            rtPanelWrapper.Attributes.Add("class", "mm_roomrate_info mm_background_info");
            HtmlGenericControl rtPanel = new HtmlGenericControl("div");
            rtPanel.Attributes.Add("class", "mm_roomrate_content mm_text_info");
            HtmlGenericControl rtName = new HtmlGenericControl("span");
            rtName.Attributes.Add("class", "mm_text_x_strong");
            rtName.InnerText = roomType.Name;
            rtPanelWrapper.Controls.Add(rtPanel);
            rtPanel.Controls.Add(rtName);
            ucRoomDetailSelectorControl.AddRoomTypeControl(rtPanelWrapper);

            foreach (HotelAvailRoomRate roomRate in roomRates)
            {
               var localRoomRate = roomRate;
               if (IsRoomRateDescriptionModel && localRoomRate.DescriptionStatus == RoomRateDescriptionStatus.Inactive)
               {
                  HotelAvailRoomRate cpRoomRate = localRoomRate;
                  var ratePlans = from ratePlan in objHotelRoomAvailInfo.RatePlans
                                  where ratePlan.Code == cpRoomRate.RatePlanCode && ratePlan.Type != RatePlanType.Negotiated && ratePlan.Type != RatePlanType.Consortia
                                  select ratePlan;
                  if (ratePlans.Count() > 0)
                     continue;
               }

               RatePlanSelectorItemControl ucRatePlanSelectorItemControl = (RatePlanSelectorItemControl)LoadControl(strRatePlanSelectorItemControlPath);
               ucRatePlanSelectorItemControl.Mode = (CurrentRoomDetailStep == RoomDetailSelectionStep.SelectRoomType ? SelectionMode.Edit : SelectionMode.Selected);
               ucRatePlanSelectorItemControl.ID = string.Format("{0}_{1}_{2}_{3}", "RatePlanSelectorItem"
                   , ucRoomDetailSelectorControl.RoomRefID
                   , localRoomRate.RoomTypeCode
                   , RemoveSpecialCharFromString(localRoomRate.RatePlanCode));
               ucRatePlanSelectorItemControl.RoomRefID = ucRoomDetailSelectorControl.RoomRefID;
               ucRatePlanSelectorItemControl.RoomRate = localRoomRate;
               ucRatePlanSelectorItemControl.RoomTypeDescription = objHotelDescriptiveInfo.RoomTypes.FirstOrDefault(item => item.Code == localRoomType.Code);
               ucRatePlanSelectorItemControl.CreditCardCodes = objHotelDescriptiveInfo.CreditCardCodes;
               ucRatePlanSelectorItemControl.Selected = false;
               ucRatePlanSelectorItemControl.RatePlan = objHotelRoomAvailInfo.RatePlans.FirstOrDefault(item => item.Code == localRoomRate.RatePlanCode);
               ucRatePlanSelectorItemControl.IsShowPhotoLink = !(Step == BookingSteps.Confirmed || Step == BookingSteps.GuestInfo);
               ucRatePlanSelectorItemControl.RoomRateSelected += ucRoomDetailSelectorControl_RatePlanSelected;

               ucRoomDetailSelectorControl.AddRatePlanSelectorItem(ucRatePlanSelectorItemControl);

               if (!roomTypesForFilter.Contains(roomRate.RoomTypeCode) && !string.IsNullOrWhiteSpace(roomRate.RoomTypeCode))
                  roomTypesForFilter.Add(roomRate.RoomTypeCode);

            }
         }

         if (!bShowRoomTypePhoto)
            ucRemoteContentContainer.Src += string.Format("?show={0}", string.Join(",", roomTypesForFilter));
          }

          else if (selectedRoomRate != null && !string.IsNullOrWhiteSpace(selectedRoomRate.RatePlanCode))
          {
         HotelAvailRoomRate roomRate = (from item in objHotelRoomAvailInfo.RoomRates
                                        where item.RoomTypeCode == selectedRoomRate.RoomTypeCode && item.RatePlanCode == selectedRoomRate.RatePlanCode
                                        select item).FirstOrDefault();

         RatePlanSelectorItemControl ucSelectedRatePlanSelectorItemControl = (RatePlanSelectorItemControl)LoadControl(strRatePlanSelectorItemControlPath);
         ucSelectedRatePlanSelectorItemControl.Mode = (this.bIsConfirmed ? SelectionMode.NonModifiable : SelectionMode.Selected);
         ucSelectedRatePlanSelectorItemControl.ID = string.Format("{0}_{1}_{2}_{3}"
             , "SelectedRatePlanSelectorItem"
             , ucRoomDetailSelectorControl.RoomRefID
             , selectedRoomRate.RoomTypeCode
             , RemoveSpecialCharFromString(selectedRoomRate.RatePlanCode));
         ucSelectedRatePlanSelectorItemControl.RoomRefID = selectedRoomRate.RoomRefID;
         ucSelectedRatePlanSelectorItemControl.RoomRate = roomRate;
         ucSelectedRatePlanSelectorItemControl.RoomTypeDescription = objHotelDescriptiveInfo.RoomTypes.FirstOrDefault(item => item.Code == selectedRoomRate.RoomTypeCode);
         ucSelectedRatePlanSelectorItemControl.CreditCardCodes = objHotelDescriptiveInfo.CreditCardCodes;
         ucSelectedRatePlanSelectorItemControl.RatePlan = objHotelRoomAvailInfo.RatePlans.FirstOrDefault(item => item.Code == selectedRoomRate.RatePlanCode);
         ucSelectedRatePlanSelectorItemControl.IsShowPhotoLink = !(Step == BookingSteps.Confirmed || Step == BookingSteps.GuestInfo);

         ucRoomDetailSelectorControl.AddSelectedRoomRate(ucSelectedRatePlanSelectorItemControl);
          }
    }