/* Modifications to this file need to be implemented in the same way
   in the sprocket_search.js file. */

// Shows/Hides Children Ages and FREE child place option
function RedrawChildren() {
   //if (window.productType != 'CRUISE') { if (!checkPartySize()) return;}
   if($('NoChildren'))
   {
      var children = +$F('NoChildren'), beach = (window.productType == 'BEACH');
      var tabindex = beach ? ' tabindex=50' : '';
      // No children selected > 0
      if (children) {
         var html = [];
         // Loop round all children
         for (var i = 0; i < children; i++) {
            var id = 'child' + i;
            var clazz = (i % 2) ? 'even' : 'odd';
            html.push('<label class="childage ' + clazz + '" for="' + id + '">Child '+ (i+1) +'<select id="' + id + '" name="' + id + '"' + tabindex + '>');
            // Generate Options for Dropdowns - select current age
            var childage = +$N('searchCriteria.childAges['+i+']')[0].value;
            for (var age = 2; age < 17; age++) {
               var selected = (childage == age) ? ' selected=selected' : '';
               html.push('<option ' + selected + ' value="' + age + '">' + age + '</option>');
            }
            html.push('</select>');
            html.push('</label>');
         }
         $('childages').innerHTML = html.join('\n');
      }
      $('childagesrow').style.display = children ? 'block' : 'none';
      if (beach && !children) $('familyroomonly').style.display = 'block';
   }
}

// Checks for Maximum party size and no. of adults >= no. of infants
function CheckPassengerQty() {
   var numAdults   = +$F('NoAdults');
   var numChildren = +$F('NoChildren');
   var numInfants  = +$F('NoInfants');
   var numGuardians = numAdults
   for (var i = 0; i < numChildren; i++) {
      var age = +$F('child' + i);
      if( age > 15 ) {
         numGuardians++
      }
   }
   var error = false;
   if (numAdults + numChildren > 9) {
      error = 'Your total party size must be 9 passengers or fewer';
   } else if ( numInfants > numGuardians ) {
      error = 'There must be at least one passenger aged 16 or over for each infant travelling';
   }
   if (error) { window.alert(error) }
      return !error;
}

function SetDepartureDate(DateIn) {
   var dmy = DateIn.split('/')
   var dayOfMonth = +dmy[0];
   var monthYear = dmy[1] + '/' + dmy[2];
   $('calendar_day').options[dayOfMonth-1].selected = true;
   var select = $('calendar_month_year');
   for (var i = 0; i < select.options.length; i++) {
      if (select.options[i].value == monthYear) {
         select.options[i].selected = true
      }
   }
}

function CheckValidDepartureDate() {
   var departureDate = $F('calendar_day') + '/' + $F('calendar_month_year');
   // TODO: return Dates.valid(departureDate) && Dates.inRange(departureDate, min, max);
   return CheckValidDate(departureDate) &&
   (DateValue(departureDate) >= DateValue(dteMinDeparture)) &&
   (DateValue(departureDate) <= DateValue(dteMaxDeparture));
}

// Check date is valid (e.g. Not 30/02/2003)
function CheckValidDate(datein) {
   var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/;
   var FieldObjDay1 = getElem('calendar_day')
   var matchArray = datein.match(datePat);
   if (matchArray == null) {
      alert('Please select a valid departure date')
      return false;
   } else {
      day = matchArray[1];
      month = matchArray[3];
      year = matchArray[4];
      if ((month==4 || month==6 || month==9 || month==11) && day==31) {
         // Set maximum day for this month
         FieldObjDay1.options[29].selected = true;
         return true
      }
      if (month == 2) {
         var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
         if (day>29 || (day==29 && !isleap)) {
            // Set maximum day for this month
            if (isleap) { FieldObjDay1.options[28].selected = true; }
            if (!isleap) { FieldObjDay1.options[27].selected = true; }
            return true;
         }
      }
   }
   return true;
}

