﻿function yeego_search()
{
  if (!jQuery("#gmap-tab").is(":visible")) {
    var $fCountry = jQuery("#form-country");
    // skip handling autocomplete value on hotel page
    if ($fCountry.length == 0) return triggerSearch();
    var $fCity = jQuery("#form-city");
    var $fType = jQuery("#form-type");
    var value = jQuery("#form-city_ac").val();
    if (jQuery.trim(value) == '' || value == "Type Destination ...") {
      // resetting type & cityId
      $fType.val("");
      $fCity.val("");
    } else if ($fCity.data('query') !=  value) {
      // resetting type & cityId
      $fType.val("");
      $fCity.val("");
      // handle custom search
      jQuery.rpcCall('/AjaxService.php?class=SearchResultsAjax&action=findCity&city='+value+'&country='+$fCountry.val(), function(result){
        if (!result){
          alert('Cannot find requested city. Please enter new city.');
          return;
        }
        $fType.val("2");
        $fCity.val(result).data('query', value);
        triggerSearch();
      });
      return;
    }
  }
  return triggerSearch();
}

function ValidateSearch() {
  var result = '';
  if (jQuery("#gmap-tab").is(":visible")) {
    if (jQuery("#form-gmap").val().indexOf("|") == -1) {
      // unlikely but just in case
      result += 'Cannot read pin location from the map.\n';
    }
    var zoom = 10 - jQuery("#form-gmap").data("map").getZoom();
    if (zoom > 0)
    {
      result += 'Map is not scaled-down to the required level.\n Please zoom in the map by at least '+ zoom + (zoom == 1 ? ' level.\n' : ' levels.\n');
    }
  } else {
    if (jQuery.trim(jQuery("#form-type").val()) == ""
        || jQuery.trim(jQuery("#form-city").val()) == "") {
      result += 'Destination city is required.\n';
    }
  }
  var checkIn = jQuery.trim(jQuery("#form-check_in").val());
  try {
    var now = new Date();
    now.setHours(0);
    now.setMinutes(0);
    now.setSeconds(0);
    now.setMilliseconds(0);
    if (checkIn == "") {
      result += 'Check-in date is required.\n';
    } else if (!checkIn.match(/\d{2}-\w{3}-\d{4}/)) {
      result += 'Check-in date is invalid.\n';
    } else if (jQuery.datepicker.parseDate('dd-M-yy', checkIn) < now) {
      result += 'Check-in date must be a future date.\n';
    }
  } catch (e) {
    result += 'Check-in date is erroneus.\n';
  }
  var checkOut = jQuery.trim(jQuery("#form-check_out").val());
  try {
    if (checkOut == "") {
      result += 'Check-out date is required.\n';
    } else if (!checkOut.match(/\d{2}-\w{3}-\d{4}/)) {
      result += 'Check-out date is invalid.\n';
    } else if (jQuery.datepicker.parseDate('dd-M-yy', checkOut) <= jQuery.datepicker
        .parseDate('dd-M-yy', checkIn)) {
      result += 'Check-out date must be later than check-in date.\n';
    } else if (((jQuery.datepicker.parseDate('dd-M-yy', checkOut) - jQuery.datepicker.parseDate('dd-M-yy', checkIn)) / 1000) > (60 * 60 *24 * 30)) {
	  result += 'The maximum stay allowed is 30 days. If you require a longer stay please contact us using our contact page.\n';	
    }
  } catch (e) {
    result += 'Check-out date is erroneus.\n';
  }

  return result;
}

function getScroll() {
  // compute page offset
  var scrOfY = 0;
  var scrOfX = 0;
  if (typeof (window.pageYOffset) == 'number') {
    // Netscape compliant
    scrOfY = window.pageYOffset;
    scrOfX = window.pageXOffset;
  } else {
    if (document.body && document.body.scrollTop) {
      // DOM compliant
      scrOfY = document.body.scrollTop;
      scrOfX = document.body.scrollLeft;
    } else {
      if (document.documentElement && document.documentElement.scrollTop) {
        // IE6 standards compliant mode
        scrOfY = document.documentElement.scrollTop;
        scrOfX = document.documentElement.scrollLeft;
      }
    }
  }
  return {
    'top' : scrOfY,
    'left' : scrOfX
  };
}

