function getXmlHttp() {
	if ( !window.XMLHttpRequest ) {
		window.XMLHttpRequest = function() {
			var types = [
				"Microsoft.XMLHTTP",
				"MSXML2.XMLHTTP.5.0",
				"MSXML2.XMLHTTP.4.0",
				"MSXML2.XMLHTTP.3.0",
				"MSXML2.XMLHTTP"
			];
			for ( var i = 0; i < types.length; i++ ) {
				try {
					return new ActiveXObject( types[ i ] );
				}
				catch( e ) {}
			}
			return undefined;
		};
	}
	if ( window.XMLHttpRequest ) return new XMLHttpRequest();
}

function callback(xh,displayfunction) {
	var xh = xh;
	if (xh.readyState == 4) {
		if (xh.status && (xh.status != 200)) {
			
		}
		else {
			
			displayfunction(xh);
		}
	}
}

function loadCanvas(url,params,displayfunction) {
	var xh = getXmlHttp();
	xh.open("POST",url,true);
	xh.onreadystatechange = function() { callback(xh,displayfunction); };
	xh.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	xh.send(params);
}

function processAirport(airport_code,airport_id,url_type) {
	var airport_id = airport_id;
	var airport_code = airport_code;
	var type = url_type;
	/*
	if (window.type == "from") {
		window.opener.document.getElementById("from").select();
		window.opener.document.getElementById("from").value = airport_code;
	} else if (window.type == "to") {
		window.opener.document.getElementById("to").select();
		window.opener.document.getElementById("to").value = airport_code;
	}
	*/
	window.opener.document.getElementById(type).select();
	window.opener.document.getElementById(type).value = airport_code;
	window.close();
}

function processCountry(value) {
	var arr = value.split('_',2);
	var country_id = arr[0];
	var use_states = arr[1];
	if (use_states == '1') {
		var tmp = document.getElementById("cities");
		tmp.style.display = "none";
loadCanvas('/lib/data_widget_state.cfm','country_id=' + country_id,createState);
	} else {
		var tmp = document.getElementById("states");
		tmp.style.display = "none";
loadCanvas('/lib/data_widget_city.cfm','country_id=' + country_id,createCity);
	}
}

function processState(state) {
	var state_id = state.value;
	loadCanvas('/lib/data_widget_city.cfm','state_id=' + state_id,createCity);
}

function processCity(city) {
	window.opener.document.getElementById("location").value = city.value;
	window.opener.document.getElementById("location_id").value = city.getAttribute("location_id");
	window.opener.document.getElementById("location_name").value = city.getAttribute("location_name");
	window.opener.document.getElementById("state_code").value = city.getAttribute("state_code");
	window.opener.document.getElementById("country_code").value = city.getAttribute("country_code");
	window.opener.refreshHotelPartners();
	window.close();
}

function createState(xh) {
	var xh = xh;
	var canvas = document.getElementById("states");
	var arr = eval("(" + xh.responseText + ")");
	var form1 = '<form><label>State: </label><select name="state" onchange="processState( state.options[state.selectedIndex]);"><option disabled selected>Select a state</option>';
	var form2 = "";
	var form3 = '</select></form>';
	for (i in arr) {
		var tmp = '<option value="' + arr[i].state_id + '">' + arr[i].state_name + '</option>';
		form2 = form2 + tmp;
	}
	if (form2.length > 0) {
		canvas.innerHTML = form1 + form2 + form3;
		canvas.style.display = "block";
	}
}

function createCity(xh) {
	var xh = xh;
	var canvas = document.getElementById("cities");
	var arr = eval("(" + xh.responseText + ")");
	var form1 = '<form><label>City: </label><select name="city" onchange="processCity( city.options[city.selectedIndex]);"><option disabled selected>Select a city</option>';
	var form2 = "";
	var form3 = '</select></form>';
	for (i in arr) {
		var tmp = '<option value="' + arr[i].location_value + '" location_id="' + arr[i].location_id + '" state_code="' + arr[i].state_code + '" country_code="' + arr[i].country_code + '" location_name="' + arr[i].location_name + '">' + arr[i].location_text + '</option>';
		form2 = form2 + tmp;
	}
	if (form2.length > 0) {
		canvas.innerHTML = form1 + form2 + form3;
		canvas.style.display = "block";
	}
}

function getProviders() {
	loadCanvas('/lib/data_widget_partner_section.cfm','section_id=1',listHotelProviders);
	loadCanvas('/lib/data_widget_partner_section.cfm','section_id=2',listFlightProviders);
	loadCanvas('/lib/data_widget_partner_section.cfm','section_id=4',listPackageProviders);
	loadCanvas('/lib/data_widget_partner_section.cfm','section_id=5',listCarRentalProviders);
	loadCanvas('/lib/data_widget_partner_section.cfm','section_id=6',listCruiseProviders);
}

function listHotelProvidersArray(arr) {
	var canvas = document.getElementById("hotel-providers");
	if (canvas.hasChildNodes()) {
		while (canvas.childNodes.length >= 1) {
			canvas.removeChild(canvas.firstChild);
		} 
	}
	listProviders(canvas,arr);
}

function listHotelProviders(xh) {
	var arr = eval("(" + xh.responseText + ")");
	listHotelProvidersArray(arr);
}

function listFlightProviders(xh) {
	var arr = eval("(" + xh.responseText + ")");
	var canvas = document.getElementById("flight-providers");
	if (canvas.hasChildNodes()) {
		while (canvas.childNodes.length >= 1) {
			canvas.removeChild(canvas.firstChild);
		} 
	}
	listProviders(canvas,arr);
}