// just for the availability search form
function SearchValidate() {
   if ($F('productType') == '0') {
      alert('Please select your holiday type from the first drop down box before you start your search');
      return false;
   }
   // Check departure date is within specified limits
   SearchSelectedDate = $F('calendar_day') + '/' + $F('calendar_month_year');
   if (!CheckValidDate(SearchSelectedDate)) {
      return false;
   }
   else if (DateValue(SearchSelectedDate) < DateValue(dteMinDeparture))
   {
      alert('Please select a departure date on or after ' + dteMinDeparture)
      // Set Minimum Date in fields //
      SetDepartureDate(dteMinDeparture)
      DynamicUpdate('calendar_day','change');
      return false
   }
   else if (DateValue(SearchSelectedDate) > DateValue(dteMaxDeparture)) {
      alert('Please select a departure date on or before ' + dteMaxDeparture)
      // Set Maximum Date in fields
      SetDepartureDate(dteMaxDeparture)
      DynamicUpdate('calendar_day','change');
      return false
   }
    var isDefaultConfig = document.forms[0].elements["searchCriteria.defaultRoomConfiguration"].value;
    if (isDefaultConfig == "false") {
      if (!CheckTotalPartySize() || !CheckOneAdultforRoom() || !CheckOneAdultacrossRooms() || !CheckAdultandInfant()) return false;
   } else if(document.forms[0].elements["searchCriteria.roomConfigurationFormBean.numberOfRooms"]) {
   if(!CheckRoomAdultsQty()) return false;
   if(!CheckPassengerQty()) return false;
   }

   if (window.productType == 'CRUISE') {
      // Set Fixed Departure Date priority if Exactly option selected
      if ($('departureDateExactly').checked) { $('priorityDepartureDate').checked = true }
      // Show search priorities
      $('searchcriteria1').style.display = 'none';
      $('searchcriteria2').style.display = 'inline';
      window.scrollTo(0,0);
      return false;
   } else {
      CopyChildren();
      CopyFamilyRooms();
      // Enable Location dropdowns
      ElementAction('SearchResort','enable')
      ElementAction('SearchAccommodation','enable')

      var dynamicFrameName = 'dynamicFrameARA';
      var url = '/th/beach/autoRoomAllocation.do';

      var adultsnum = 0;
      var childnum =0;
      var infantnum =0;

    // Do this only when default config validation is true and ARA is enabled.
    if(isDefaultConfig == "true" && (document.forms[0].elements["searchCriteria.roomConfigurationFormBean.numberOfRooms"])) {
      adultsnum   = +$F('NoAdults');
      childnum = +$F('NoChildren');
      infantnum  = +$F('NoInfants');
      var numberOfRooms = document.forms[0].elements["searchCriteria.roomConfigurationFormBean.numberOfRooms"].value;
      url += '?adults=' + adultsnum + '&children=' + childnum + '&infants=' + infantnum + '&numberOfRooms=' + numberOfRooms;
      try {
         window[dynamicFrameName].document.location.replace(url);
      } catch (e) {
         window[dynamicFrameName].location = url;
      }
    } else {
         var searchForm = document.getElementById('availSearch') || document.forms.searchForm || document.forms[0];
         searchForm.action = '/th/beach/initialiseSearchInstruction.do';
         return true;
    }
   return false;
   }
}

function CheckRoomAdultsQty() {
   var numAdults = +$F('NoAdults');
   var errorNumRooms = false;
   if(document.forms[0].elements["searchCriteria.roomConfigurationFormBean.numberOfRooms"]) {
      var numberOfRooms = document.forms[0].elements["searchCriteria.roomConfigurationFormBean.numberOfRooms"].value;
      if (numberOfRooms> numAdults ) {
         errorNumRooms = 'Number of rooms entered cannot be greater than the number of adults in your party. Please\nre-enter your required number of rooms and the party configuration in the search panel';
      }
      if (errorNumRooms) {
         window.alert(errorNumRooms);
         document.forms[0].elements["searchCriteria.roomConfigurationFormBean.numberOfRooms"].selectedIndex = 0;
         $('NoAdults').selectedIndex = 1;
         $('NoChildren').selectedIndex = 0;
         $('NoInfants').selectedIndex = 0;
         RedrawChildren();
      }
      return !errorNumRooms;
   }
}

function checkARAflag(obj) {
   document.forms[0].elements["searchCriteria.defaultRoomConfiguration"].value = obj;
   if(obj == 'true') {
      var searchForm = document.getElementById('availSearch') || document.forms.searchForm || document.forms[0];
      searchForm.action = '/th/beach/initialiseSearchInstruction.do';
      searchForm.submit();
   } else {
      alert("Please enter the number of passengers in each room.");
      numberOfRooms = document.forms[0].elements["searchCriteria.roomConfigurationFormBean.numberOfRooms"].value;
      redrawRoomConfiguration(numberOfRooms);
      document.getElementById("roomConfigurationIni").style.display="none";
   }
}

function ValidateAndSubmit(form) {
   if (form && (!form.onsubmit || form.onsubmit())) {
      if ($("portal")) $("portal").value = "false";
      form.submit();
   }
}

// New: Copy Children to hidden fields
function CopyChildren() {
   // Copy children ages into hidden fields
   var numChildren = +$F('NoChildren');
   for (var i = 0; i < numChildren; i++) {
      var age = $('child' + i).selectedIndex + 2;
      $N('searchCriteria.childAges[' + i + ']')[0].value = age;
   }
}

// New: Copy Family Checkbox value
function CopyFamilyRooms() {
   $('showLargeFamilyRooms').value = $('familyroom').checked;
}

