
  var search = new function() {

    /*
    @public
    */
    this.init = function() {
      $('#nextButton').bind('click', handleNextClick);
    }

    /*
    @private
    */
    function handleNextClick() {

       if(validate()) {

         // Transfer type
         var transferTypeDD = document.getElementById('direction');
         var transferType = transferTypeDD.options[transferTypeDD.selectedIndex].value;

         // Country
         var countryDD = document.getElementById('country');
         var country = countryDD.options[countryDD.selectedIndex].value;
         country = country.replace('/\s/g', '-');

         // Gateway
         var gatewayDD = document.getElementById('gateway');
         var gateway = gatewayDD.options[gatewayDD.selectedIndex].value;

         // Gateway
         var resortDD = document.getElementById('resort');
         var resort = resortDD.options[resortDD.selectedIndex].value;

         // Transfer date
         var transferDateDay = document.getElementById('date_date').value;
         var transferDateMonth = document.getElementById('date_month').value;
         var transferDateYear = document.getElementById('date_year').value;
         var transferDate = transferDateDay  +'-' + transferDateMonth + '-' + transferDateYear;

         // Flight arrival
         var flightArrivalHrsDD = document.getElementById('select8');
         var flightArrivalMinsDD = document.getElementById('select9');
         var flightArrivalHrs = flightArrivalHrsDD.options[flightArrivalHrsDD.selectedIndex].value;
         var flightArrivalMins = flightArrivalMinsDD.options[flightArrivalMinsDD.selectedIndex].value;
         var flightArrivalTime = flightArrivalHrs + flightArrivalMins;

         // Adults
         var adultsDD = document.getElementById('select14');
         var adults = adultsDD.options[adultsDD.selectedIndex].value;

         // Infants
         var infantsDD = document.getElementById('select15');
         var infants = infantsDD.options[infantsDD.selectedIndex].value;

         // Currency
         var currencyDD = document.getElementById('select20');
         if(currencyDD) {
           var currency = currencyDD.options[currencyDD.selectedIndex].value;
         }
         else {
           var currency = 'UKL';
         }

         var returnDD = document.getElementById('select16');
         var returnMode = returnDD.options[returnDD.selectedIndex].value;
         if(returnMode == 'N') {

           var returnDate = '';
           var returnTime = '';
         }
         else {

           // Return date
           var returnDateDay = document.getElementById('date2_date').value;
           var returnDateMonth = document.getElementById('date2_month').value;
           var returnDateYear = document.getElementById('date2_year').value;
           var returnDate = returnDateDay  +'-' + returnDateMonth + '-' + returnDateYear;

           // Return time
           var returnHrsDD = document.getElementById('select12');
           var returnMinsDD = document.getElementById('select13');
           var returnHrs = returnHrsDD.options[returnHrsDD.selectedIndex].value;
           var returnMins = returnMinsDD.options[returnMinsDD.selectedIndex].value;
           var returnTime = returnHrs + returnMins;
         }

         var searchURL = '/search-results/' + transferType + '/' + country + '_' + gateway + '/' + resort + '/' + transferDate + '/' + flightArrivalTime + '/' + returnDate + '/' + returnTime + '/' + adults + '/' + infants + '_' + currency + '/';
         window.location.href = searchURL;
       }
       return false;
    }

    /*
    @private
    */
    function validate() {

      // Country
      var countryDD  = document.getElementById('country');
      var countryVal = countryDD.options[countryDD.selectedIndex].value;
      if(countryVal == '' || countryVal == '-') {
        alert('You must select a country');
        countryDD.focus();
        return false;
      }

       // Gateway
      var gatewayDD  = document.getElementById('gateway');
      var gatewayVal = gatewayDD.options[gatewayDD.selectedIndex].value;
      if(gatewayVal == '') {
        alert('You must select an airport/resort');
        gatewayDD.focus();
        return false;
      }

      // Resort
      var resortDD  = document.getElementById('resort');
      var resortVal = resortDD.options[resortDD.selectedIndex].value;
      if(resortVal == '') {
        alert('You must select a resort');
        resortDD.focus();
        return false;
      }

      // Flight Time
      var flightHrsDD  = document.getElementById('select8');
      var flightMinsDD = document.getElementById('select9');
      var flightHrs = flightHrsDD.options[flightHrsDD.selectedIndex].value;
      var flightMins = flightMinsDD.options[flightMinsDD.selectedIndex].value;
      if(flightHrs == '--' || flightMins == '--') {
        alert('You must select a flight time');
        flightHrsDD.focus();
        return false;
      }

      // Number of adults/children
      var adultsDD  = document.getElementById('select14');
      var adultsVal = adultsDD.options[adultsDD.selectedIndex].value;
      if(adultsVal == '-') {
        alert('You must enter the number of adults/children');
        adultsDD.focus();
        return false;
      }

      return true;
    }

    /*
    Called when the transfer dates are changed by either someone
    keying in new values or selecting a date from the calendar.
    The method will set the return date to the transfer date plus
    seven days.

    @public
    */
    this.dateChanged = function() {

      // Returning?
      var returnSelect = document.getElementById('select16')
      if(returnSelect.options[returnSelect.selectedIndex].value == 'Y') {

        var d = parseInt(document.getElementById('date_date').value, 10);
        var m = parseInt(document.getElementById('date_month').value, 10);
        var y = parseInt(document.getElementById('date_year').value, 10);

        var dateObj = new Date();
        dateObj.setMonth(m-1);
        dateObj.setFullYear(y);
        dateObj.setDate(d+7);

        document.getElementById('date2_date').value = addLeadingZeros(dateObj.getDate());
        document.getElementById('date2_month').value = addLeadingZeros(dateObj.getMonth()+1);
        document.getElementById('date2_year').value = dateObj.getFullYear();
      }
    }

    /*
    @private
    */
    function addLeadingZeros(x) {
      if(x < 10) {
        x = '0' + x
      }

      return x;
    }
  }

  $(document).ready(search.init);