function listPackageProviders(xh) {
	var arr = eval("(" + xh.responseText + ")");
	var canvas = document.getElementById("package-providers");
	if (canvas.hasChildNodes()) {
		while (canvas.childNodes.length >= 1) {
			canvas.removeChild(canvas.firstChild);
		} 
	}
	listProviders(canvas,arr);
}

function listCarRentalProviders(xh) {
	var arr = eval("(" + xh.responseText + ")");
	var canvas = document.getElementById("carrental-providers");
	if (canvas.hasChildNodes()) {
		while (canvas.childNodes.length >= 1) {
			canvas.removeChild(canvas.firstChild);
		} 
	}
	listProviders(canvas,arr);
}

function listCruiseProviders(xh) {
	var arr = eval("(" + xh.responseText + ")");
	var canvas = document.getElementById("cruise-providers");
	if (canvas.hasChildNodes()) {
		while (canvas.childNodes.length >= 1) {
			canvas.removeChild(canvas.firstChild);
		} 
	}
	listProviders(canvas,arr);
}

function listProviders(canvas,arr) {
	var canvas = canvas;
	var arr = arr;
	for (i in arr) {
		var li = document.createElement("li");
		if (arr[i].prechecked == '1') {
			var li_class = document.createAttribute("class");
			li_class.value = "checked";
			li.setAttributeNode(li_class);
		}
		var input = document.createElement("input");
		var input_value = document.createAttribute("value");
		input_value.value = arr[i].partner_id;
		input.setAttributeNode(input_value);
		var input_id = document.createAttribute("id");
		input_id.value = arr[i].partner_class;
		input.setAttributeNode(input_id);
		var input_type = document.createAttribute("type");
		input_type.value = "checkbox";
		input.setAttributeNode(input_type);
		var input_name = document.createAttribute("name");
		input_name.value = "providers";
		input.setAttributeNode(input_name);
		if (arr[i].prechecked == "1") {
			var input_checked = document.createAttribute("checked");
			input_checked.value = "checked";
			input.setAttributeNode(input_checked);
		}
		if (arr[i].param1) {
			var param1 = document.createAttribute("param1");
			param1.value = arr[i].param1;
			input.setAttributeNode(param1);
		}
		if (arr[i].param2) {
			var param2 = document.createAttribute("param2");
			param2.value = arr[i].param2;
			input.setAttributeNode(param2);
		}
		var label = document.createElement("label");
		var label_class = document.createAttribute("class");
		label_class.value = arr[i].partner_class;
		label.setAttributeNode(label_class);
		var label_for = document.createAttribute("for");
		label_for.value = arr[i].partner_class;
		label.setAttributeNode(label_for);
		li.appendChild(input);
		li.appendChild(label);
		canvas.appendChild(li);
	}
}


function refreshAirportPartners(section_id,from,to,displayfunction) {
	var from_airport = document.getElementById(from).value;
	var to_airport = document.getElementById(to).value;
	if (from_airport && to_airport) {
		loadCanvas('/lib/data_widget_partner_airport_from_to.cfm','iata_from=' + from_airport +'&iata_to=' + to_airport + "&section_id=" + section_id,displayfunction);
return true;
	} else if (from_airport) {
		loadCanvas('/lib/data_widget_partner_airport_from.cfm','iata=' + from_airport + "&section_id=" + section_id,displayfunction);
	} else if (to_airport) {
		loadCanvas('/lib/data_widget_partner_airport_to.cfm','iata=' + to_airport + "&section_id=" + section_id,displayfunction);
	} else {
		loadCanvas('/lib/data_widget_partner_section.cfm','section_id=' + section_id,displayfunction);
	return true;
	}
}

function refreshHotelPartners() {
	var location_id = document.getElementById("location_id").value;
	if (location_id) {
		loadCanvas('/lib/data_widget_partner_location.cfm','location_id=' + location_id ,listHotelProviders);
	} else {
		loadCanvas('/lib/data_widget_partner_section.cfm','section_id=1',listHotelProviders);
	}
}

function openPartnerWindow(url,partner,top,left) {
	var mywindow = window.open(url,partner,"width=400,height=400,scrollbars=yes,resizable=yes,toolbar=yes,menubar=yes,location=yes,top=" + top + ",left=" + left);
	if (mywindow) {
		mywindow.focus();
	}
	return mywindow;
}

function processHotels() {
	var location = document.getElementById("location");
	if (!location.value) {
		alert("Please select a destination city.");
		return false;
	}

	var location_name = document.getElementById("location_name").value.replace(/^\s+|\s+$/g,"");
	var state_code = document.getElementById("state_code").value;
	var country_code = document.getElementById("country_code").value;

	var adults = "1";
	var options = document.getElementById("hotels_adults").getElementsByTagName("option");
	for (var i = 0; i < options.length; i++) {
		if (options[i].selected) {
			adults = options[i].text;
		}
	}

	var checkin_date = document.getElementById("checkin-date");
	if (!checkin_date.value) {
		alert("Please select a checkin date.");
		return false;
	}

	var checkout_date = document.getElementById("checkout-date");
	if (!checkout_date.value) {
		alert("Please select a checkout date.");
		return false;
	}
	
	if (checkin_date.value > checkout_date.value) {
		alert("The checkin date must be later than the checkout date.");
		return false;
	}

	var hotel_providers = document.getElementById("hotel-providers");
	var hotel_checkboxes = hotel_providers.getElementsByTagName("input");
	for (var i = hotel_checkboxes.length - 1; i >= 0 ; i--) {
		if (hotel_checkboxes[i].checked) {
			var attr_checked = hotel_checkboxes[i].parentNode.className;
			if (attr_checked) {
				var prechecked = "/prechecked";
			} else {
				var prechecked = "";
			}
			createHotelsPartnerWindow(hotel_checkboxes[i].id,prechecked,location.value,adults,checkin_date.value,checkout_date.value,hotel_checkboxes.length - i,location_name,state_code,country_code);
		}
	}
}