function SearchExecute() {
   var searchForm = document.forms.searchForm || document.forms[0];
   if (window.productType == 'CRUISE') {
      CopyChildren();
      searchForm.action = '/th/cruise/initialiseSearchInstruction.do';
   } else {
      CopyChildren();
      CopyFamilyRooms();
      // Enable Location dropdowns
      ElementAction('SearchResort','enable')
      ElementAction('SearchAccommodation','enable')
      if (ns6) {
         $('searchcriteria1').style.visibility = 'hidden';
         $('searchcriteria1').style.display = 'block';
         $('searchcriteria1').style.height = '0px';
         $('searchcriteria1').style.overflow = 'none';
      }
   searchForm.action = '/th/beach/initialiseSearchInstruction.do';
   }
   searchForm.submit();
}

// Set children ages from hidden fields and update free child place field
function ChildrenInit() {
   RedrawChildren();
   $('familyroom').checked = ($F('showLargeFamilyRooms') == 'true');
}

function validateHolidayType(id) {
  var el = $(id);
  if ($F('productType') == '0') {
    if (el.type != 'radio' || (el.type == 'radio' && el.checked == false)) {
      alert("Please select your holiday type from the first drop down box before you start your search");
    }
    if (el.type == 'radio') {
      if (el.checked == true) {
        el.checked = 'true';
      }
    }
    if (el.type == 'checkbox') {
      $('familyroom').checked = false;
    }
    $('departureDateFlexible').checked = 'true';
    $('departureDateFlexible').focus();
  } else {
    if (el.type == 'radio') {
      changePriority(id);
    }
  }
}

function changePriority(id) {
   if (id == 'departureDateExactly') {
      // to select the departure date
      $('priority').options[1].selected = true;
   } else if (id == 'departureDateFlexible') {
      $('priority').options[0].selected = true;
   }
}

function changePriorityDP(o) {
   $('priority').options[(o.value == '0') ? 1 : 0].selected = true;
}

function expandSearchItems() {
   $('expandedSearchItems').style.display = 'block';
   $('contractedSearchItems').style.display = 'none';
}

function contractSearchItems() {
   $('expandedSearchItems').style.display = 'none';
   $('contractedSearchItems').style.display = 'block';
}

function checkAdults(id) {
   if($F(id) == '9+') {
      if (document.all) { alert($('adultmessage').innerText); }
      else { alert($('adultmessage').textContent); }
      $(id).selectedIndex=1;
      $(id).focus();
   }
}

function redrawRoomConfiguration(numberOfRooms) {
   var roomConfig = "<table cellpadding=\"1\" cellspacing=\"0\" border=\"0\"><tr><td width=\"25%\"><p>Room</p></td><td width=\"25%\"><p align=\"center\">Adults</p></td><td nowrap=\"nowrap\" width=\"25%\"><p align=\"center\">Children<br/>Ages 2-16</p></td><td nowrap=\"nowrap\" width=\"25%\"><p align=\"center\">Infants<br/>Under 2</p></td></tr>";
   if (numberOfRooms>=2) {
      for(i=0;i<numberOfRooms;i++) {
         roomConfig+= createSingleRoomConfiguration(i);
      }
   } else {
      roomConfig+= createSingleRoomConfiguration(0);
   }
   roomConfig+= "</table>";
   getElem("roomConfiguration").innerHTML = roomConfig;
   getElem("roomConfiguration").style.display="block";
}

function redrawOriginalRoomConfiguration(numberOfRooms) {
   getElem("roomConfiguration").innerHTML = "";
   getElem("roomConfiguration").style.display="none";
   getElem("roomConfigurationIni").style.display="block";
   document.forms[0].elements["searchCriteria.defaultRoomConfiguration"].value = true;
}

function createSingleRoomConfiguration(roomNumber) {
   var roomConfigRow = "<tr><td align=\"center\" valign=\"top\"><div style=\"border:1px solid black;background:#fff;width:17px;height:15px;color:#000;font-size:10px;margin-top:1px;\">" + ( roomNumber + 1 ) + "</div></td>";
   roomConfigRow+= "<td align=\"center\" valign=\"top\">" + createAdultDropdown(roomNumber) + "</td>";
   roomConfigRow+= "<td align=\"center\" valign=\"top\">" + createChildDropdown(roomNumber) + "</td>";
   roomConfigRow+= "<td align=\"center\" valign=\"top\">" + createInfantDropdown(roomNumber) + "</td></tr>";
   roomConfigRow+= "<tr><td colspan=\"4\" style=\"padding:2px 0px 10px 4px;\" id=\"childAgesRow_"+roomNumber+"\"></td></tr>";
   return roomConfigRow;
}

