$(document).ready(function() {
	
	// Make general clicks on the mini deal card go to that deal's details page
	$('div.mini_deal_card > div.mini-card > div.left').livequery('click', function() {
		document.location.href = $(this).find('p.name > a').attr("href");
	});
	
	// Handle the Yes/No buttons and the deal extras line items
	$('input#yes_button').click(function() {
		$('div#deal_extras').show();
		$('input#yes_button').attr("disabled", "true");
		$('input#no_button').removeAttr("disabled"); 
	});
	
	$('input#no_button').click(function() {
		$('div#extras input[type=text]').val('');
		$('div#deal_extras').hide();
		$('input#yes_button').removeAttr("disabled");
		$('input#no_button').attr("disabled", "true");
	});
	
	// Limit Savings Finder to 9 choices
	$.each($('ul#savings_finder_choices li').slice(9), function() { $(this).children().hide(); });
	
	// handler to remove a deal extra
	$('.deal_extra_remove_button').livequery(
		function() {
			$(this).click(function() {
				if (confirm("Are you sure you want remove this extra?")) {
					$(this).parents('div.extra').remove();
				}
			});
		},
		function() {}
	);
	
	function check_hotel() {
    $.getJSON("/hotel/exists", 
							{ name: $('input#hotel_name').val() },
							function(json) {
								if (0 != json.hotel_id) {
									$('#deal_hotel_id').val(json.hotel_id).change();
									$('div#new_hotel_attributes').hide();
									$('div#deal_form_part_2').show();
									$('#regular_hotel_price_label').html('$' + json.rate).change();
									$('input#deal_name').focus();
								}	else { 
									$('#deal_hotel_id').val('').change();
									$('div#new_hotel_attributes').show();
									$('div#deal_form_part_2').hide();
								}
							} );
  }

	$('input#hotel_name').autocomplete("/hotels/auto_complete_for_hotel_name", 
																		 { matchContains:1, 
																			 delay:400,
																			 minChars:3, 
																			 matchSubset:false, 
																			 cacheLength:1, 
																			 selectFirst:true,
																			 max:20 });
	$('input#hotel_name').result(function(event, data, formatted) {
		check_hotel();
	});
	
  $('input#hotel_name').blur(check_hotel);
	
	$('form#new_deal').submit(function() {
		if (!($('#deal_hotel_id').val())) {
			$('input#hotel_name').blur();
			$('input#hotel_name').focus();
			return false;
		}
	});
	
	function reload_recaptcha() {
		if (typeof(Recaptcha) != 'undefined') {
			Recaptcha.reload();
		}
	}
	$('#new_comment').ajaxForm({ target: 'div#deal_comments', clearForm: true, success: reload_recaptcha });
  
	$('input#use_override_rate').click( function() {
		if (this.checked) {
			$('div#hotel_rate_override').slideDown(); 
		} else {
			$('div#hotel_rate_override').hide(); 
			// Remove values from the override fields
			$('input#deal_hotel_override_rate').val('');
			$('input#deal_hotel_override_description').val('');
		}
	});

	$('input#deal_weekends_only').click( function() {
		if (this.checked) {
			$('input#deal_weekdays_only').attr("disabled", "true"); 
		} else {
			$('input#deal_weekdays_only').removeAttr("disabled"); 
		}
	});
	$('input#deal_weekdays_only').click( function() {
		if (this.checked) {
			$('input#deal_weekends_only').attr("disabled", "true"); 
		} else {
			$('input#deal_weekends_only').removeAttr("disabled"); 
		}
	});
	
	var first_month_for_date_filter;
	var last_month_for_date_filter;
	var price_range_min;
	var price_range_max;
	var original_price_range_max;
	var price_range_cap;
	var price_range_capped_max;
	if ($('div#filters').length > 0) {
		first_month_for_date_filter = 0;
		last_month_for_date_filter = 18;

		price_range_min = parseInt($('#price_range_label_start').html().match(/^\$(\d+)$/)[1]);
	  price_range_max = parseInt($('#price_range_label_end').html().match(/^\$(\d+)$/)[1]);
		original_price_range_max = price_range_max;
		price_range_cap = 1000;
		price_range_capped_max = 1010;
		
		if (price_range_max > price_range_cap) {
			price_range_max = price_range_capped_max;
  	  $('span#price_range_label_end').html('$' + price_range_cap + '+');
		}
	}
	
	function get_handle_init_start_point() {
		var start_point = jQuery.url.param('start_month');
		if (start_point && (start_point >= first_month_for_date_filter) && (start_point < last_month_for_date_filter)) {
			return start_point;
		} else {
			return first_month_for_date_filter;
		}
	}

	function get_handle_init_end_point() {
		var end_point = jQuery.url.param('end_month');
		if (end_point && (end_point > first_month_for_date_filter) && (end_point <= last_month_for_date_filter)) {
			return end_point;
		} else {
			return last_month_for_date_filter;
		}
	}

	function update_deals() {
		if (production_environment()) {
			pageTracker._trackPageview('/filter/' + jQuery.param(get_deal_query_params()) + window.location.pathname);
		}
		
		// If we aren't on the first page of deals, then do a regular non-AJAX request
		var matches = document.location.href.match(/(.+)\/p\d+$/);
		if (matches) {
			document.location.href = matches[1] + "?" + jQuery.param(get_deal_query_params());
		} else {
			$("#filtering_status").click();
		  $('#deal_cards').load(document.location.pathname, get_deal_query_params(), function() { tb_remove(); });
		}
	}
	
	function get_start_month_for_date_filter() {
		return $('#date_range_slider').slider('values', 0); 
	}

	function get_end_month_for_date_filter() {
		return $('#date_range_slider').slider('values', 1); 
	}
	
	$('#date_range_slider').slider({
		step: 1,
		min: first_month_for_date_filter, 
		max: last_month_for_date_filter,
		range: true,
		slide: function(e, ui) {
      var start_value = get_start_month_for_date_filter(); 
      var end_value = get_end_month_for_date_filter();

		  $('span#date_range_label_start').html(get_date(start_value));
			// Subtract 1 from the month for display purposes, because we show the 
			// end month, but actually pass the next month to the backend API 
			// (because it uses the 1st day of that month as the end cap).
		  $('span#date_range_label_end').html(get_date(end_value-1));
		},
		change: update_deals,
		values: [ get_handle_init_start_point(), get_handle_init_end_point() ]
	});

	// Date picker setup
	$(".date_pick").datepicker({ 
	  showOn: "both", 
	  changeMonth: true,
      changeYear: true,
      showButtonPanel: true,
      numberOfMonths: 2,
	  buttonImage: "/images/calendar.gif", 
	  buttonImageOnly: true,
		dateFormat: 'M d, yy',
		onClose: function(date) {
			if (($(this).attr('id') == 'deal_end_date') && !($('#deal_booking_deadline').val())) {
				$('#deal_booking_deadline').val($(this).val());
			}
		}
	});	
	
	function get_min_price_for_filter() {
		return $('#price_range_slider').slider('values', 0);
	}
	function get_max_price_for_filter() {
		return $('#price_range_slider').slider('values', 1);
	}
	
	function update_price_slider_handles(e, ui) {
	  $('span#price_range_label_start').html('$' + get_min_price_for_filter());
	
		var end_value = get_max_price_for_filter();
		if (end_value > price_range_cap) {
  	  $('span#price_range_label_end').html('$' + price_range_cap + '+');
		} else {
  	  $('span#price_range_label_end').html('$' + end_value);
		}
	}
	
  $('#price_range_slider').slider({
  	step: 10,
  	range: true,
  	min: price_range_min, 
  	max: price_range_max,
  	change: update_deals,
  	values: [ price_range_min, price_range_max ],
  	slide: update_price_slider_handles
  });

	$('#nights_required_filter').change(function() {
		update_deals();
	});

	$('input[name=filter_rating]').click(function() {
		var no_individual_ratings_checked = ($("input[name=filter_rating]:checked").length === 0);
		set_hotel_all_rating_checked(no_individual_ratings_checked);
		update_deals();
	});

	$('input[name=filter_rating_all]').click(function(event) {
		set_hotel_all_rating_checked(event.target.checked);
		update_deals();
	});

	$('input[name=filter_tag]').click(function() {
		var no_individual_tags_checked = ($("input[name=filter_tag]:checked").length === 0);
		set_any_tag_checked(no_individual_tags_checked);
		update_deals();
	});

	$('input[name=filter_tag_Any]').click(function(event) {
		set_any_tag_checked(event.target.checked);
		update_deals();
	});
	
	$('p#show_all_tags').click(function(event) {
		$('p#show_all_tags').hide();
		$('div#remaining_tags').show();
	});
	$('p#show_fewer_tags').click(function(event) {
		$('div#remaining_tags').hide();
		$('p#show_all_tags').show();
		$('#filter_tags')[0].scrollIntoView(true);
	});

	$('#sort_select').livequery('change', update_deals);


	// Ajaxify pagination links on filtered pages
	$('div.pagination > a').livequery(function() {
		// If the page is using filtering, then respond to pagination page links via
		// AJAX request, adding in filtering params, etc.
		if (filter_or_sort_in_use()) {
			$(this).click(function() {
				$('#deal_cards').load($(this).attr('href'), get_deal_query_params(), function() { tb_remove(); window.scroll(0,0); });
				return false;
			});
		}
	});
	
	function set_mini_card_info_links_opacity(container, opacity) {
		var favorite_link = container.find('span.mini_card_favorite_link');
		var comment_link  = container.find('span.mini_card_comment_link');
		if (comment_link) {
			favorite_link.css('opacity', opacity); 
			comment_link.css('opacity', opacity); 
		}
	}
	

	$('div.mini_deal_card').livequery(function() {
		if ($(this).find('span.mini_card_comment_link')) {
			$(this).hover(
				function() { set_mini_card_info_links_opacity($(this), 1.0); }, 
				function() { set_mini_card_info_links_opacity($(this), 0.4); });
		}
	});
	
	function month_name(month) {
    return ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'][month];
  }
  function get_date(offset) {
		if (offset == 0) {
		  return 'Today';
		}
		
    var date = new Date();
    date.setMonth(date.getMonth() + offset, 1);

    return '' + month_name(date.getMonth()) + ", " + date.getFullYear();
  }

	function date_filter_in_use() {
		return (get_start_month_for_date_filter() != first_month_for_date_filter || get_end_month_for_date_filter() != last_month_for_date_filter);
	}

	function price_filter_in_use() {
		return (get_min_price_for_filter() != price_range_min || get_max_price_for_filter() != price_range_max);
	}

	function hotel_all_rating_checked() {
		return $('input[name=filter_rating_all]')[0].checked;
	}

	function set_hotel_all_rating_checked(check) {
		$('input[name=filter_rating_all]')[0].checked = check;
		$('input[name=filter_rating_all]')[0].disabled = check;
		if (check) {
			$('input[name=filter_rating]').each(function() {
				$(this).removeAttr('checked');
			});
		}
	}
	
	function set_any_tag_checked(check) {
		$('input[name=filter_tag_Any]')[0].checked = check;
		$('input[name=filter_tag_Any]')[0].disabled = check;
		if (check) {
			$('input[name=filter_tag]').each(function() {
				$(this).removeAttr('checked');
			});
		}
	}
	
	function min_nights_filter_in_use() {
		return ($('#nights_required_filter').val() != 0);
	}

	function hotel_rating_filter_in_use() {
		if ($('input[name=filter_rating_all]').length > 0) {
			return !hotel_all_rating_checked();
		}
	}		
	
	function tags_all_checked() {
		return $('input[name=filter_tag_Any]')[0].checked;
	}
	
	function tags_filter_in_use() {
		if ($('input[name=filter_tag_Any]').length > 0) {
			return !tags_all_checked();
		}
	}

	function sort_in_use() {
		return ($('#sort_select').val() != 'dealrank');
	}

	function filter_or_sort_in_use() {
		return (price_filter_in_use() || date_filter_in_use() || min_nights_filter_in_use() || 
						hotel_rating_filter_in_use() || tags_filter_in_use() || sort_in_use());
	}

	function get_deal_query_params() {
		params = { sort: $('#sort_select').val() };
		
		if ($('div#filters').length) {
  		if (date_filter_in_use()) {
  			params.start_month = get_start_month_for_date_filter();
  			params.end_month = get_end_month_for_date_filter();
  		}
  		if (price_filter_in_use()) {
  			params.min_price = get_min_price_for_filter();
  			params.max_price = get_max_price_for_filter();
  			if (params.max_price > price_range_cap) {
  				params.max_price = original_price_range_max;
  			}
  		}
  		if (min_nights_filter_in_use()) {
  			params.min_nights = $('#nights_required_filter').val();
  		}
  		if (hotel_rating_filter_in_use()) {
  			params.hotel_rating = "";
  			$("input[name=filter_rating]:checked").each(function() {
  				params.hotel_rating += $(this).val() + ",";
  			});
  		}

  		if (tags_filter_in_use()) {
  			params.tag_list="";
  			$("input[name=filter_tag]:checked").each(function() {
  				params.tag_list += $(this).val() + ",";
  			});
  		}
		}

		return params;
	}
	
	function city_for_priceline_and_hotwire() {
		var city = $('input#citySearch').val();
		if ($('#searchStateCode').val() !== undefined) {
			city += "," + $('#searchStateCode').val();
		}
		else if ($('#searchCountryCode').val() !== undefined) {
			city += "," + $('#searchCountryCode').val();
		}
		city = city.replace(/\s/, '%20');
		return city;
	}
	
	var expedia_popunder;
	var EXPEDIA_WINDOW_NAME = "Expedia";
	var tripadvisor_popunder;
	var TRIPADVISOR_WINDOW_NAME = "TripAdvisor";
  var orbitz_popunder;
  var ORBITZ_WINDOW_NAME = "Orbitz";
  var hotelscombined_popunder;
  var HOTELSCOMBINED_WINDOW_NAME = "Hotelscombined";
  var bookit_popunder;
  var BOOKIT_WINDOW_NAME = "Bookit";
  var hotwire_popunder;
  var HOTWIRE_WINDOW_NAME = "Hotwire";
  var priceline_popunder;
  var PRICELINE_WINDOW_NAME = "Priceline";
  var travelocity_popunder;
  var TRAVELOCITY_WINDOW_NAME = "Travelocity";
  var bookingbuddy_popunder;
  var BOOKINGBUDDY_WINDOW_NAME = "BookingBuddy";
  var bookingwiz_popunder;
  var BOOKINGWIZ_WINDOW_NAME = "BookingWiz";
  var hp_popunder;
  var HOTELPLANNER_WINDOW_NAME = "HotelPlanner";
  var hotelscom_popunder;
  var HOTELSCOM_WINDOW_NAME = "HotelsCom";
  var travelticker_popunder;
  var TRAVELTICKER_WINDOW_NAME = "TravelTicker";
  var bookingcom_popunder;
  var BOOKINGCOM_WINDOW_NAME = "BookingCom";
  
  function popunder_window_properties(coordinates) {
    var size = coordinates.size();
    var pos = coordinates.coordinates();
    return "location=yes, toolbar=yes, menubar=yes, scrollbars=yes, resizable=yes, status=yes, " + 
           "height=" + size.h + ", width=" + size.w + ", top=" + pos.y + "px, left=" + pos.x + "px";
  }
  
  function check_popup_blocking(win, coords) {
    if(!win || !win.top) {
      coords.undo();
      return false;
    }
    return true;
  }
  
  function popupHotelscombined(coors) {
    var checkin = $('input#hotelCheckin').datepicker('getDate');
    var checkout = $('input#hotelCheckout').datepicker('getDate');
    
    var hotelscombined_url = "http://www.hotelscombined.com/Search.aspx" +
                             "?search=" + $('input#citySearch').val().replace(/\s/, '%20') + 
                             "&checkin=" + $.datepicker.formatDate("mm/dd/yy", checkin) + 
                             "&checkout=" + $.datepicker.formatDate("mm/dd/yy", checkout) + 
                             "&languageCode=EN&a_aid=11535&Adults=" + $('select#guests').val() + 
                             "&Rooms="+ $('select#rooms').val();
                             
    // Add state or country params, if present, and if the city has not been changed
    if ($('input#citySearch').val() === $('input#original_city').val()) {
      if ($('#searchStateCode').get(0)) {
        hotelscombined_url += "&stateCode=" + $('#searchStateCode').val();
      }
      if ($('#searchCountryCode').get(0)) {
        hotelscombined_url += "&countryCode=" + $('#searchCountryCode').val();
      }
    }
                 
    hotelscombined_popunder = window.open(hotelscombined_url, HOTELSCOMBINED_WINDOW_NAME, popunder_window_properties(coors));
    return check_popup_blocking(hotelscombined_popunder, coors);
  }

  function popupExpedia(coors) {
    var checkin = $('input#hotelCheckin').datepicker('getDate');
    var checkout = $('input#hotelCheckout').datepicker('getDate');
    
    var city = $('input#citySearch').val();
    if ($('#searchStateCode').val() !== undefined) {
      city += "," + $('#searchStateCode').val();
    }
    city = city.replace(/\s/, '%20');
    num_guests = parseInt($('select#guests').val());
    num_rooms = parseInt($('select#rooms').val());
        
    var expedia_url = "http://clk.atdmt.com/TC2/go/185714791/direct/01/?href=http://www.expedia.com/pubspec/scripts/eap.asp?GOTO=HOTSEARCH&SearchType=Destination" +
                      "&CityName=" + city +
                      "&InDate=" + $.datepicker.formatDate("mm/dd/yy", checkin) +
                      "&OutDate=" + $.datepicker.formatDate("mm/dd/yy", checkout) +
                      "&NumRoom=" + num_rooms;
                      
    if (num_rooms > 1) {
      // ensure we have at least as many guests as we have rooms
      if (num_guests < num_rooms) num_guests = num_rooms;
      
      guests_per_room = Math.floor(num_guests / num_rooms);
      extra_guests = num_guests % num_rooms;

      for (var room_number = 1; room_number <= num_rooms; room_number++) {
        room_label = room_number > 1 ? room_number : '';

        guests_for_this_room = guests_per_room;
        if (extra_guests > 0) {
          guests_for_this_room += 1;
          extra_guests -= 1;
        }

        expedia_url += "&NumAdult" + room_label + "=" + guests_for_this_room + "&NumChild" + room_label + "=0";
      }
    }
    else {
      expedia_url += "&NumChild=0&NumAdult=" + num_guests;
    }
    
    expedia_url += "&olacid=BD.dealbase.Comp.Hotel.HotelPreChecked.November2009Campaign";
        
    expedia_popunder = window.open(expedia_url, EXPEDIA_WINDOW_NAME, popunder_window_properties(coors));
    return check_popup_blocking(expedia_popunder, coors);
  }

  function popupTripAdvisor(coors) {
    var checkin = $('input#hotelCheckin').datepicker('getDate');
    var checkout = $('input#hotelCheckout').datepicker('getDate');
    
    var city = $('input#citySearch').val();
    if ($('#searchStateCode').val() !== undefined) {
      city += "," + $('#searchStateCode').val();
    }
    city = city.replace(/\s/, '%20');
        
    var tripadvisor_url = "http://www.tripadvisor.com/HACSearch?m=12190" +
                          "&q=" + city + 
                          "&inDay=" + checkin.getDate() + 
                          "&inMonth=" + $.datepicker.formatDate("mm%2Fyy", checkin) + 
                          "&outDay=" + checkout.getDate() + 
                          "&outMonth=" + $.datepicker.formatDate("mm%2Fyy", checkout) + 
                          "&adults=" + $('select#guests').val();
    
    tripadvisor_popunder = window.open(tripadvisor_url, TRIPADVISOR_WINDOW_NAME, popunder_window_properties(coors));
    return check_popup_blocking(tripadvisor_popunder, coors);
  }
  
  function popupOrbitz(coors) {
    var checkin = $('input#hotelCheckin').datepicker('getDate');
    var checkout = $('input#hotelCheckout').datepicker('getDate');
    
    var orbitz_city = $('input#citySearch').val();
    if ($('#searchStateCode').val() !== undefined) {
      orbitz_city += "+" + $('#searchStateCode').val();
    }
    if ($('#searchCountryCode').val() !== undefined) {
      orbitz_city += "+" + $('#searchCountryCode').val();
    }
    orbitz_city = orbitz_city.replace(/\s/, '+');
    
    var month_in = $.datepicker.formatDate("M+yy", checkin);
    var month_out = $.datepicker.formatDate("M+yy", checkout);
    var day_in = checkin.getDate();
    var day_out = checkout.getDate();
    
    var orbitz_url = "http://www.orbitz.com/App/ValidateHotelSearch?keywordPIB=" + orbitz_city + "&monthInPIB=" + 
                     month_in + "&monthOutPIB=" + month_out + "&dayInPIB=" + day_in + "&dayOutPIB=" + day_out;
    var full_url = "http://ad.doubleclick.net/clk;212511051;33908897;e?" + orbitz_url + "&gcid=C11287x748&WT.mc_id=o_db_hotsearch&WT.mc_ev=click&DCSext.mc_kw=";
    
    orbitz_popunder = window.open(full_url, ORBITZ_WINDOW_NAME, popunder_window_properties(coors));
    return check_popup_blocking(orbitz_popunder, coors);
  }
  
  function popupBookit(coors) {
    var checkin = $('input#hotelCheckin').datepicker('getDate');
    var checkout = $('input#hotelCheckout').datepicker('getDate');

    var bookit_city = $('input#bookit_city').val();
    bookit_city = bookit_city.replace(/\s/, '%20');
    var bookit_subcampaign = $('input#bookit_subcampaign').val();
    var num_rooms = $('select#rooms').val();
    var num_adults = $('select#guests').val();
    var adults_per_rooms = '';
    
    if (num_rooms === '1') {
      adults_per_rooms = "&ap1=" + num_adults + "&mp1=0";
    } 
    else if (num_rooms === '2') {
      if (num_adults < '3') {
        adults_per_rooms = "&ap1=1&ap2=1&mp1=0&mp2=0";
      } else {
        adults_per_rooms = "&ap1=2&ap2=1&mp1=0&mp2=0";
      }
    } 
    else {  // 3 rooms
      adults_per_rooms = "&ap1=1&ap2=1&ap3=1&mp1=0&mp2=0&mp3=0";
    }

    var bookit_url = "http://from.bookit.com/from_hotels_results.php?hotelTo=" + bookit_city +
                     "&fd=" + $.datepicker.formatDate("mm/dd/yy", checkin) +
                     "&td=" + $.datepicker.formatDate("mm/dd/yy", checkout) + 
                     "&rm=" + num_rooms + adults_per_rooms + 
                     "&GCID=C30626x108-" + bookit_subcampaign + "&utm_campaign=" + bookit_subcampaign + "&utm_content=hotel" +
                     "&utm_source=Deal%20Base&utm_medium=VS&utm_term=none";
                    
    var bookit_popunder = window.open(bookit_url, BOOKIT_WINDOW_NAME, popunder_window_properties(coors));
    return check_popup_blocking(bookit_popunder, coors);
  }
  
  function popupHotwire(coors) {
    var checkin = $('input#hotelCheckin').datepicker('getDate');
    var checkout = $('input#hotelCheckout').datepicker('getDate');

    var hotwire_url = "http://www.hotwire.com/hotel/search-options.jsp?sid=S291&bid=B311110&inputId=hotel-index&destCity=" +
                      city_for_priceline_and_hotwire() + "&startDay=" + checkin.getDate() + "&startMonth=" + (checkin.getMonth()+1) +
                      "&endDay=" + checkout.getDate() + "&endMonth=" + (checkout.getMonth()+1);
                  
    hotwire_popunder = window.open(hotwire_url, HOTWIRE_WINDOW_NAME, popunder_window_properties(coors));
    return check_popup_blocking(hotwire_popunder, coors);
  }
  
  function popupPriceline(coors) {
    var checkin = $('input#hotelCheckin').datepicker('getDate');
    var checkout = $('input#hotelCheckout').datepicker('getDate');

    var priceline_url = "http://www.priceline.com/qp.asp?productid=5&city=" + city_for_priceline_and_hotwire() +
                        "&rooms=1&checkindate=" + $.datepicker.formatDate("mm/dd/yy", checkin) + 
                        "&checkoutdate=" + $.datepicker.formatDate("mm/dd/yy", checkout) + 
                        "&refid=PLDEALBASE&refclickid=HOTELSEARCH";
                        
    var priceline_popunder = window.open(priceline_url, PRICELINE_WINDOW_NAME, popunder_window_properties(coors));
    return check_popup_blocking(priceline_popunder, coors);
  }
  
  function popupTravelocity(coors) {
    var checkin = $('input#hotelCheckin').datepicker('getDate');
    var checkout = $('input#hotelCheckout').datepicker('getDate');

    var travelocity_city = $('input#citySearch').val();
    if ($('#searchStateCode').val() !== undefined) {
      travelocity_state = "&state=" + $('#searchStateCode').val();
    } else {
      travelocity_state = '';
    }
    
    var month_in = $.datepicker.formatDate("M+yy", checkin);
    var month_out = $.datepicker.formatDate("M+yy", checkout);
    var day_in = checkin.getDate();
    var day_out = checkout.getDate();
    
    var travelocity_url = "http://travel.travelocity.com/hotel/HotelCobrand.do?Service=TRAVELOCITY&searchPath=hots&old_cb=N&mode=1&x=53&y=14&pax_cnt=2" +
                          "&city=" + travelocity_city + travelocity_state + 
                          "&dateLeavingMonth=" + (checkin.getMonth()+1) + "&dateLeavingDay=" + checkin.getDate() +
                          "&dateReturningMonth=" + (checkout.getMonth()+1) + "&dateReturningDay=" + checkout.getDate();
    var full_url = travelocity_url + "&WA1=03010&WA2=215966749&WA3=38362373&WA4=0&WA5=1653085&WA6=782157;";
    
    travelocity_popunder = window.open(full_url, TRAVELOCITY_WINDOW_NAME, popunder_window_properties(coors));
    return check_popup_blocking(travelocity_popunder, coors);
  }
  
  function popupBookingWiz(coors) {
    var bookingwiz_url = "http://www.bookingwiz.com/iframe_sb_redirect.asp?" +
                         "singlemenu=hotel&process=referrer" +
                         "&fm_mic=04grsou" +
                         "&city1=" + $('input#citySearch').val().replace(/\s/, '%20') +
                         "&fm_datecalc=0" +
                         "&date1=" + $.datepicker.formatDate("mm/dd/yy", $('input#hotelCheckin').datepicker('getDate')) +
                         "&date2=" + $.datepicker.formatDate("mm/dd/yy", $('input#hotelCheckout').datepicker('getDate')) +
                         "&adults=" + $('select#guests').val() + "&children=0" +
                         "&rooms=" + $('select#rooms').val();
        
    bookingwiz_popunder = window.open(bookingwiz_url, BOOKINGWIZ_WINDOW_NAME, popunder_window_properties(coors));
    return check_popup_blocking(bookingwiz_popunder, coors);
  }
  
  function popupBookingbuddy(coors) {
    var checkin = $('input#hotelCheckin').datepicker('getDate');
    var checkout = $('input#hotelCheckout').datepicker('getDate');
    var bookingbuddy_url = "http://rd.bookingbuddy.com/?r=bbs_dealbase_ros_unchecked-box-h_001" +
                           "&arrival_city=" + $('input#citySearch').val() +
                           "&num_rooms=" + $('select#rooms').val() +
                           "&num_travelers=" + $('select#guests').val() +
                           "&arrival_month=" + $.datepicker.formatDate("M yy", checkin) + 
                           "&arrival_day=" + checkin.getDate() + 
                           "&departure_month=" + $.datepicker.formatDate("M yy", checkout) + 
                           "&departure_day=" + checkout.getDate();
                        
    bookingbuddy_popunder = window.open(bookingbuddy_url, BOOKINGBUDDY_WINDOW_NAME, popunder_window_properties(coors));
    return check_popup_blocking(bookingbuddy_popunder, coors);
  }
  
  function popupHotelPlanner(coors) {
    var checkin = $('input#hotelCheckin').datepicker('getDate');
    var checkout = $('input#hotelCheckout').datepicker('getDate');
    var hp_city = $('input#citySearch').val();
    if ($('#searchStateCode').val() !== undefined) {
      hp_city += "+" + $('#searchStateCode').val();
    }
    hp_city = hp_city.replace(/\s/, '+');
    
    var hp_url = "http://www.hotelplanner.com/?sc=dealbase&CheckIn=" + 
                 $.datepicker.formatDate("mm/dd/yy", checkin) + 
                 "&CheckOut=" +  $.datepicker.formatDate("mm/dd/yy", checkout) + "&City=" + hp_city;
                        
    hp_popunder = window.open(hp_url, HOTELPLANNER_WINDOW_NAME, popunder_window_properties(coors));
    return check_popup_blocking(hp_popunder, coors);
  }
  
  function popupHotelsCom(coors) {
    var checkin = $('input#hotelCheckin').datepicker('getDate');
    var checkout = $('input#hotelCheckout').datepicker('getDate');
    if ($('#searchStateCode').val() !== undefined) {
      state = $('#searchStateCode').val();
    } else {
      state = '%20';
    }
    if ($('#searchCountryCode').val() !== undefined) {
      country = $('#searchCountryCode').val();
    } else {
      country = '%20';
    }

    var hotelscom_url = "http://travel.ian.com/index.jsp?pageName=hotSearch&cid=240203&validateCity=true&validateDates=true&submitted=true&avail=true&propertyType=A&mode=2" +
                        "&city=" + $('input#citySearch').val() + 
                        "&stateProvince=" + state + "&country=" + country +
                        "&arrivalMonth=" + checkin.getMonth() + "&arrivalDay=" + checkin.getDate() + 
                        "&departureMonth=" + checkout.getMonth() + "&departureDay=" + checkout.getDate() + 
                        "&numberOfRooms=" + $('select#rooms').val() + "&room-0-adult-total=" + $('select#guests').val();
                                          
    hotelscom_popunder = window.open(hotelscom_url, HOTELSCOM_WINDOW_NAME, popunder_window_properties(coors));
    return check_popup_blocking(hotelscom_popunder, coors);
  }
  
  function popupTravelTicker(coors) {
    var checkin = $('input#hotelCheckin').datepicker('getDate');
    var checkout = $('input#hotelCheckout').datepicker('getDate');
      
    var dest = $('input#citySearch').val();
    if ($('#searchStateCode').val() !== undefined) {
      dest += "," + $('#searchStateCode').val();
    } else if ($('#searchCountryCode').val() !== undefined) {
      dest += "," + $('#searchCountryCode').val();
    }
    dest = dest.replace(/\s/, '+');

    var travelticker_url = "http://www.travel-ticker.com/category.jsp?actionType=1&categoryType=Type&categoryName=Hotels&vert=hotel&sid=S291&bid=B311497" +
                           "&dest=" + dest + 
                           "&startDate=" + $.datepicker.formatDate("mm/dd/yy", checkin) + "&endDate=" + $.datepicker.formatDate("mm/dd/yy", checkout) + 
                           "&numRooms=" + $('select#rooms').val() + "&noOfAdults=" + $('select#guests').val();
                        
    travelticker_popunder = window.open(travelticker_url, TRAVELTICKER_WINDOW_NAME, popunder_window_properties(coors));
    return check_popup_blocking(travelticker_popunder, coors);
  }
  
  function popupBookingCom(coors) {
    var checkin = $('input#hotelCheckin').datepicker('getDate');
    var checkout = $('input#hotelCheckout').datepicker('getDate');
      
    bookingcom_ufi_city_code = $('input#bookingcom_city').val();
    
    var bookingcom_url = "http://www.booking.com/searchresults.html?aid=328224&do_availability_check=1" +
                         "&city=" + bookingcom_ufi_city_code + 
                         "&checkin_monthday=" + checkin.getDate() + "&checkin_year_month=" + $.datepicker.formatDate("yy-mm", checkout) + 
                         "&checkout_monthday=" + checkout.getDate() + "&checkout_year_month=" + $.datepicker.formatDate("yy-mm", checkout) + 
                         "&label=dealb-CI_" + bookingcom_ufi_city_code;
                        
    bookingcom_popunder = window.open(bookingcom_url, BOOKINGCOM_WINDOW_NAME, popunder_window_properties(coors));
    return check_popup_blocking(bookingcom_popunder, coors);
  }
  
  
  function launchSearch(site,win,popupFunction,coors) {
    if(popupFunction(coors)) {
      //track window if opened succesfully
      $(".modal_content")
      .append("<div class='button_group'><span style='display:block;height:28px;line-height:28px;float:right;margin-bottom:10;'>Search Launched</span></div><label>" + site + "</label>");
      return site + "/";
    } else {
      if($(".modal_box").length==0) {
        $('#db_search_widget').modal({"opennow":true,"left":"10","hideonboxclick":false,"width":"300px"});
      }
      $(".modal_box .cont")
      .append("<div class='button_group'><button class='orange_button' id='" + site + "' type='button' style='float:right;margin-bottom:10;'>Search</button></div><label>" + site + "</label>");
      $(".modal_box .cont button#" + site).click(function(){
        $(this).replaceWith("<span style='display:block;height:28px;line-height:28px;float:right;margin-bottom:10;'>Search Launched</span>");
          if(!win||!win.top) {
            popupFunction(coors);
          }
          if (production_environment()) {
            pageTracker._trackPageview('/metasidebar/' + site + window.location.pathname);
          }
          return false;
      });
      return "";
    }
  }
  
  function Positioning() {
    if($.browser.msie) {
      this.x = 310;
      this.y = 40;
    } else {
      this.x = 40;
      this.y = 40;
    }
    this.w = ((screen.width - this.x) * 0.8) > 1024?1024:(screen.width - this.x) * 0.8;
    this.h = ((screen.height - this.y) * 0.6) > 800?800:(screen.height - this.y) * 0.6;
    this.offset = 40;
  }
  
  Positioning.prototype = {
    coordinates: function(){
      this.x += this.offset;
      this.y += this.offset;
      return {x:this.x,y:this.y};
    },
    size: function(){
      return {w:this.w,h:this.h};
    },
    undo: function(){
      this.x -= this.offset;
      this.y -= this.offset;
    }
  };
  
  $("#metasearch_hotelplanner").click(function(){
    return false;
  });
  
  function updateSearchOptions() {
    var val = $("select#rooms").val();
    if(val==="5") {
      $("#db_search_widget li").hide();
      //$("#db_search_widget li.hotelplanner-searchoption input").attr("checked","checked");
      $("#db_search_widget li.hotelplanner-searchoption input").attr("checked",true);
      $("#db_search_widget .hotelplanner-searchoption").show();
    } else {
      $("#db_search_widget li").show();
      $("#db_search_widget li.hotelplanner-searchoption input").removeAttr("checked");
      $("#db_search_widget .hotelplanner-searchoption").hide();
    }
  }
  
  updateSearchOptions();
  
  $("select#rooms").livequery('change', updateSearchOptions);
  
  // Savings Finder/meta search widget JS
  $('#metasearch_button').livequery(function() {
    $('input#citySearch').example(function() {
      return $(this).attr('value');
    });

    $('#metasearch_button').click(function() {
      
      //validate the search
      var checkin = $('input#hotelCheckin').datepicker('getDate');
      var checkout = $('input#hotelCheckout').datepicker('getDate');
      if($('input#citySearch').val()=='') {
        alert("You must enter a destination.");
        return false;
      }
      
      if($('input#hotelCheckin').val()==''||$('input#hotelCheckin').val()=='mm/dd/yyyy') {
        alert("You must select a check in date.");
        return false;
      }

      if($('input#hotelCheckout').val()==''||$('input#hotelCheckout').val()=='mm/dd/yyyy') {
        alert("You must select a check out date.");
        return false;
      }

      if(($('input#metasearch_expedia').is(':checked'))===false && ($('input#metasearch_tripadvisor').is(':checked'))===false && ($('input#metasearch_priceline').is(':checked'))===false && ($('input#metasearch_hotwire').is(':checked'))===false && ($('input#metasearch_orbitz').is(':checked'))===false && ($('input#metasearch_bookit').is(':checked'))===false && ($('input#metasearch_hotelscombined').is(':checked'))===false && ($('input#metasearch_travelocity').is(':checked'))===false && ($('input#metasearch_bookingwiz').is(':checked'))===false && ($('input#metasearch_bookingbuddy').is(':checked'))===false && ($('input#metasearch_hotelplanner').is(':checked'))===false && ($('input#metasearch_hotelscom').is(':checked'))===false && ($('input#metasearch_travelticker').is(':checked'))===false && ($('input#metasearch_bookingcom').is(':checked'))===false) {
        alert("You must select at least 1 site to search.");
        return false;
      }

      if(!checkin||!checkout) {
        alert("The date you entered was not recognized.");
        return false;
      }

      $(".modal_box").remove();
      
      var coors = new Positioning();
      var trackerString = "";
      //popup windows
      if(($('input#metasearch_hotelplanner').is(':checked'))) {
        trackerString += launchSearch(HOTELPLANNER_WINDOW_NAME,hp_popunder,popupHotelPlanner,coors);
      } 
      else {
        if(($('input#metasearch_expedia').is(':checked'))) {
          trackerString += launchSearch(EXPEDIA_WINDOW_NAME,expedia_popunder,popupExpedia,coors);
        }
        if(($('input#metasearch_tripadvisor').is(':checked'))) {
          trackerString += launchSearch(TRIPADVISOR_WINDOW_NAME,tripadvisor_popunder,popupTripAdvisor,coors);
        }
        if(($('input#metasearch_orbitz').is(':checked'))) {
          trackerString += launchSearch(ORBITZ_WINDOW_NAME,orbitz_popunder,popupOrbitz,coors);
        }
        if(($('input#metasearch_priceline').is(':checked'))) {
          trackerString += launchSearch(PRICELINE_WINDOW_NAME,priceline_popunder,popupPriceline,coors);
        }
        if(($('input#metasearch_travelocity').is(':checked'))) {
          trackerString += launchSearch(TRAVELOCITY_WINDOW_NAME,travelocity_popunder,popupTravelocity,coors);
        }
        if(($('input#metasearch_hotwire').is(':checked'))) {
          trackerString += launchSearch(HOTWIRE_WINDOW_NAME,hotwire_popunder,popupHotwire,coors);
        }
        if(($('input#metasearch_bookingwiz').is(':checked'))) {
          trackerString += launchSearch(BOOKINGWIZ_WINDOW_NAME,bookingwiz_popunder,popupBookingWiz,coors);
        }
        if(($('input#metasearch_bookingbuddy').is(':checked'))) {
          trackerString += launchSearch(BOOKINGBUDDY_WINDOW_NAME,bookingbuddy_popunder,popupBookingbuddy,coors);
        }
        if(($('input#metasearch_bookit').is(':checked'))) {
          trackerString += launchSearch(BOOKIT_WINDOW_NAME,bookit_popunder,popupBookit,coors);
        }
        if(($('input#metasearch_hotelplanner').is(':checked'))) {
          trackerString += launchSearch(HOTELPLANNER_WINDOW_NAME,hp_popunder,popupHotelPlanner,coors);
        }
        if(($('input#metasearch_hotelscombined').is(':checked'))) {
          trackerString += launchSearch(HOTELSCOMBINED_WINDOW_NAME,hotelscombined_popunder,popupHotelscombined,coors);
        } 
        if(($('input#metasearch_hotelscom').is(':checked'))) {
          trackerString += launchSearch(HOTELSCOM_WINDOW_NAME,hotelscom_popunder,popupHotelsCom,coors);
        } 
        if(($('input#metasearch_bookingcom').is(':checked'))) {
          trackerString += launchSearch(BOOKINGCOM_WINDOW_NAME,bookingcom_popunder,popupBookingCom,coors);
        } 
        if(($('input#metasearch_travelticker').is(':checked'))) {
          trackerString += launchSearch(TRAVELTICKER_WINDOW_NAME,travelticker_popunder,popupTravelTicker,coors);
        } 
      }
      
      // execute/list this in reverse order, so last one is on top
      if (hotelscombined_popunder) {hotelscombined_popunder.focus();}
      if (travelticker_popunder) {travelticker_popunder.focus();}
      if (bookit_popunder) {bookit_popunder.focus();}
      if (bookingbuddy_popunder) {bookingbuddy_popunder.focus();}
      if (bookingwiz_popunder) {bookingwiz_popunder.focus();}
      if (hp_popunder) {hp_popunder.focus();}
      if (hotelscom_popunder) {hotelscom_popunder.focus();}
      if (bookingcom_popunder) {bookingcom_popunder.focus();}
      if (hotwire_popunder) {hotwire_popunder.focus();}
      if (travelocity_popunder) {travelocity_popunder.focus();}
      if (priceline_popunder) {priceline_popunder.focus();}
      if (orbitz_popunder) {orbitz_popunder.focus();}
      if (tripadvisor_popunder) {tripadvisor_popunder.focus();}
      if (expedia_popunder) {expedia_popunder.focus();}
      if (production_environment() && trackerString!='') {
        pageTracker._trackPageview('/metasearch/' + trackerString.substring(0,trackerString.length-1) + window.location.pathname);
      }
    });
    
    $.datepicker.setDefaults({
      buttonImageOnly: true,
      changeMonth: true,
      changeYear: true,
      dateFormat: 'mm/dd/yy',
      duration: '',
      maxDate: '+2y',
      minDate: '+0',
      numberOfMonths: 2,
      showOn: "focus",
      showButtonPanel: true,
      yearRange: '2009:2049'
    });
    
    $('input#hotelCheckin').datepicker({
      onSelect:function(dateText,inst) {
        $(this).removeClass("example");
        var dt = new Date(dateText);
        $.datepicker.setDefaults({defaultDate:new Date(dt.getTime() + 86400000),minDate:new Date(dt.getTime() + 86400000)});
      }, onClose:function(dateText,inst) {
        $(this).removeClass("example");
        var dt = new Date(dateText);
        $.datepicker.setDefaults({defaultDate:new Date(dt.getTime() + 86400000),minDate:new Date(dt.getTime() + 86400000)});
      },beforeShow:function(){
        $('input#hotelCheckout').val("mm/dd/yyyy").addClass("example");
        $.datepicker.setDefaults({defaultDate:"+0",minDate:"+0"});
      }
    });
        
    $('input#hotelCheckout').datepicker();
        
  });

	$('div.hc_search_partners input').click(function() {
    var num_checked = $('div.hc_search_partners input:checked').length;
    if (num_checked === 0) {
      $('span.diff_windows_msg').html('(in different windows)');
    } else if (num_checked === 1) {
      $('span.diff_windows_msg').html('(in 1 separate window)');
    } else {
      $('span.diff_windows_msg').html('(in ' + num_checked + ' different windows)');
    }
	});
	
  $('input#hotelCheckin').example('mm/dd/yyyy');
  $('input#hotelCheckout').example('mm/dd/yyyy');

});