function createHotelsPartnerWindow(partner,prechecked,location,adults,checkin_date,checkout_date,index,location_name,state_code,country_code) {
	var checkin_arr = checkin_date.toString().split("-");
	var checkout_arr = checkout_date.toString().split("-");
	var checkin_year = checkin_arr[0];
	var checkin_month = checkin_arr[1];
	var checkin_day = checkin_arr[2];
	var checkout_year = checkout_arr[0];
	var checkout_month = checkout_arr[1];
	var checkout_day = checkout_arr[2];
	var section = "hotel";
	var adults = adults;
	var top = index * 50;
	var left = top + 50;

	switch(partner){
		case 'hotwire':
			var baseURL = 'http://www.hotwire.com/hotel/search-options.jsp?sid=S296&bid=B311042&inputId=hotel-index';
			var params = "&destCity=" + encodeURIComponent(location) + "&startDay=" + checkin_day +  "&startMonth=" + checkin_month + "&endDay=" + checkout_day + "&endMonth=" + checkout_month;
			var hotwireWindow = openPartnerWindow(baseURL + params,partner,top,left);
			countClick(partner,prechecked,section);
			break;
		case 'hotelsdotcom':
			var baseURL = 'http://ad.doubleclick.net/clk;222176204;45789383;m?http://www.hotels.com/processSearch.do?';
			var params = '&usertypedcity=' + location.replace(', ','+') + '&CIDay=' + checkin_day + '&CODay=' + checkout_day + '&adults%5B0%5D=' + adults + '&numrooms=1&CIYear=' + checkin_year + '&COYear=' + checkout_year + '&CIMonth=' + checkin_month + '&COMonth=' + checkout_month + '&PSRC=FODR&rffrid=mdp.hcom.US.146.160.02';
//'&PSRC=FODR&utm_source=fodors&utm_medium=metaengines&mcid=fodr.checkrates';
			var hotelsdotcomWindow = openPartnerWindow(baseURL + params,partner,top,left);
			countClick(partner,prechecked,section);
			break;
		case 'bookingbuddy':
			var baseURL = 'http://ad.doubleclick.net/clk;214040904;35808036;w?http://rd.bookingbuddy.com/?r=bbs_fodors_ros_checkbox-h_001';
			var params = '&arrival_city=' + encodeURIComponent(location) + '&num_rooms=1&num_travelers=' + adults + '&arrival_month=' + checkin_month + ' ' + checkin_year + '&arrival_day=' + checkin_day + '&departure_month=' + checkout_month + ' ' + checkout_year + '&departure_day=' + checkout_day;
			var bookingbuddyWindow = openPartnerWindow(baseURL + params,partner,top,left);
			countClick(partner,prechecked,section);
			break;
		case 'travelocity':
			var comma = location.search(/, \w\w$|, \w\w, Canada/);
			if (comma > 0) {
				var city_param = '&city=' + location.slice(0,comma) + '&state=' + location.slice(comma + 2,comma + 4);
			} else {
				var city_param = '&city=' + encodeURIComponent(location);
			}
			var baseURL = 'http://travel.travelocity.com/hotel/HotelCobrand.do?';
			var params = 'Service=TRAVELOCITY&SearchPath=hots&old_cb=N&mode=1&x=53&y=14&pax_cnt=2' + city_param + '&dateLeavingMonth=' + checkin_month +  '&dateLeavingDay=' + checkin_day + '&dateReturningMonth=' + checkout_month + '&dateReturningDay=' + checkout_day + '&WA1=03010&WA2=215967290&WA3=38362458&WA4=0&WA5=1653085&WA6=123001';
			var travelocityWindow = openPartnerWindow(baseURL + params,partner,top,left);
			countClick(partner,prechecked,section);
			break;
		case 'tripdotcom':
			var baseURL = 'http://ad.doubleclick.net/clk;221441309;45013332;m? http://www.trip.com/index.html';
			var params = '?type=hotel&hoWhere=' + location + '&checkIn=' + checkin_month  + '/' + checkin_day + '/' + checkin_year + '&checkOut=' + checkout_month  + '/' + checkout_day + '/' + checkout_year + '&guests=' + adults + '&rooms=1&cmpid=103';
			var tripdotcomWindow = openPartnerWindow(baseURL + params,partner,top,left);
			countClick(partner,prechecked,section);
			break;
		case 'getaroom':
			if (country_code == 'US') {
				var destination = location_name + ', ' + state_code;
			} else {
				var destination = location_name + ', ' + country_code;
			}
			var baseURL = 'http://www.getaroom.com/searches/show?';
			var params = 'sort_order=position&destination=' + destination + '&search[destination]=' + destination + '&check_in=' + checkin_month  + '/' + checkin_day + '/' + checkin_year + '&check_out=' + checkout_month  + '/' + checkout_day + '/' + checkout_year + '&rinfo=[[18%2C18]]&commit=update+search&tracking_id=fodors02&content=fodors_cities';
			var getaroomWindow = openPartnerWindow(baseURL + params,partner,top,left);
			countClick(partner,prechecked,section);
			break;
		case 'hotelscombined':
			if (country_code == 'US') {
				var stateCode = state_code;
			} else {
				var stateCode = '';
			}
			var baseURL = 'http://www.hotelscombined.com/Search.aspx?a_aid=16058';
			var params = '&Adults=' + adults + '&Rooms=1&checkin=' + checkin_year + '-' + checkin_month + '-' + checkin_day + '&checkout=' + checkout_year + '-' + checkout_month + '-' + checkout_day + '&countryCode=' + country_code + '&search=' + location_name + '&stateCode=' + stateCode + '&label=' + location_name;
			var hotelscombinedWindow = openPartnerWindow(baseURL + params,partner,top,left);
			countClick(partner,prechecked,section);
			break;
		case 'travelticker':
			if (country_code == 'US') {
				var destination = location_name + ', ' + state_code;
			} else {
				var destination = location_name + ', ' + country_code;
			}
			var baseURL = 'http://www.travel-ticker.com/category.jsp?';
			var params = 'actionType=1&categoryType=Type&categoryName=Hotels&vert=hotel&destinationCity=' + destination + '&startDate=' + checkin_month + '/' + checkin_day + '/' + checkin_year + '&endDate=' + checkout_month + '/' + checkout_day + '/' + checkout_year + '&numRooms=1&noOfAdults=' + adults + '&sid=S296&bid=B311497';
			var traveltickerWindow = openPartnerWindow(baseURL + params,partner,top,left);
			countClick(partner,prechecked,section);
			break;
		case 'evr':
			var elem = document.getElementById("evr");
			var paramOne = elem.getAttributeNode("param1");
			var paramTwo = elem.getAttributeNode("param2");
			var evrOne = ' ';
			var evrTwo = ' ';
			var evrThree = ' ';
			if (paramOne) {
				evrOne = paramOne.value;
			}
			if (paramTwo) {
				var evrArr = paramTwo.value.split(' ',2);
				evrTwo = evrArr[0];
				evrThree = evrArr[1];
			}
			var baseURL = 'http://www.wyndham-vacations.com/erube/OM_Fodors/March152020/';
			var params = evrTwo + '/meta/int/main.taf?erube_fh=rci&rci.submit.SearchResortDirectory=1&rci.searchDate=' + checkin_month + '/2010&rci.searchValue=' + encodeURI(evrOne) + '&id1=OM_Fodorsmeta&id2=' + evrThree + 'Mar10';
			var evrWindow = openPartnerWindow(baseURL + params,partner,top,left);
			countClick(partner,prechecked,section);
			break;
		case 'splendia':
			var elem = document.getElementById("splendia");
			var paramOne = elem.getAttributeNode("param1");
			var paramTwo = elem.getAttributeNode("param2");
			var splenOne = ' ';
			var splenTwo = ' ';
			if (paramOne) {
				splenOne = paramOne.value;
			}
			if (paramTwo) {
				splenTwo = paramTwo.value;
			}
			var baseURL = 'http://eulerian.splendia.com/dynclick/splendia/?etf-name=Fodors%20%2D%20destinations%20%2D%20US&etf-prdref=';
			var params = splenOne + '&eurl=http://www.splendia.com/en/' + splenTwo + '.html?' +  'datestart=' + checkin_day  + '/' + checkin_month + '/' + checkin_year.substr(2) + '&dateend=' + checkout_day  + '/' + checkout_month + '/' + checkout_year.substr(2);
			var splendiaWindow = openPartnerWindow(baseURL + params,partner,top,left);
			countClick(partner,prechecked,section);
			break;
		case 'renaissance':
			var baseURL = 'http://www.marriott.com/search/submitSearch.mi';
			if (country_code == 'US') {
				var state = state_code;
			} else {
				var state = '';
			}
			var params = '?searchType=InCity&groupCode=&resultsMap=&searchRadius=50&recordsPerPage=10&vsMarriottBrands=MC&destinationAddress.city=' + location_name + '&destinationAddress.stateProvince=' + state + '&destinationAddress.country=' + country_code + '&marriottBrands=MHR&roomCount=1&guestCount=' + adults + '&fromDate=' + checkin_month  + '/' + checkin_day + '/' + checkin_year.substr(2) + '&toDate=' + checkout_month  + '/' + checkout_day + '/' + checkout_year.substr(2);
			var renaissanceWindow = openPartnerWindow(baseURL + params,partner,top,left);
			countClick(partner,prechecked,section);
			break;
		case 'priceline':
			var baseURL = 'http://www.priceline.com/qp.asp?productid=5';
			var params = '&city=' + location.replace(', ',',').toUpperCase() + '&rooms=1&checkindate=' + checkin_month + '/' + checkin_day + '/' + checkin_year + '&checkoutdate=' + checkout_month + '/' + checkout_day + '/' + checkout_year + '&refid=PLFODORS&refclickid=HOTELSEARCH';
			var pricelineWindow = openPartnerWindow(baseURL + params,partner,top,left);
			countClick(partner,prechecked,section);
			break;
		case 'bookingdotcom':
			var baseURL = 'http://www.booking.com/searchresults.html?';
			var elem = document.getElementById("bookingdotcom");
			var attr = elem.getAttributeNode("param1");
			if (attr) {
				var city_id = attr.value;
			}
			if (city_id) {
				var params = 'aid=323397&city=' + city_id + '&checkin_monthday=' + checkin_day + '&checkin_year_month=' + checkin_year + '-' + checkin_month + '&checkout_monthday=' + checkout_day + '&checkout_year_month=' + checkout_year + '-' + checkout_month + '&do_availability_check=1';
			} else {
				var params = 'aid=323397';
			}
			var bookingdotcomWindow = openPartnerWindow(baseURL + params,partner,top,left);
			countClick(partner,prechecked,section);
			break;
	}
}