function createAdultDropdown(roomNumber) {
   var adultDropDown = "<select style=\"width:35px\" name=\"searchCriteria.roomConfigurationFormBean.rooms["+roomNumber+"].adults\" tabindex=\"50\" onchange=\"checkPartySize(this);\">";
   for(j=1;j<=9;j++) {
      if(j==1) { //for defaulting 1
         adultDropDown+= "<option value=\"" + j + "\" selected='selected'>" + j + "</option>"; continue;
         }
      adultDropDown+= "<option value=\"" + j + "\">" + j + "</option>";
   }
   adultDropDown+= "</select>";
   return adultDropDown;
}

function createChildDropdown(roomNumber) {
   var childDropDown = "<select style=\"width:35px\" name=\"searchCriteria.roomConfigurationFormBean.rooms[" + roomNumber + "].children\" tabindex=\"50\" onchange=\"redrawChildAges(this);\">";
   for(k=0;k<9;k++) {
      childDropDown+= "<option value=\"" + k + "\">" + k + "</option>";
   }
   childDropDown+= "</select>";
   return childDropDown;
}

function createInfantDropdown(roomNumber) {
   var infantDropDown = "<select style=\"width:35px\" name=\"searchCriteria.roomConfigurationFormBean.rooms["+roomNumber+"].infants\" tabindex=\"50\">";
   for(l=0;l<=9;l++) {
      infantDropDown+= "<option value=\"" + l + "\">" + l + "</option>";
   }
   infantDropDown+= "</select>";
   return infantDropDown;
}

function redrawChildAges(obj) {
   if (!checkPartySize(obj));
   var numberOfChildren = obj.value;
   var roomNumber = getRoomNumber(obj.name);
   var childAges = "";
   if (numberOfChildren>0) {
      for(childNum=0;childNum<numberOfChildren;childNum++) {
         childAges+= "<div style=\"float:left;margin:0px 0px 0px 5px;\"><p style=\"background-color:transparent;\">Child " + ( childNum + 1 ) + " <select style=\"width:40px\" name=\"searchCriteria.roomConfigurationFormBean.rooms[" + roomNumber + "].childAge[" + childNum + "]\" tabindex=\"50\">";
         for(age=2;age<=16;age++) {
            if (document.forms[0].elements["searchCriteria.roomConfigurationFormBean.rooms[" + roomNumber + "].childAge[" + childNum + "]"] && (document.forms[0].elements["searchCriteria.roomConfigurationFormBean.rooms[" + roomNumber + "].childAge[" + childNum + "]"].value>0 && age==document.forms[0].elements["searchCriteria.roomConfigurationFormBean.rooms[" + roomNumber + "].childAge[" + childNum + "]"].value) || age==2) {
               childAges+= "<option value=\"" + age + "\" selected=\"selected\">" + age + "</option>";
            } else {
               childAges+= "<option value=\"" + age + "\">" + age + "</option>";
            }
         }
         childAges+= "</select></p></div>";
      }
      if(roomNumber == 0) //added to add the caption only once
      childAges = "<p>Please enter ages on date of return for children (2-16)</p>" + childAges;
   }
   getElem("childAgesRow_"+roomNumber).innerHTML = childAges;
}

function getRoomNumber(name) {
   var roomNumber = name.substring(name.indexOf("[")+1,name.indexOf("]."));
   return roomNumber;
}

function displayPartyDetails(event,display,elementId,flag) {
   var detailDiv = "";
   if (document.getElementById(elementId)) {
      detailDiv = document.getElementById(elementId);
   }
   if (display=="show") {
      detailDiv.style.display = "block";
      positionDiv(event, detailDiv,flag);
   } else {
      detailDiv.style.display = "none";
   }
}

function displayChildTermsAndConditions(event,display,elementId,flag,minAge, maxAge) {
   var detailDiv = "";
   if (document.getElementById(elementId)) {
      detailDiv = document.getElementById(elementId);
   }
   if (display=="show") {
      detailDiv.style.display = "block";
      getElem("min").innerHTML = minAge;
      getElem("max").innerHTML = maxAge;
      positionDiv(event, detailDiv,flag);
      divSelectHover(); //added to hide the DIV from selectboxes
   } else {
      detailDiv.style.display = "none";
   }
}

function positionDiv(e,obj,flag) {
   var xpos = findPosX(e);
   var ypos = findPosY(e);
   var winTop, winLeft;
   var isOpera = (navigator.userAgent.indexOf('Opera') != -1);
   var isIE = (!isOpera && navigator.userAgent.indexOf('MSIE') != -1);

   winTop  = (ypos + 20);
   if(flag) {
      winLeft = (xpos - 46);
      if (isIE) winLeft =  (xpos- 30);
   } else {
      winLeft = (xpos - 268);
      if (isIE) winLeft =  (xpos - 252);
   }
   obj.style.top = winTop +'px';
   obj.style.left = winLeft +'px';
}

