jQuery(document).ready(function($) {

  // superfish menus
  $('ul#main-nav, ul#aux-nav').superfish(
    { 
      delay:       1000,                           
      animation:   {opacity:'show'}, 
      speed:       'fast',                         
      autoArrows:  false,                          
      hoverClass	: 'sfHover',
      dropShadows: true                           
    }
  );

  // tabs (http://jqueryui.com/demos/tabs/)
  var side_box_tab_rotation_period = 8000;
  var animate_tabs = true;
  $("div#side-box-content").tabs({selected:3, fx: {opacity:'toggle', duration:'slow'}});
  $("div#side-box-content").tabs('rotate', side_box_tab_rotation_period);
  $("div#side-box-content").hover(
    function() {
      $(this).tabs('rotate', 0); // pause
    },
    function() {
      if (animate_tabs) {
        $(this).tabs('rotate', side_box_tab_rotation_period); // resume
      }
    }
  );
  $("ul#side-box-nav li a").bind('click', function(e){
    animate_tabs = false; 
    $("div#side-box-content").tabs('abort'); // abort rotating
  });
  

  // cycle (http://malsup.com/jquery/cycle/options.html)
  $("#large_promo-slides").cycle({
    fx: 'fade',
    next: '.large_promo',
    speed: 'slow',
    timeout: 20000
  });

  // colorbox (http://colorpowered.com/colorbox/)
  $("a.colorbox").colorbox();
  $("a.gallery_photo-link").colorbox({rel:'photo_gallery', photo:true});
    // group inline photo gallery
  $("div.lodging_thumbnails").each(function(i) {
    $(this).children("a.photo-link").attr("rel", 'group'+i);
    $("a.photo-link[rel='group"+i+"']").colorbox({photo:true, speed:200});
  });

  // equalize blocks.
  $.fn.v_justify = function(block_sel) {
    var min_height = 100;
    $(this).find(block_sel).each(function() {
      var element = $(this);
      if (element.height() > min_height) {
        min_height = element.height();
      }
    });
    $(this).find(block_sel).css({height: min_height+"px"});
  }


  var DAYINMILISECS = ((1000 * 60) * 60) * 24;

  // sidebar booking tabs
    // setup which one is selected
    var booking_widget_selected = $("div#booking_widget").attr('selected');
    var selected_list_item = $("div#booking_widget li a[href='#"+booking_widget_selected+"']").parent("li");
    var booking_widget_selected_index = $("div#booking_widget ul li").index(selected_list_item);
  $("div#booking_widget").tabs({selected:booking_widget_selected_index});


  $("input.calendar_date").datepicker({minDate:'+0', defaultDate:'+0', onSelect: function(dateText, inst){
      var booking_block = $(this).parents("div.booking-block");
      my_date = new Date(dateText);
      var daterange_element = booking_block.find("input.daterange");
      if ($(this).is("input.departuredate")) {
        // $(this).parents("div.booking-block").find("input.arrivaldate").datepicker('option', 'maxDate', my_date);
        if (daterange_element.get() && (daterange_element.val() > 0)) {
          var my_date = new Date($(this).val());
          var past_date = new Date(my_date.getTime() - (daterange_element.val() * DAYINMILISECS));
          $(this).parents("div.booking-block").find("input.arrivaldate").datepicker('setDate', past_date);
        }
      } else {
        if (daterange_element.get()) {
          // maybe this isn't so useful...
          //update_departure_from_daterange(daterange_element);
        } else {
          $(this).parents("div.booking-block").find("input.departuredate").datepicker('option', 'minDate', my_date);
        }
      }
    }
  });
  function update_departure_from_daterange(daterange_element){
    var date_range = parseInt(daterange_element.val());
    if (date_range >= 1) {
      var booking_block = daterange_element.parents("div.booking-block");
      my_date = new Date(booking_block.find("input.arrivaldate").val());
      future_date = new Date(my_date.getTime()+(date_range * DAYINMILISECS));
      booking_block.find("input.departuredate").datepicker('setDate', future_date);
    } else {
      daterange_element.val("0");
    }
  }
  $("input.daterange").keyup(function(e){
    update_departure_from_daterange($(this));
  });
        

  $("div#booking_widget a.booking-link").bind('click', function(e){
    var booking_block = $(this).parents("div.booking-block");
    var booking_url = $(this).attr("href"); // includes constants like language, salesid, etc.
    booking_block.find("input, select").each(function(){
      var my_name = $(this).attr("name");
      var my_value = '';
      if ($(this).is("input")) {
        my_value = $(this).val();
      } else {
        my_value = $(this).find("option:selected").val();
      }
      booking_url += "&"+my_name+"="+encodeURIComponent(my_value);
    });
    window.open(booking_url, '_blank');
    e.preventDefault();
  });


  // handle find airport code links
  var find_airport = function(e) {
    var airport_input = $(this).siblings("input.airport_name");
    var airport_link = $(this);
    if (airport_input.val()) {
      airportlookup_xml = $(this).attr('href');
      $.ajax({
        url: airportlookup_xml,
        data: {searchairport:airport_input.val()},
        dataType: 'xml',
        success: airport_link.attr("id") == "airport_departure-link" ? handle_departure_response : handle_arrival_response,
        error: function(XMLHttpRequest, textStatus, errorThrown){
          alert(XMLHttpRequest+"\n"+textStatus+":"+errorThrown);
        },
        complete: function(XMLHttpRequest, textStatus){
          //alert('complete : '+textStatus);
        }
      });
    } else {

      alert('Nothing was entered in the lookup field.');
    }
    e.preventDefault();
  };
  function handle_airport_response(data, textStatus, airport_link) {
    // show a list of found airport codes that the user can select
    var airport_input = airport_link.siblings("input.airport_name");
    x = data.getElementsByTagName("Airport");
    
    if (x.length == 0) {
      alert('No match found. Please try again.');
    }
    else {
      airport_input.after("<select name='"+airport_input.attr("name")+"' class='airport_name'></select>");
      var airport_select = airport_input.siblings("select.airport_name");
      airport_input.remove();
      for (i=0; i<x.length; i++) {
        code = x[i].getAttribute("Code");
        city = x[i].getAttribute("City");
        region = x[i].getAttribute("Region");
        country = x[i].getAttribute("Country");
        name = x[i].getAttribute("Name");

        region_or_country = region ? region : country;
        airport_select.append("<option value='"+code+"' displayValue='"+city+", "+region_or_country+"'>"+city+", "+region_or_country+"</option>");
        airport_select.append("<option value='"+code+"' displayValue='"+name+"'> &gt;&gt;"+code+" "+name+"</option>");
      }
      airport_link.html("Change Airport");
      airport_link.unbind('click', find_airport);
      airport_link.bind('click', change_airport);
    }
  }
  var handle_departure_response = function(data, textStatus){
    var airport_link = $("body").find("a#airport_departure-link");
    handle_airport_response(data, textStatus, airport_link);
  };
  var handle_arrival_response = function(data, textStatus){
    var airport_link = $("body").find("a#airport_arrival-link");
    handle_airport_response(data, textStatus, airport_link);
  };
  var change_airport = function(e) {
    var airport_link = $(this);
    var airport_select = airport_link.siblings("select.airport_name");
    airport_select.after("<input type='text' class='airport_name' name='"+airport_select.attr("name")+"' value='"+airport_select.find("option:selected").attr("displayValue")+"'>");
    airport_link.html("Find Airport");
    airport_select.remove();
    e.preventDefault();
    airport_link.unbind('click', change_airport);
    airport_link.bind('click', find_airport);
  };
  $("div#booking_widget a.find_airport-link").bind('click', find_airport );

  // people fields and daterange
  $("div#booking_widget input.people, div#booking_widget input.daterange").keydown(function(e){
    var number_of_people = parseInt($(this).val());
    if (!number_of_people) { number_of_people = 0 }
    if (e.keyCode == 38) { // up
      $(this).val(number_of_people+1);
    }
    if (e.keyCode == 40 && number_of_people>0) { // down
      $(this).val(number_of_people-1);
    }
  });
  // handle child ages form for lodging
  $("div#booking_widget div#lodging-booking input[name='childcount']").keyup(function(e){
    $("div#lodging-booking-childages").show();
    var number_of_children = parseInt($(this).val());
    /*
    if (e.keyCode == 38) {
      $(this).val(number_of_children+1);
      number_of_children = number_of_children+1;
    }
    if (e.keyCode == 40) {
      $(this).val(number_of_children-1);
      number_of_children = number_of_children-1;
    }
    */
      
    var existing_selects = $("select.childage-select").length+1;
    for (i=existing_selects; i<=number_of_children; i++) { // add any fields
      $("div#booking_widget div#lodging-booking select[name='child1age']").clone().appendTo($("div#booking_widget div#lodging-booking div#lodging-booking-childages"));
      $("div#booking_widget div#lodging-booking select.childage-select:last").attr("name", 'child'+i+'age');
    }
    // or
    for (i=existing_selects; i>number_of_children; i--) { // remove extra fields
      if (i==1) {
        // do nothing
      } else {
        $("div#booking_widget div#lodging-booking select[name='child"+i+"age']").remove();
      }
    }
    if (number_of_children==0) {
      $("div#lodging-booking-childages").hide();
    }

  });

});

$(window).load(function() {
  // resize elements here
  $("div#forecasts-group").v_justify("div.forecast-box");
});