function processFlights() {
	var from = document.getElementById("from");
	if (!from.value) {
		alert("Please select a departure city.");
		return false;
	}

	var to = document.getElementById("to");
	if (!to.value) {
		alert("Please select a destination city.");
		return false;
	}

	var adults = "1";
	var options = document.getElementById("flight_adults").getElementsByTagName("option");
	for (var i = 0; i < options.length; i++) {
		if (options[i].selected) {
			adults = options[i].text;
		}
	}

	var depart_date = document.getElementById("depart-date");
	if (!depart_date.value) {
		alert("Please select a departure date.");
		return false;
	}

	var return_date = document.getElementById("return-date");
	if (!return_date.value) {
		alert("Please select a return date.");
		return false;
	}

	if (depart_date.value > return_date.value) {
		alert("The return date must be later than the departure date.");
		return false;
	}

	var flight_providers = document.getElementById("flight-providers");
	var flight_checkboxes = flight_providers.getElementsByTagName("input");
	for (var i = flight_checkboxes.length - 1; i >= 0 ; i--) {
		if (flight_checkboxes[i].checked) {
			var attr_checked = flight_checkboxes[i].parentNode.className;
			if (attr_checked) {
				var prechecked = "/prechecked";
			} else {
				var prechecked = "";
			}
createFlightsPartnerWindow(flight_checkboxes[i].id,prechecked,from.value.toUpperCase(),to.value.toUpperCase(),adults,depart_date.value,return_date.value,flight_checkboxes.length - i);
		}
	}
}