/**
 * This method is used to update the selected room's selected value.
 * If the quantity available for this room is zero after the selection then hides the other possible upgrades.
 *
 * @param obj: selected room object
 */
function updateSelectedRoom(obj) {
   var objName = obj.name;
   var selIndex = -1;
   for(i=0;i<roomConfigNum;i++) {
      for(k=0;k<document.forms[0].elements["roomConfigurationFormBeans["+i+"].selected"].length;k++) 
      {
         if (document.forms[0].elements["roomConfigurationFormBeans["+i+"].selected"][k].checked) 
         {
            document.forms[0].elements["roomConfigurationFormBeans["+i+"].availableRoomDetailsFormBeans["+k+"].selected"].value = "true";
            document.forms[0].elements["roomConfigurationFormBeans["+i+"].selected"][k].value = "true";
            if(objName == "roomConfigurationFormBeans["+i+"].selected")
            {
               hideSimilarRooms(i , k );
            }
         } 
         else 
         {
            document.forms[0].elements["roomConfigurationFormBeans["+i+"].availableRoomDetailsFormBeans["+k+"].selected"].value = "false";
            document.forms[0].elements["roomConfigurationFormBeans["+i+"].selected"][k].value = "false";
            unHideRooms(i,k);
         }
      }
   }
}


/**
 * This method is used to hide all upgrade rooms where quantity available for the selected room is less than
 * ZERO
 *
 */
function hideRoomsWithNotEnoughQty()
{
   for(i=0;i<roomConfigNum;i++) {
      for(k=0;k<document.forms[0].elements["roomConfigurationFormBeans["+i+"].selected"].length;k++) 
      {
            if (document.forms[0].elements["roomConfigurationFormBeans["+i+"].selected"][k].checked) {
            hideSimilarRooms(i , k );
            }
      }
   }
}

function getRemainingRoomQuantityForSelectedRoom(selectedRoomCode, selectedRoomQty)
{
	var remRoomQty = selectedRoomQty;
   for(var  j=0 ; j <roomsNum.length  ; j++ )
   {
      for(var l=0; l <roomsNum[j]; l++)
      {
        currRoomCode = document.forms[0].elements["roomConfigurationFormBeans["+j+"].availableRoomDetailsFormBeans["+l+"].roomDetail.roomCode"].value;
        if (currRoomCode == selectedRoomCode
            && document.forms[0].elements["roomConfigurationFormBeans["+j+"].selected"][l] != null
            && document.forms[0].elements["roomConfigurationFormBeans["+j+"].selected"][l].type == "radio"
            && document.forms[0].elements["roomConfigurationFormBeans["+j+"].selected"][l].checked)
         {
				--remRoomQty;
         }
      }
   }

   return remRoomQty;
}


/**
 * This method is used to hide all upgrade rooms where quantity available for the selected room is less than
 * ZERO for the passed in room group index and the current index
 *
 */
function hideSimilarRooms(  currRoomGroupIndex, currRoomIndex )
{
   var selectedRoomCode = document.forms[0].elements["roomConfigurationFormBeans["+currRoomGroupIndex+"].availableRoomDetailsFormBeans["+currRoomIndex+"].roomDetail.roomCode"].value;
   var selectedRoomQty = document.forms[0].elements["roomConfigurationFormBeans["+currRoomGroupIndex+"].availableRoomDetailsFormBeans["+currRoomIndex+"].roomDetail.quantityAvailable"].value
  selectedRoomQty = getRemainingRoomQuantityForSelectedRoom(selectedRoomCode, selectedRoomQty);

  var theRows = document.getElementById("roomUpsellTable").rows

   for(var j=roomsNum.length -1 ; j >= 0 ; j -- )
   {
      for( var l=0; l <roomsNum[j]; l++)
      {
         var currRoomCode = document.forms[0].elements["roomConfigurationFormBeans["+j+"].availableRoomDetailsFormBeans["+l+"].roomDetail.roomCode"].value;

         if(currRoomCode == selectedRoomCode && j != currRoomGroupIndex )
         {
            if( (( --selectedRoomQty) < 0 )  && document.forms[0].elements["roomConfigurationFormBeans["+j+"].availableRoomDetailsFormBeans["+l+"].selected"].value == "false")
            {
               var regExp = new RegExp("Room_"+l+"_"+j);
               for (var rowNum=0;rowNum<theRows.length;rowNum++) 
               { 
                  if (regExp.test(theRows[rowNum].id)) { 		
					 theRows[rowNum].style.display="none";
                					  showRoomDescription(j) }
               }
            }
         }
      }
   }
}


