var roomsSelected = []; 

function InitHotelRooms(i_HId, i_RCount, i_BPFactor) {
  if (roomsSelected[i_HId] !== undefined) {
    return;
  }
  roomsSelected[i_HId] = {factor: i_BPFactor, rooms: [] };
}

function SetRoomData(i_HId, i_RId, i_RPrice, i_Gid, i_RDPrices) {
  if (roomsSelected[i_HId] === undefined || roomsSelected[i_HId].rooms[i_RId] !== undefined) {
    return;
  }
  roomsSelected[i_HId].rooms[i_RId] = { selected: false, price: i_RPrice, group: i_Gid, rdPrices: i_RDPrices };
}

function UpdateRoomSelection(i_HId, i_GId) {
  var roomIndex = jQuery("#_room_selection_" + i_HId + "_" + i_GId).val();
  SetRoomSelection(i_HId, roomIndex, i_GId, true);
}

function SetRoomSelection(i_HId, i_RId, i_GId, i_UpdateUI) {
  if (roomsSelected[i_HId]) {
    // unselect previously selected
    for (var id in roomsSelected[i_HId].rooms) {
      if (roomsSelected[i_HId].rooms[id].group == i_GId) {
        roomsSelected[i_HId].rooms[id].selected = false;
      }
    }
    // select new one
    if (roomsSelected[i_HId].rooms[i_RId]) {
      roomsSelected[i_HId].rooms[i_RId].selected = !roomsSelected[i_HId].rooms[i_RId].selected;
      if (i_UpdateUI) {
        _UpdateRoomPriceAndCalendar(i_HId, i_RId, i_GId);
        _UpdateHotelPrice(i_HId);
      }
    }
  }
}

function _UpdateHotelPrice(i_HId) {
  var grandTotal = 0;
  var bpFactor = 0;
  if (roomsSelected[i_HId]) {
    bpFactor = roomsSelected[i_HId].factor;
    for (var i in roomsSelected[i_HId].rooms) {
      if (roomsSelected[i_HId].rooms[i].selected) {
        grandTotal += roomsSelected[i_HId].rooms[i].price;
      }
    }
  }

  var bonusPoints = (grandTotal * bpFactor) / 100;
  bonusPoints = Math.round(bonusPoints * Math.pow(10, 2)) / Math.pow(10, 2);

  jQuery("#h" + i_HId + "_bonus_points_value").text(bonusPoints);
  jQuery("#h" + i_HId + "_grand_total_value").text(grandTotal);
}

function _UpdateRoomPriceAndCalendar(i_HId, i_RId, i_GId) {
  if (roomsSelected[i_HId] && roomsSelected[i_HId].rooms[i_RId] && roomsSelected[i_HId].rooms[i_RId].selected) {
    // update total
    jQuery("#room_total_value_" + i_HId + "_" + i_GId).text(roomsSelected[i_HId].rooms[i_RId].price)
    // update room prices
    var roomDayPrices = roomsSelected[i_HId].rooms[i_RId].rdPrices
    for (var i in roomDayPrices) {
      jQuery("#room_day_price_" + i_HId + "_" + i_GId + "_" + i).html(
          roomDayPrices[i] > 0 ? roomDayPrices[i] + ' ' + window.gViewCurrency
              : '<span class="highlighted"><strong>FREE!</strong></span>');
    }
  }
}

function SubmitBookingForm(i_Url, i_HId) {
  if (roomsSelected[i_HId]) {
    var isValidated = false;

    for (var i in roomsSelected[i_HId].rooms) {
      if (roomsSelected[i_HId].rooms[i].selected) {
        isValidated = true;
        break;
      }
    }
    if (isValidated == true) {
      var hotelFormName = '_hotelform_' + i_HId;
      document.forms[hotelFormName].action = i_Url;
      document.forms[hotelFormName].method = 'post';
      document.forms[hotelFormName].submit();
    } else {
      alert('Please select at least one room to proceed with booking for this hotel...');
    }
  }
  return false;
}