function ShowSplashScreen() {
  // hide scrollbar, embed, object & selects
  jQuery("body").css("overflow", "hidden");
  jQuery('embed,object,select').hide();
  var formCityName, formHotelName;
  // prepare values
  if (jQuery("#form-type").val() == "4") {
    // homepage + destinations
    formCityName = 'your custom selected location';
  } else {
    formCityName = jQuery("#form-city_ac").val();
  }

  // prepare hotel value
  if ($('form-hotel_id')) {
    if (($('form-hotelname')) && ($('form-hotel_id').value > 0))
      formHotelName = "the " + $('form-hotelname').value;
    else {
      formHotelName = 'hotels';
      $('form-hotel_id').value = null;
    }
  } else {
    formHotelName = 'hotels';
  }

  // prepare attraction value
  var formAttractionName = '';
  if ($('form-attraction_id') && $('form-attraction_name')
      && $('form-attraction_id').value > 0) {
    formAttractionName = " near " + $('form-attraction_name').value;
  }

  jQuery('#SplashScreen_CityName').text(formCityName + formAttractionName);
  jQuery('#SplashScreen_HotelName').text(formHotelName);
  jQuery('#SplashScreen_FromDate').text(jQuery("#form-check_in").val());
  jQuery('#SplashScreen_ToDate').text(jQuery("#form-check_out").val());

  // show splash page
  jQuery('#SplashScreenContainer').css("top", getScroll().top + "px").show();
}

function getParams() {
  var params = 'class=SearchResultsAjax';
  params += '&cityId=' + jQuery("#form-city").val();
  params += '&search_type=' + jQuery("#form-type").val();
  params += '&check_in=' + jQuery('#form-check_in').val();
  params += '&check_out=' + jQuery('#form-check_out').val();

  var $hotel = jQuery("#form-hotel_id");
  if ($hotel.length > 0) {
    params += '&hotel_id=' + $hotel.val();
  }

  var $attraction = jQuery("#form-attraction_id");
  if ($attraction.length > 0) {
    params += '&attraction_id=' + $attraction.val();
  }

  var roomNo = jQuery("#form-number_of_rooms").val();
  for ( var i = 1; i <= roomNo; i++) {
    var adultsNumber = jQuery("#form-adult_rooms_" + i).val();
    var childsNumber = jQuery("#form-child_rooms_" + i).val();

    params += '&rooms[' + i + '][adult]=' + adultsNumber;
    params += '&rooms[' + i + '][child]=' + childsNumber;

    if (adultsNumber == 2 && childsNumber == 0) {
      params += '&rooms[' + i + '][bed_type]='
          + jQuery("#form-bed_type_" + i).val();
    }

    for ( var n = 1; n <= childsNumber; n++) {
      params += '&rooms[' + i + '][childAge][' + n + ']='
          + jQuery("#form-child_age_" + i + "_" + n).val();
    }
  }

  return params;
}

function triggerSearch() {
  if (result = ValidateSearch()) {
    alert(result);
    return false;
  }

  if (jQuery("#gmap-tab").is(":visible")) {
    // rewriting map params
    jQuery("#form-type").val("4");
    jQuery("#form-city").val(jQuery.trim(jQuery("#form-gmap").val()));
  }
  ShowSplashScreen();

  var params = getParams();

  // launch search
  var searchFrame = createIframe('search-iframe');
  searchFrame.src = '/AjaxService.php?' + params + '&action=Search';

  if (!HTTPObj)
    createHTTPObj();

  do_rpc('/AjaxService.php?' + params + '&action=CountResults', null, '',
      redirect);

}

function counter() {
  pe.stop();

  var params = getParams();

  if (!HTTPObj)
    createHTTPObj();

  do_rpc('/AjaxService.php?' + params + '&action=CountResults', 'form-submit',
      '', redirect);
}

function redirect() {
  if (HTTPObj.readyState == 4 || HTTPObj.readyState == "complete") {
    if (HTTPObj.status == 200) {
      var searchData = HTTPObj.responseText.split('|');

      if (searchData[0] > 0 || searchData[1] == 1) {
        jQuery('#form').submit();
      } else {
        pe = new PeriodicalExecuter(counter, 1);
      }
      if (searchData[1] == -1) {
        // search error.. - stop interval!
        if (pe) pe.stop();
      }
    }
  }
}

function initAutocompleter(jq, data, focus) {
  var ac = jq[0].autocompleter;
  ac.setExtraParams(data);
  ac.flushCache();
  jq.removeAttr("disabled");
  if (focus) {
    jq.val("");
    jq.focus();
  }
}

function GetSearchRoomDiv(room) {
  var template = jQuery("#GetSearchRoomDiv_template").html();
  return template.replace(/template/g, room);
}

function restoreFromCache(roomData) {
  var tpl = '';
  for ( var i in roomData) {
    tpl += '<strong>Room #' + i + '</strong>: Adults: ' + roomData[i].adult + ', Children: ' + roomData[i].child;
    if (roomData[i].adult) {
      jQuery("#form-adult_rooms_" + i).val(roomData[i].adult);
    }
    if (roomData[i].child) {
      jQuery("#form-child_rooms_" + i).val(roomData[i].child).change();
      if (roomData[i].childAge) {
        tpl += ' [';
        var age = new Array();
        for ( var j in roomData[i].childAge) {
          jQuery("#form-child_age_" + i + "_" + j).val(roomData[i].childAge[j]);
          age.push(roomData[i].childAge[j] + 'yrs');
        }
        tpl += age.join(', ');
        tpl += ']';
      }
    }
    if (roomData[i].bed_type) {
      jQuery("#form-bed_type_" + i).val(roomData[i].bed_type).closest(
          ".hidden-element").removeClass("hidden-element").addClass(
          "showed-element");
      tpl += ', ' + jQuery("#form-bed_type_" + i+' option:selected').text();
    }
    tpl += '<br />';
  }
  jQuery('#room_template_info').html(tpl);
}