function showRoomDescription(currRoomGroupIndex)
{
   //If the first room in the group is hidden
   if(document.getElementById("Room_0_"+currRoomGroupIndex).style.display=="none")
   {
      // Iterate through the rest of the rooms..
      for(var l=1; l <roomsNum[currRoomGroupIndex]; l++)
      {
         // For the room which is not hidden..
         if(document.getElementById("Room_"+l+"_"+currRoomGroupIndex).style.display=="")
         {
            document.getElementById("RoomDesc_"+l+"_"+currRoomGroupIndex).style.display="";
            break;
         }
      }
   }
}

function hideRoomDescription(currRoomGroupIndex)
{
   //If the first room in the group is enabled...
   if(document.getElementById("Room_0_"+currRoomGroupIndex).style.display=="")
   {
      // Iterate through the rest of the rooms..
      for(var l=1; l <roomsNum[currRoomGroupIndex]; l++)
      {
            document.getElementById("RoomDesc_"+l+"_"+currRoomGroupIndex).style.display="none";
      }
   }
}

/**
 * This method unhides any rooms which were previously hidden due to lack of quantity available.
 *
 */
function unHideRooms( currRoomGroupIndex, currRoomIndex )
{
   var selectedRoomCode = document.forms[0].elements["roomConfigurationFormBeans["+currRoomGroupIndex+"].availableRoomDetailsFormBeans["+currRoomIndex+"].roomDetail.roomCode"].value;

   var selectedRoomQty= -99;
   var theRows = document.getElementById("roomUpsellTable").rows

    var currRoomCode ="";
   for(var  j=0 ; j <roomsNum.length  ; j++ )
   {
      for(var l=0; l <roomsNum[j]; l++)
      {
        currRoomCode = document.forms[0].elements["roomConfigurationFormBeans["+j+"].availableRoomDetailsFormBeans["+l+"].roomDetail.roomCode"].value;
        if (currRoomCode == selectedRoomCode
            && document.forms[0].elements["roomConfigurationFormBeans["+j+"].selected"][l] != null
            && document.forms[0].elements["roomConfigurationFormBeans["+j+"].selected"][l].type == "radio"
            && document.forms[0].elements["roomConfigurationFormBeans["+j+"].selected"][l].checked)
         {
            selectedRoomQty = document.forms[0].elements["roomConfigurationFormBeans["+j+"].availableRoomDetailsFormBeans["+l+"].roomDetail.quantityAvailable"].value
            selectedRoomQty = getRemainingRoomQuantityForSelectedRoom(selectedRoomCode, selectedRoomQty);
         }
      }
   }


   for(var  j=0 ; j < roomsNum.length  ; j ++ )
   {
      for(var l=0; l <roomsNum[j]; l++)
      {
         var currRoomCode = document.forms[0].elements["roomConfigurationFormBeans["+j+"].availableRoomDetailsFormBeans["+l+"].roomDetail.roomCode"].value;
         if(currRoomCode == selectedRoomCode && j != currRoomGroupIndex  )
         {
            var regExp = new RegExp("Room_"+l+"_"+j);
	        for (var rowNum=0;rowNum<theRows.length;rowNum++) 
           	{ 
          	   if (regExp.test(theRows[rowNum].id) ) {
                if( selectedRoomQty== -99 || selectedRoomQty > 0) 
                {                
                      theRows[rowNum].style.display=""
				     hideRoomDescription(j);
                } 
              }
            }
         }
      }
   }
}

/**
 * This method is used to find the position of the object (Find button).
 *
 * @param obj: It is the find button image object.
 */
function findPosX(obj) {
   var curleft = 0;
   if (obj.offsetParent)
   {
      while (obj.offsetParent)
      {
         curleft += obj.offsetLeft;
         obj = obj.offsetParent;
      }
   }
   else if (obj.x) curleft += obj.x;
   return curleft;
}

/**
 * This method is used to find the position of the object (Find button).
 *
 * @param obj: It is the find button image object.
 */
function findPosY(obj) {
   var curtop = 0;
   if (obj.offsetParent)
   {
      while (obj.offsetParent)
      {
         curtop += obj.offsetTop
         obj = obj.offsetParent;
      }
   }
   else if (obj.y) curtop += obj.y;
   return curtop;
}

// Set Focus to field and show message
function SetFocus(alertmess,obj1) {
   alert(alertmess)
   obj1.focus();
   return;
}