function processPackages() {
	var from = document.getElementById("p_from");
	if (!from.value) {
		alert("Please select a departure city.");
		return false;
	}

	var to = document.getElementById("p_to");
	if (!to.value) {
		alert("Please select a destination city.");
		return false;
	}

	var adults = "1";
	var options = document.getElementById("package_adults").getElementsByTagName("option");
	for (var i = 0; i < options.length; i++) {
		if (options[i].selected) {
			adults = options[i].text;
		}
	}

	var depart_date = document.getElementById("p_depart-date");
	if (!depart_date.value) {
		alert("Please select a departure date.");
		return false;
	}

	var return_date = document.getElementById("p_return-date");
	if (!return_date.value) {
		alert("Please select a return date.");
		return false;
	}

	if (depart_date.value > return_date.value) {
		alert("The return date must be later than the departure date.");
		return false;
	}

	var flight_providers = document.getElementById("package-providers");
	var flight_checkboxes = flight_providers.getElementsByTagName("input");
	for (var i = flight_checkboxes.length - 1; i >= 0 ; i--) {
		if (flight_checkboxes[i].checked) {
			var attr_checked = flight_checkboxes[i].parentNode.className;
			if (attr_checked) {
				var prechecked = "/prechecked";
			} else {
				var prechecked = "";
			}
createPackagesPartnerWindow(flight_checkboxes[i].id,prechecked,from.value.toUpperCase(),to.value.toUpperCase(),adults,depart_date.value,return_date.value,flight_checkboxes.length - i);
		}
	}
}

function processCarRentals() {
	var from = document.getElementById("r_from");
	if (!from.value) {
		alert("Please select a pickup city.");
		return false;
	}

	var to = document.getElementById("r_to");

	var pickup_time = "";
	var options = document.getElementById("pickup_time").getElementsByTagName("option");
	for (var i = 0; i < options.length; i++) {
		if (options[i].selected) {
			pickup_time = options[i].value;
		}
	}

	var dropoff_time = "";
	var options = document.getElementById("dropoff_time").getElementsByTagName("option");
	for (var i = 0; i < options.length; i++) {
		if (options[i].selected) {
			dropoff_time = options[i].value;
		}
	}

	var depart_date = document.getElementById("r_depart-date");
	if (!depart_date.value) {
		alert("Please select a pickup date.");
		return false;
	}

	var return_date = document.getElementById("r_return-date");
	if (!return_date.value) {
		alert("Please select a dropoff date.");
		return false;
	}
	
	if (depart_date.value > return_date.value) {
		alert("The dropoff date must be later than the pickup date.");
		return false;
	}

	var flight_providers = document.getElementById("carrental-providers");
	var flight_checkboxes = flight_providers.getElementsByTagName("input");
	for (var i = flight_checkboxes.length - 1; i >= 0 ; i--) {
		if (flight_checkboxes[i].checked) {
			var attr_checked = flight_checkboxes[i].parentNode.className;
			if (attr_checked) {
				var prechecked = "/prechecked";
			} else {
				var prechecked = "";
			}
createCarRentalsPartnerWindow(flight_checkboxes[i].id,prechecked,from.value.toUpperCase(),to.value.toUpperCase(),pickup_time,dropoff_time,depart_date.value,return_date.value,flight_checkboxes.length - i);
		}
	}
}

function processCruises() {

	var destination = "";
	var options = document.getElementById("cruise-destination").getElementsByTagName("option");
	for (var i = 0; i < options.length; i++) {
		if (options[i].selected) {
			destination = options[i];
		}
	}

	var line = "";
	var options = document.getElementById("cruise-line").getElementsByTagName("option");
	for (var i = 0; i < options.length; i++) {
		if (options[i].selected) {
			line = options[i];
		}
	}

	var depart = "";
	var options = document.getElementById("cruise-depart").getElementsByTagName("option");
	for (var i = 0; i < options.length; i++) {
		if (options[i].selected) {
			depart = options[i];
		}
	}

	var clength = "";
	var options = document.getElementById("cruise-length").getElementsByTagName("option");
	for (var i = 0; i < options.length; i++) {
		if (options[i].selected) {
			clength = options[i];
		}
	}

	var flight_providers = document.getElementById("cruise-providers");
	var flight_checkboxes = flight_providers.getElementsByTagName("input");
	for (var i = flight_checkboxes.length - 1; i >= 0 ; i--) {
		if (flight_checkboxes[i].checked) {
			var attr_checked = flight_checkboxes[i].parentNode.className;
			if (attr_checked) {
				var prechecked = "/prechecked";
			} else {
				var prechecked = "";
			}
createCruisesPartnerWindow(flight_checkboxes[i].id,prechecked,flight_checkboxes.length - i,destination,line,depart,clength);
		}
	}
}