/**
 * Retrun numerical sufix if DOM element id
 * 
 * @param i_Object
 *            DOM element
 * @return string
 */
function getIdSufix(context) {
  return context.id.split('_').pop();
}

function showRooms(noOfRooms) {
  for ( var i = 1; i <= 10; i++) {
    var divObj = jQuery("#search-room_" + i);
    var container = jQuery("#search-room-container_" + i);

    if (i <= noOfRooms) {
      if (divObj.html() == '') {
        divObj.html(GetSearchRoomDiv(i));
      }
      jQuery("#search-room_" + i + " select").removeAttr("disabled");
      divObj.show();
      container.show();
      updateChildAge(i);
    } else {
      _removeChildAge(i);
      divObj.hide();
      container.hide();
      jQuery("#search-room_" + i + " select").attr("disabled", true);
    }
  }
  // homepage form only
  if (jQuery("#child-age-title select").filter(function(index) {
    return this.style.display == "inline";
  }).length > 0) {
    jQuery("#child-age-title,#child-age-header").show();
  } else {
    jQuery("#child-age-title,#child-age-header").hide();
  }
}

function _removeChildAge(roomNo) {
  var divObj = jQuery("#child-age-room-" + roomNo);
  if (divObj.html() != "") {
    divObj.css("display", "none");
    jQuery("#child-age-room-" + roomNo + " select").css("display", "none")
        .attr("disabled", true);
    jQuery("#child-age-room-" + roomNo + " span").css("display", "none");
  }
}

function updateChildAge(roomNo) {
  var childrenNo = jQuery("#form-child_rooms_" + roomNo).val();
  var divObj = jQuery("#child-age-room-" + roomNo);
  if (childrenNo && childrenNo != "0") {
    if (divObj.html() == "") {
      divObj.html(GetChildAgeRoomDiv(roomNo));
    }
    divObj.show();
    jQuery("#form-bed_type_" + roomNo).closest(".showed-element").removeClass(
        "showed-element").addClass("hidden-element");
    var ages = jQuery("#child-age-room-" + roomNo + " select");
    var spans = jQuery("#child-age-room-" + roomNo + " span");
    ages.slice(0, childrenNo).css("display", "inline").removeAttr("disabled");
    spans.slice(0, childrenNo).css("display", "inline");
    ages.slice(childrenNo).css("display", "none").attr("disabled", true);
    spans.slice(childrenNo).css("display", "none");
  } else {
    divObj.css("display", "none");
    jQuery("#child-age-room-" + roomNo + " select").css("display", "none")
        .attr("disabled", true);
    jQuery("#child-age-room-" + roomNo + " span").css("display", "none");
    if (jQuery("#form-adult_rooms_" + roomNo).val() == "2") {
      jQuery("#form-bed_type_" + roomNo).closest(".hidden-element")
          .removeClass("hidden-element").addClass("showed-element");
    }
  }
  // homepage form only
  if (jQuery("#child-age-title select").filter(function(index) {
    return this.style.display == "inline";
  }).length > 0) {
    jQuery("#child-age-title,#child-age-header").show();
  } else {
    jQuery("#child-age-title,#child-age-header").hide();
  }
}

function checkIfBedTypeFieldShouldBeDispalyed(select) {
  var roomNo = getIdSufix(select);
  if (jQuery(select).val() == "2"
      && jQuery("#form-child_rooms_" + roomNo).val() == "0") {
    jQuery("#form-bed_type_" + roomNo).closest(".hidden-element").removeClass(
        "hidden-element").addClass("showed-element");
  } else {
    jQuery("#form-bed_type_" + roomNo).closest(".showed-element").removeClass(
        "showed-element").addClass("hidden-element");
  }
}

function getContentBoxHeight()
{
    var contentBoxHeight = 400;  // default
    
    if ( typeof( window.innerHeight ) == 'number' ) 
        contentBoxHeight = window.innerHeight;
    else if ( document.documentElement && ( document.documentElement.clientHeight ) ) 
        contentBoxHeight = document.documentElement.clientHeight;
    else if( document.body && ( document.body.clientHeight ) ) 
        contentBoxHeight = document.body.clientHeight;
    
    if (contentBoxHeight > 480)
        contentBoxHeight -= 80;

	return contentBoxHeight;
}