function updateRoomPriceAndGetTotalPartyPrice(obj) {
   var objName = obj.name;
   for(i=0;i<roomConfigNum;i++) {
      for(k=0;k<document.forms[0].elements["roomConfigurationFormBeans["+i+"].selected"].length;k++) {
         if (document.forms[0].elements["roomConfigurationFormBeans["+i+"].selected"][k].checked) {
            document.forms[0].elements["roomConfigurationFormBeans["+i+"].availableRoomDetailsFormBeans["+k+"].selected"].value = "true";
            document.forms[0].elements["roomConfigurationFormBeans["+i+"].selected"][k].value = "true";
            //var elem = "totalPrice_1_"+k;
            var totalPartyPrice = document.forms[0].elements['totalPrice_1_'+k].value
            $('totalPartyTd').innerHTML = "<strong>&pound;" + totalPartyPrice + "</strong>";
         } else {
            document.forms[0].elements["roomConfigurationFormBeans["+i+"].availableRoomDetailsFormBeans["+k+"].selected"].value = "false";
            document.forms[0].elements["roomConfigurationFormBeans["+i+"].selected"][k].value = "false";
         }
      }
   }
   copyPrintDiv();
}

/*********** This function is used for printing the updated price panel.***********
The DIV id is replaced to avoid duplicate creation of 'totalPartyTd' in print Div */
function copyPrintDiv(){
   if (getElem('priceblock')) {
      var pricePanelDiv = getElem('divPricePanel').innerHTML;
      var myregexp = new RegExp("totalPartyTd");
      pricePanelDiv = pricePanelDiv.replace(myregexp, "");
      getElem('pricepanelprint').innerHTML = pricePanelDiv;
   }
}

function checkPartySize(obj) {
   var isDefaultConfig = document.forms[0].elements["searchCriteria.defaultRoomConfiguration"].value;
   if (isDefaultConfig == "false" && !CheckPassengerQtyARA(obj)) return false;
   else if (isDefaultConfig == "true" && !CheckPassengerQty()) return false;
   else return true;
}

// Checks for Maximum party size and no. of adults >= no. of infants
function CheckPassengerQtyARA(obj) {
   var tempPax;
   if(obj) { tempPax = obj.name.substring(obj.name.indexOf("].")+2,obj.name.length); }
   else { tempPax = 'adults'; }

   for(i=0;i<document.forms[0].elements["searchCriteria.roomConfigurationFormBean.numberOfRooms"].value;i++) {
   if (document.forms[0].elements["searchCriteria.roomConfigurationFormBean.rooms[" + i + "].adults"]) {
      NoAdults   = parseInt(document.forms[0].elements["searchCriteria.roomConfigurationFormBean.rooms[" + i + "].adults"].value,10);
      NoChildren = parseInt(document.forms[0].elements["searchCriteria.roomConfigurationFormBean.rooms[" + i + "].children"].value,10);
      NoInfants  = parseInt(document.forms[0].elements["searchCriteria.roomConfigurationFormBean.rooms[" + i + "].infants"].value,10);

      if ((NoAdults + NoChildren) > 9 ) {
         alert('Your total party size must be 9 passengers or fewer for Room '+ (i+1));
         if(tempPax == 'adults') tempSel = 9-NoChildren-1;
         if(tempPax == 'children') tempSel = 9-NoAdults;
         document.forms[0].elements["searchCriteria.roomConfigurationFormBean.rooms[" + i + "]."+tempPax].selectedIndex = tempSel;
         if(tempPax == 'children')
            redrawChildAges(document.forms[0].elements["searchCriteria.roomConfigurationFormBean.rooms[" + i + "]."+tempPax]);
         return;
      }

      tooManyInfants = false;
      childAgesDrawn = true;
      if (NoInfants > NoAdults) {
         grownUps = NoAdults;
         no_of_children = parseInt(document.forms[0].elements["searchCriteria.roomConfigurationFormBean.rooms[" + i + "].children"].value);
         if( no_of_children > 0 ) {
            for (j=0; j < no_of_children;j++) {
               if(document.forms[0].elements["searchCriteria.roomConfigurationFormBean.rooms[" + i + "].childAge[" + j + "]"])
               {
                  age = parseInt(document.forms[0].elements["searchCriteria.roomConfigurationFormBean.rooms[" + i + "].childAge[" + j + "]"].value)
                   if( age > 15 ) {
                  grownUps++;
                  }
               }
               else // This will happen when there child ages is not drawn...........
               {
                    childAgesDrawn = false;
               }
            }
         }
         tooManyInfants = ( grownUps < NoInfants );
      }
      if( tooManyInfants && childAgesDrawn ) {
         return SetFocus('There must be at least one passenger aged 16 or over for each infant travelling',document.forms[0].elements["searchCriteria.roomConfigurationFormBean.rooms[" + i + "].adults"]);
      }
   }
   }
   return true;
}