function createCruisesPartnerWindow(partner,prechecked,index,destination,line,depart,clength) {
	var section = "cruise";
	var top = index * 50;
	var left = top + 50;
	var depart_arr = depart.value.toString().split("-");

	switch(partner){
		case 'travelticker':
			var baseURL = 'http://www.travel-ticker.com/category.jsp?';
			var params = 'actionType=1&categoryType=Type&categoryName=Cruises&sid=S296&bid=B314973';
			var traveltickerWindow = openPartnerWindow(baseURL + params,partner,top,left);
			countClick(partner,prechecked,section);
			break;
		case 'bookingbuddy':
			var baseURL = 'http://ad.doubleclick.net/clk;214040904;35808036;w?http://rd.bookingbuddy.com/?r=bbs_fodors_cruise_checkbox-r_001';
			var params = '&destination=' + destination.text + '&travel_month=' + depart.value + '&over_55=0' + '&cruise_line=' + line.text + '&cruise_length=' + clength.text;
			var bookingbuddyWindow = openPartnerWindow(baseURL + params,partner,top,left);
			countClick(partner,prechecked,section);
			break;
		case 'onetime':
			var baseURL = 'http://www.onetime.com/cruises?sid=20774';
			var params = '&inDate=' + depart_arr[1] + '/01/' + depart_arr[0] + '&len=' + clength.value + '&region=' + destination.value;
			var onetimeWindow = openPartnerWindow(baseURL + params,partner,top,left);
			countClick(partner,prechecked,section);
			break;
	}
}

function createFlightsPartnerWindow(partner,prechecked,from,to,adults,depart_date,return_date,index) {
	var depart_arr = depart_date.toString().split("-");
	var return_arr = return_date.toString().split("-");
	var depart_year = depart_arr[0];
	var depart_month = depart_arr[1];
	var depart_day = depart_arr[2];
	var return_year = return_arr[0];
	var return_month = return_arr[1];
	var return_day = return_arr[2];
	var section = "air";
	var top = index * 50;
	var left = top + 50;

	switch(partner){
		case 'hotwire':
			var baseURL = 'http://www.hotwire.com/air/search-options.jsp?sid=S296&bid=B311041&inputId=index';
			var params = "&origCity=" + from + "&destinationCity=" + to + "&startDay=" + depart_day +  "&startMonth=" + depart_month + "&endDay=" + return_day + "&endMonth=" + return_month + "&noOfTickets=" + adults;
			var hotwireWindow = openPartnerWindow(baseURL + params,partner,top,left);
			countClick(partner,prechecked,section)
			break;
		case 'onetime':
			var baseURL = 'http://www.onetime.com/flights?sid=20772';
			var params = '&inDate=' + depart_month + '/' + depart_day + '/' + depart_year + '&outDate=' + return_month + '/' + return_day + '/' + return_year + '&travelers=' + adults + '&tid=' + to + '&fid=' + from;
			var onetimeWindow = openPartnerWindow(baseURL + params,partner,top,left);
			countClick(partner,prechecked,section);
			break;
		case 'webjet':
			var country_code = document.getElementById("country_code").value;
			var tracking = '';
			var cc = 'AT,BE,CH,CY,CZ,DE,DK,ES,FI,FR,GB,GR,HR,HU,IE,IS,IT,LI,LU,MT,NL,NO,PL,PT,RO,RU,SE,SI,SK,T';
			if (country_code == 'AU') {
				tracking = '&utm_source=Fodors&utm_medium=cpc&utm_campaign=Australia';
			} else if (cc.indexOf(country_code) > -1) {
				tracking = '&utm_source=Fodors&utm_medium=cpc&utm_campaign=Europe';
			}
			var baseURL = 'http://res.webjet.com/process.aspx?agentid=189';
			var params = '&txtDepCity1=' + from + '&txtArrCity1=' + to + '&txtDepCity2=' + to + '&txtArrCity2=' + from + '&TripType=rdbRoundTrip&txtDate1=' + depart_month + '/' + depart_day + '/' + depart_year + '&txtDate2=' + return_month + '/' + return_day + '/' + return_year + '&ddlPaxADT=' + adults + '&ddlPaxCHD=0&ddlPaxINF=0' + tracking;
			var webjetWindow = openPartnerWindow(baseURL + params,partner,top,left);
			countClick(partner,prechecked,section);
			break;
		case 'travelticker':
			var baseURL = 'http://www.travel-ticker.com/category.jsp?';
			var params = 'actionType=1&categoryType=Type&categoryName=Flights&vert=air&orig=' + from + '&dest=' + to + '&startDate=' + depart_month + '/' + depart_day + '/' + depart_year + '&endDate=' + return_month + '/' + return_day + '/' + return_year + '&noOfTickets=' + adults + '&sid=S296&bid=B311499';
			var traveltickerWindow = openPartnerWindow(baseURL + params,partner,top,left);
			countClick(partner,prechecked,section);
			break;
		case 'tripdotcom':
			var baseURL = 'http://ad.doubleclick.net/clk;221441402;45013414;h?http://www.trip.com/index.html';
			var params = '?type=flight&airFrom=' + from + '&airTo=' + to + '&deptDate=' + depart_month + '/' + depart_day + '/' + depart_year + '&rtnDate=' + return_month + '/' + return_day + '/' + return_year + '&travelers=' + adults + '&cmpid=102';
			var tripdotcomWindow = openPartnerWindow(baseURL + params,partner,top,left);
			countClick(partner,prechecked,section);
			break;
		case 'bookingbuddy':
			var baseURL = 'http://ad.doubleclick.net/clk;214040904;35808036;w?http://rd.bookingbuddy.com/?r=bbs_fodors_ros_checkbox-a_001';
			var params = '&departure_city=' + from + '&arrival_city=' + to + '&num_travelers=' + adults + '&search_type=roundtrip' + '&departure_month=' + depart_month + ' ' + depart_year + '&departure_day=' + depart_day + '&departure_time=anytime' + '&return_month=' + return_month + ' ' + return_year + '&return_day=' + return_day + '&return_time=anytime&service_class=economy_coach&non_stop=';
			var bookingbuddyWindow = openPartnerWindow(baseURL + params,partner,top,left);
			countClick(partner,prechecked,section);
			break;
		case 'airnewzealand':
			var baseURL = 'http://altfarm.mediaplex.com/ad/ck/4608-81242-3153-4?mpro=https://flightbookings.airnewzealand.com/isbook_en_US/book/initNewMultiStopPopulated.do';
			var params = '?multiType=int&tripType=multiStop&searchLegs[0].originPoint=' + from + '&searchLegs[0].tripStartDate=' + depart_day + '&searchLegs[0].tripStartMonth=' + getMonthAbbrev(depart_month) + '&searchLegs[0].destinationPoint=' + to + '&searchLegs[1].originPoint=' + to + '&searchLegs[1].tripStartDate=' + return_day + '&searchLegs[1].tripStartMonth=' + getMonthAbbrev(return_month) + '&searchLegs[1].destinationPoint=' + from + '&customerTurnaroundIndex=1&bookingClass=economy&adults=' + adults + '&children=0&infants=0';
			var airnewzealandWindow = openPartnerWindow(baseURL + params,partner,top,left);
			countClick(partner,prechecked,section);
			break;
		case 'priceline':
			var baseURL = 'http://www.priceline.com/qp.asp?productid=1';
			var params = '&depcity=' + from + '&arrcity=' + to + '&numtickets=' + adults + '&departuredate=' + depart_month + '/' + depart_day + '/' + depart_year + '&returndate=' + return_month + '/' + return_day + '/' + return_year + '&refid=PLFODORS&refclickid=AIRSEARCH';
			var pricelineWindow = openPartnerWindow(baseURL + params,partner,top,left);
			countClick(partner,prechecked,section);
			break;
		case 'whentofly':
			var baseURL = 'http://book.perfectibe.com/process.aspx?agentid=121';
			var params = '&txtDepCity1=' + from + '&txtArrCity1=' + to + '&txtDepCity2=' + to + '&txtArrCity2=' + from +'&TripType=rdbRoundTrip' + '&txtDate1=' + depart_month + '/' + depart_day + '/' + depart_year + '&txtDate2=' + return_month + '/' + return_day + '/' + return_year + '&ddlPaxADT=' + adults + '&ddlPaxCHD=0&ddlPaxINF=0';
			var whentoflyWindow = openPartnerWindow(baseURL + params,partner,top,left);
			countClick(partner,prechecked,section);
			break;
		case 'jetblue':
			var baseURL = 'http://ad.doubleclick.net/clk;216845355;39601580;k?http://www.jetblueairways.com/cgi-bin/skylights.cgi?intcmp=minibooker';
			var params = '&ADULT=' + adults + '&CHILD=00&currency=&fare_cat=LOWEST&booker_fare_cat=LOWEST&fareCat=LOWEST&mode=0&module=SB&nom=2&oP=&pT=00CHILD' + adults + 'ADULT&rP=&pM=0&event=search&page=SEARCH&tc=1&TRIP_TYPE=RoundTrip&openjaw_flag=TRUE&MARKET1_DATE=' + (depart_month * 1) + '/' + (depart_day * 1) + '/' + depart_year + '&m1=' + depart_year + depart_month + depart_day + from + to + '&m1DO=0&m1DP=0&sector1_d=' + to + '&sector1_o=' + from + '&sector_1_d=' + depart_day + '&sector_1_m=' + depart_month + depart_year + '&MARKET2_DATE='  + (return_month * 1) + '/' + (return_day * 1) + '/' + return_year + '&m2=' + return_year + return_month + return_day + to + from + '&m2DO=0&m2DP=0&sector2_d=' + from + '&sector2_o=' + to + '&sector_2_d=' + return_day + '&sector_2_m=' + return_month + return_year;
			var jetBlueWindow = openPartnerWindow(baseURL + params,partner,top,left);
			countClick(partner,prechecked,section);
			break;
	}
}