function CheckTotalPartySize() {
   var NumAdults =0;
   var NumChildren = 0;
   for(i=0;i<document.forms[0].elements["searchCriteria.roomConfigurationFormBean.numberOfRooms"].value;i++) {
      NumAdults = NumAdults + parseInt(document.forms[0].elements["searchCriteria.roomConfigurationFormBean.rooms[" + i + "].adults"].value,10);
      NumChildren = NumChildren + parseInt(document.forms[0].elements["searchCriteria.roomConfigurationFormBean.rooms[" + i + "].children"].value,10);
      if ((NumAdults + NumChildren) > 9) {
         return SetFocus('Your total party size must be 9 passengers or fewer ',document.forms[0].elements["searchCriteria.roomConfigurationFormBean.rooms[0].adults"]);
      }
   }
   return true;
}

function CheckOneAdultforRoom() {
   for(var i=0;i<document.forms[0].elements["searchCriteria.roomConfigurationFormBean.numberOfRooms"].value;i++) {
      if(parseInt(document.forms[0].elements["searchCriteria.roomConfigurationFormBean.rooms[" + i + "].adults"].value,10) < 1) {
         return SetFocus('You must select atleast one adult passenger across room '+ (i+1),document.forms[0].elements["searchCriteria.roomConfigurationFormBean.rooms["+ i +"].adults"]);
      }
   }
   return true;
}

function CheckOneAdultacrossRooms() {
   var NumAdults =0;
   for(i=0;i<document.forms[0].elements["searchCriteria.roomConfigurationFormBean.numberOfRooms"].value;i++) {
      NumAdults = NumAdults + parseInt(document.forms[0].elements["searchCriteria.roomConfigurationFormBean.rooms[" + i + "].adults"].value,10);
   }
   if (NumAdults < 1) {
      return SetFocus('You must select atleast one adult passenger across all rooms',document.forms[0].elements["searchCriteria.roomConfigurationFormBean.rooms[0].adults"]);
   }
   return true;
}

function CheckAdultandInfant() {
var NoAdults, NoChildren, NoInfants, tooManyInfants, grownUps;
childAgesDrawn = true;
   for(i=0;i<document.forms[0].elements["searchCriteria.roomConfigurationFormBean.numberOfRooms"].value;i++) {
     if (document.forms[0].elements["searchCriteria.roomConfigurationFormBean.rooms[" + i + "].adults"]) {
        NoAdults   = parseInt(document.forms[0].elements["searchCriteria.roomConfigurationFormBean.rooms[" + i + "].adults"].value,10);
        NoChildren = parseInt(document.forms[0].elements["searchCriteria.roomConfigurationFormBean.rooms[" + i + "].children"].value,10);
        NoInfants  = parseInt(document.forms[0].elements["searchCriteria.roomConfigurationFormBean.rooms[" + i + "].infants"].value,10);
        tooManyInfants = false;
        if (NoInfants > NoAdults) {
           grownUps = NoAdults;
           no_of_children = parseInt(document.forms[0].elements["searchCriteria.roomConfigurationFormBean.rooms[" + i + "].children"].value);
           if( no_of_children > 0 ) {
              for (j=0; j < no_of_children;j++)
              {
                 if(document.forms[0].elements["searchCriteria.roomConfigurationFormBean.rooms[" + i + "].childAge[" + j + "]"])
                 {
                    age = parseInt(document.forms[0].elements["searchCriteria.roomConfigurationFormBean.rooms[" + i + "].childAge[" + j + "]"].value)
                    if( age > 15 )
                    {
                       grownUps++;
                    }
                 }
                 else
                 {
                    childAgesDrawn = false;
                 }
              }
           }
           tooManyInfants = ( grownUps < NoInfants );
        }
        if( tooManyInfants && childAgesDrawn) {
         return SetFocus('There must be at least one passenger aged 16 or over for each infant travelling',document.forms[0].elements["searchCriteria.roomConfigurationFormBean.rooms[" + i + "].adults"]);
        }
     }
   }
   return true;
}

//Function to hide select boxes when hovered in child ages under room upsell/selection page
divSelectHover = function() {
   var ieDivs = document.getElementsByTagName('div');
   for(i=0; i<ieDivs.length; i++) {
      var ieDiv = ieDivs[i];
      if(ieDiv.id == "terms") // Check if the DIV is of ID term and send it ahead.
         setHover(ieDiv);
   }
}

function setHover(nav) {
   if (navigator.appVersion.substr(22,3)!="5.0") {
      // IE script to cover <select> elements with <iframe>s
      nav.innerHTML = ('<iframe src="about:blank" scrolling="no" frameborder="0" style="position:absolute;filter: progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0);"></iframe>' + nav.innerHTML);
      var ieMat = nav.firstChild;
      ieMat.style.width= nav.offsetWidth + "px";
      ieMat.style.height= nav.offsetHeight + "px";
      ieMat.style.display = "inline";
      ieMat.style.zIndex="-1";
      nav.style.zIndex="101";
   }
}