function createPackagesPartnerWindow(partner,prechecked,from,to,adults,depart_date,return_date,index) {
	var depart_arr = depart_date.toString().split("-");
	var return_arr = return_date.toString().split("-");
	var depart_year = depart_arr[0];
	var depart_month = depart_arr[1];
	var depart_day = depart_arr[2];
	var return_year = return_arr[0];
	var return_month = return_arr[1];
	var return_day = return_arr[2];
	var section = "vacation";
	var top = index * 50;
	var left = top + 50;

	switch(partner){
		case 'hotwire':
			var baseURL = 'http://www.hotwire.com/vacation/results.jsp?sid=S296&bid=B314984&inputId=index&startSearchType=N';
			var params = "&origCity=" + from + "&destCity=" + to + "&vacationPGoodTypeCodes=AH&startDay=" + depart_day +  "&startMonth=" + depart_month + "&endDay=" + return_day + "&endMonth=" + return_month + "&noOfAdults=" + adults + '&noOfChildren=0&noOfRooms=1';
			var hotwireWindow = openPartnerWindow(baseURL + params,partner,top,left);
			countClick(partner,prechecked,section)
			break;
		case 'bookingbuddy':
			var baseURL = 'http://ad.doubleclick.net/clk;214040904;35808036;w?http://rd.bookingbuddy.com/?r=bbs_fodors_ros_vaca_unchecked-box-v_015';
			var params = '&departure_city=' + from + '&arrival_city=' + to + '&num_travelers=' + adults + '&search_type=roundtrip' + '&departure_month=' + depart_month + ' ' + depart_year + '&departure_day=' + depart_day + '&return_month=' + return_month + ' ' + return_year + '&return_day=' + return_day;
			var bookingbuddyWindow = openPartnerWindow(baseURL + params,partner,top,left);
			countClick(partner,prechecked,section);
			break;
		case 'travelticker':
			var baseURL = 'http://www.travel-ticker.com/category.jsp?';
			var params = 'actionType=1&categoryType=Type&categoryName=Packages&vert=package&orig=' + from + '&dest=' + to + '&startDate=' + depart_month + '/' + depart_day + '/' + depart_year + '&endDate=' + return_month + '/' + return_day + '/' + return_year + '&noOfAdults=' + adults + '&sid=S296&bid=B311498';
			var traveltickerWindow = openPartnerWindow(baseURL + params,partner,top,left);
			countClick(partner,prechecked,section);
			break;
		case 'onetime':
			var baseURL = 'http://www.onetime.com/vacations?sid=20775';
			var params = '&inDate=' + depart_month + '/' + depart_day + '/' + depart_year + '&outDate=' + return_month + '/' + return_day + '/' + return_year + '&travelers=' + adults + '&tid=' + to + '&fid=' + from;
			var onetimeWindow = openPartnerWindow(baseURL + params,partner,top,left);
			countClick(partner,prechecked,section);
			break;
	}
}

function createCarRentalsPartnerWindow(partner,prechecked,from,to,pickup_time,dropoff_time,depart_date,return_date,index) {
	var depart_arr = depart_date.toString().split("-");
	var return_arr = return_date.toString().split("-");
	var depart_year = depart_arr[0];
	var depart_month = depart_arr[1];
	var depart_day = depart_arr[2];
	var return_year = return_arr[0];
	var return_month = return_arr[1];
	var return_day = return_arr[2];
	var section = "car";
	var top = index * 50;
	var left = top + 50;

	switch(partner){
		case 'carrentals':
			var baseURL = 'http://www.carrentals.com/?cid=12539';
			var params = '&pickupMonthYear=' + depart_month + depart_year.slice(2,4) + '&pickupDay=' + depart_day + '&pickupTime=' + pickup_time + '&dropoffMonthYear=' + return_month + return_year.slice(2,4) + '&dropoffDay=' + return_day + '&dropoffTime=' + dropoff_time + '&pu=' + from + '&do=' + from;;
			var carrentalsWindow = openPartnerWindow(baseURL + params,partner,top,left);
			countClick(partner,prechecked,section)
			break;
		case 'hotwire':
			var baseURL = 'http://www.hotwire.com/car/search-options.jsp?sid=S296&bid=B31111&inputId=index&selectedCarTypes=ECAR&startSearchType=N';
			var params = "&startLocation=" + from + "&startDay=" + depart_day +  "&startMonth=" + depart_month + '&startTime=' + pickup_time + "00&endDay=" + return_day + "&endMonth=" + return_month + '&endTime=' + dropoff_time + '00';
			var hotwireWindow = openPartnerWindow(baseURL + params,partner,top,left);
			countClick(partner,prechecked,section)
			break;
		case 'onetime':
			var baseURL = 'http://www.onetime.com/cars?sid=20773';
			var params = '&inDate=' + depart_month + '/' + depart_day + '/' + depart_year + '&outDate=' + return_month + '/' + return_day + '/' + return_year + '&site=' + from + '&inTime=' + pickup_time + '&outTime=' + dropoff_time;
			var onetimeWindow = openPartnerWindow(baseURL + params,partner,top,left);
			countClick(partner,prechecked,section);
			break;
		case 'travelticker':
			var baseURL = 'http://www.travel-ticker.com/category.jsp?';
			var params = 'actionType=1&categoryType=Type&categoryName=Cars&vert=car&dest=' + from + '&startDate=' + depart_month + '/' + depart_day + '/' + depart_year + '&startTime=' + pickup_time + '00&endDate=' + return_month + '/' + return_day + '/' + return_year + '&endTime=' + dropoff_time + '00&sid=S296&bid=B311496';
			var traveltickerWindow = openPartnerWindow(baseURL + params,partner,top,left);
			countClick(partner,prechecked,section);
			break;
		case 'bookingbuddy':
			var baseURL = 'http://ad.doubleclick.net/clk;214040904;35808036;w?http://rd.bookingbuddy.com/?r=bbs_fodors_car_checkbox-c_001';
			var params = '&pickup_city=' + from + '&pickup_month=' + depart_month + ' ' + depart_year + '&pickup_day=' + depart_day + '&pickup_time=' + pickup_time + '&dropoff_month=' + return_month + ' ' + return_year + '&dropoff_day=' + return_day + "&dropoff_time=" + dropoff_time;
			var bookingbuddyWindow = openPartnerWindow(baseURL + params,partner,top,left);
			countClick(partner,prechecked,section);
			break;
	}
}

function countClick(partner,prechecked,section) {
	var randNum = Math.floor(Math.random()*100000);
	var pic = new Image();
	pic.src='http://ad.doubleclick.net/adj/fdrs.bookingwidget/' + section + '/' + partner + prechecked + ';key=values;sz=1x1;ord=' + randNum;
}

function getMonthAbbrev(month) {
	var lookup = eval({"01":"JAN","02":"FEB","03":"MAR","04":"APR","05":"MAY","06":"JUN", "07":"JUL","08":"AUG","09":"SEP","10":"OCT","11":"NOV","12":"DEC"});
	return lookup[month];
}

