﻿var cityPairData;
var tsamTabs = ['flights', 'packages', 'cars', 'deals', 'vacations', 'cruises', 'hotels'];
var submitURL;
var g_FieldSuffix = '';
var tssw_tilePopups;



	function showFlights() { tsamShowTab('flights'); }

	function showPackages() { tsamShowTab('packages'); }

	function showCars() { tsamShowTab('cars'); }

	function showDeals() { tsamShowTab('deals'); }

	function showVacations() { tsamShowTab('vacations'); }

	function showCruises() { tsamShowTab('cruises'); }

	function showHotels() { tsamShowTab('hotels'); }

	function tsamShowHideTab(inName, inShow)
	{
		var visVal = 'hidden';
		if (inShow) visVal = 'visible';
		if (document.getElementById(inName)) {
			document.getElementById(inName).style.visibility = visVal;
		}
	}

	function tsamShowTab(inTab)
	{
		for (var i = 0; i < tsamTabs.length; i++) {
			tsamShowHideTab(tsamTabs[i], false);
		}
		tsamShowHideTab(inTab.toLowerCase(), true);
		try { document.getElementById(inTab + '-' + inTab).checked = true; } catch (e) { }
	}

	function getSubmitUrl()
	{
		submitURL = document.getElementById("sourceURL").value;
		if (submitURL.toLowerCase() == "useActive".toLowerCase()) {
			submitURL = window.location.hostname;
		}
	}
	function searchFlights(form)
	{
		HandleEmailSignup();
		getSubmitUrl();

		if (document.getElementById("flightFrom").value.length == 0){
			window.alert("Please enter a flight origin.");
			return;
		}
		if (document.getElementById("flightTo").value.length == 0){
			window.alert("Please enter a flight destination.");
			return;
		}
		var flightFrom = document.getElementById("flightFrom").value;
		var flightTo = document.getElementById("flightTo").value;
		var numAdults = document.getElementById("flightNumAdults").value;
		
		if (! isNumeric(numAdults)){
			window.alert("Please enter the number of travelers.");
			return;
		}

		var dateObject = {
			fldStartDate: 'flightDepart'
			, fldEndDate: 'flightReturn'
			, startDateMustBeAfter: 0
			, skipEndDate: false
		};
		if (GetRadioValue("tsFlightOWRT") == "OW") dateObject.skipEndDate = true;
		if (!ParseDates(dateObject)) return;
		if (GetRadioValue("tsFlightOWRT") == "OW") dateObject.outputEndDate = dateObject.outputStartDate;
		checkCP('flight');

		tsam_InitURLArray();
		for (var i = 0; i < form.elements.length; i++){
			if (form.elements[i].type == 'checkbox'){
				if (form.elements[i].checked) {
					var providerCode = '';
					switch (form.elements[i].id){
						case 'flightHotWire':		providerCode = 'hotwire-air';		break;
						case 'flightpriceline':		providerCode = 'priceline-air';		break;
						case 'flightOrbitz':		providerCode = 'orbitz-air';		break;
						case 'flightcheapTickets':	providerCode = 'cheaptickets';		break;
						case 'flightExpedia':		providerCode = 'expedia-air';		break;
						case 'flightAmerican':		providerCode = 'american';			break;
						case 'flightCheapO':		providerCode = 'cheapo';			break;
						case 'flightOneTravel':		providerCode = 'onetravel';			break;
						case 'flightAirFare':		providerCode = 'airfare';			break;
						case 'flightTravelTicker':	providerCode = 'travelticker-air';	break;							
						case 'flightTravelocity':	providerCode = 'travelocity-air';	break;
						case 'flightDealbase':		providerCode = 'dealbase-air';		break;
						case 'flightFlydotcom':		providerCode = 'flydotcom';			break;
						case 'flightSupersearch':	providerCode = 'supersearch-air';	break;
						case 'flightBookingbuddy':	providerCode = 'bookingbuddy-air';	break;
						case 'flightMobissimo':		providerCode = 'mobissimo-air';		break;
						case 'flightTripAdvisor':	providerCode = 'tripadvisor-air';	break;
						case 'flightLowcostairfares': providerCode = 'lowcostairfares'; break;
						case 'flightbookingwiz': providerCode = 'bookingwiz'; break;
					}
					if (providerCode.length > 0) {
						var owString = '';
						try { if (document.getElementById("tsFlightOW").checked == true) owString = 'p:ow'; } catch (e) { }
						var thisURL = 'http://' + submitURL + '/amid/air/' + providerCode + '/' + flightFrom + '/' + flightTo + '/' + dateObject.outputStartDate + '/' + dateObject.outputEndDate + '/' + numAdults + '/' + owString;
						tsam_AddURLToOpen(thisURL);
					}
				}
			}
		}
		tsam_OpenAllURLs();
	}

	function searchPackages(form){
		getSubmitUrl();
		var gotChecked = false;
		for (var i = 0; i < form.elements.length; i++){
			if (form.elements[i].type == 'checkbox'){
				if (form.elements[i].checked){
					gotChecked = true;
					break;
				}
			}
		}
		if (gotChecked == false){
			document.getElementById("pkgAlert").innerHTML = "Please select a provider to search.";
			document.getElementById("pkgAlert").style.display = "block";
		}
		else{
			document.getElementById("pkgAlert").style.display = "none";
		}
	
		var pkgFrom = document.getElementById("packageFrom").value;
		var pkgTo = document.getElementById("packageTo").value;
		var numAdults = document.getElementById("packageNumAdults").value;
		var numChildren = document.getElementById("packageNumChildren").value;
		var numRooms = document.getElementById("packageNumRooms").value;

		var dateObject = {
			fldStartDate: 'packageDepart'
			, fldEndDate: 'packageReturn'
			, startDateMustBeAfter: 0
			, skipEndDate: false
		};
		if (!ParseDates(dateObject)) return;

		checkCP('pkg');
		/*if (document.getElementById("vendorAAV").style.visibility == "hidden"){
			return;
		}*/

		// check the number of children - and get their ages
		var child1Age = 0;
		var child2Age = 0;
		var child3Age = 0;

		switch (numChildren) {
			case '3':
				child3Age = document.getElementById("packageChildThreeAge").value;
				if (child3Age == '0') {
					window.alert("Please select an age for Child 3.");
					return;
				}
				if (child3Age == '1') {
					window.alert("Please call our Reservation Specialists at 1-800-321-2121 to book a child under the age of 2.");
					return;
				}
			case '2':
				child2Age = document.getElementById("packageChildTwoAge").value;
				if (child2Age == '0') {
					window.alert("Please select an age for Child 2.");
					return;
				}
				if (child2Age == '1') {
					window.alert("Please call our Reservation Specialists at 1-800-321-2121 to book a child under the age of 2.");
					return;
				}
			case '1':
				child1Age = document.getElementById("packageChildOneAge").value;
				if (child1Age == '0'){
					window.alert("Please select an age for Child 1.");
					return;
				}
				if (child1Age == '1'){
					window.alert("Please call our Reservation Specialists at 1-800-321-2121 to book a child under the age of 2.");
					return;
				}
				break;
		}

		tsam_InitURLArray();
		for (var i = 0; i < form.elements.length; i++){
			if (form.elements[i].type == 'checkbox'){
				if (form.elements[i].checked) {
					var providerCode = '';
					switch (form.elements[i].id){
						case 'packageAAV':			providerCode = 'aav';				break;
						case 'packageCheapCarib':	providerCode = 'cheapcarib';		break;
						case 'packageTravelocity':	providerCode = 'travelocity-pkg';	break;
						case 'packageOrbitz':		providerCode = 'orbitz-pkg';		break;
						case 'packageHotWire':		providerCode = 'hotwire-pkg';		break;
						case 'packageTravelTicker':	providerCode = 'travelticker-pkg';	break;
						case 'packageBookit':		providerCode = 'bookit-pkg';		break;
						case 'packageBookingbuddy':	providerCode = 'bookingbuddy-pkg';	break;
						case 'packageExpedia':		providerCode = 'expedia-pkg';		break;
					}
					if (providerCode.length > 0) {
						var thisURL = 'http://' + submitURL + '/amid/package/' + providerCode + '/' + pkgFrom + '/' + pkgTo + '/' + dateObject.outputStartDate + '/' + dateObject.outputEndDate + '/' + numAdults + '/0/0/' + numChildren + '/' + numRooms + '/' + child1Age + '/' + child2Age + '/' + child3Age;
						tsam_AddURLToOpen(thisURL);
					}
				}
			}
		}
		tsam_OpenAllURLs();
	}

	function searchCars(form){
		getSubmitUrl();
		var pickupLocation = document.getElementById("carLocation").value;
		
		var dateObject = {
			fldStartDate: 'carPickUp'
			, fldEndDate: 'carDropOff'
			, startDateMustBeAfter: 0
			, skipEndDate: false
		};
		if (!ParseDates(dateObject)) return;

		var myindex  = document.getElementById("carDropPickup").selectedIndex;
		var carPickupTime = document.getElementById("carDropPickup").options[myindex].value;
		myindex  = document.getElementById("carDropDropOff").selectedIndex;
		var carDropOffTime = document.getElementById("carDropDropOff").options[myindex].value;

		tsam_InitURLArray();
		for (var i = 0; i < form.elements.length; i++){
			if (form.elements[i].type == 'checkbox'){
				if (form.elements[i].checked) {
					var providerCode = '';
					switch (form.elements[i].id){
						case 'carsOrbitz':			providerCode = 'orbitz-car';		break;
						case 'carsCarRentals':		providerCode = 'carrentals';		break;
						case 'carsHotwire':			providerCode = 'hotwire-car';		break;
						case 'carsTravelTicker':	providerCode = 'travelticker-car';	break;
						case 'carsPriceline':		providerCode = 'priceline-car';		break;
						case 'carsBookingbuddy':	providerCode = 'bookingbuddy-car';	break;
						case 'carsExpedia':			providerCode = 'expedia-car';		break;
					}
					if (providerCode.length > 0) {
						var thisURL = 'http://' + submitURL + '/amid/car/' + providerCode + '/' + pickupLocation + '/ /' + dateObject.outputStartDate + '/' + dateObject.outputEndDate + '/0/' + carPickupTime + '/' + carDropOffTime;
						tsam_AddURLToOpen(thisURL);
					}
				}
			}
		}
		tsam_OpenAllURLs();
	}

	function searchCruises(form){
		getSubmitUrl();
		var destination = document.getElementById("cruiseTo").value;
		var cruiseOperator = 'ALL'; //document.getElementById("cruiseLine").value;
		var cMonth = document.getElementById("cruiseMonth").value;
		var cLength = document.getElementById("cruiseLength").value;

		tsam_InitURLArray();
		for (var i = 0; i < form.elements.length; i++) {
			if (form.elements[i].type == 'checkbox') {
				if (form.elements[i].checked) {
					var providerCode = '';
					switch (form.elements[i].id) {
						case 'cruiseOrbitz':			providerCode = 'orbitz-cruise'; break;
						case 'cruiseTravelocity':		providerCode = 'travelocity-cruise'; break;
						case 'cruiseMSC':				providerCode = 'msc'; break;
						case 'cruiseCruisedotcom':		providerCode = 'cruisedotcom'; break;
						case 'cruiseBookingbuddy':		providerCode = 'bookingbuddy-cruise'; break;
						case 'cruiseTripres':			providerCode = 'tripres-cruise'; break;
						case 'cruiseCruisedirect':		providerCode = 'cruisedirect'; break;
						case 'cruiseExpedia':			providerCode = 'expedia-cruise'; break;
						case 'cruiseAvoya':				providerCode = 'avoya-cruise'; break;
						case 'cruiseTravelTicker':		providerCode = 'tt-cruise'; break;
						case 'cruiseDirectLineCruise':	providerCode = 'direct-line-cruise'; break;
					}
					if (providerCode.length > 0) {
						var thisURL = 'http://' + submitURL + '/amid/cruise/' + providerCode + '/' + destination + '/' + destination + '/' + cMonth + '/' + cMonth + '/' + cLength + '/0/0/0/0/0/0/0/' + cruiseOperator;
						tsam_AddURLToOpen(thisURL);
					}
				}
			}
		}
		tsam_OpenAllURLs();
	}

	function searchHotels(form, inFieldSuffix)
	{
		if (inFieldSuffix != undefined) g_FieldSuffix = inFieldSuffix;

		getSubmitUrl();
		var gotChecked = false;
		for (var i = 0; i < form.elements.length; i++){
			if (form.elements[i].type == 'checkbox'){
				if (form.elements[i].checked){
					gotChecked = true;
					break;
				}
			}
		}

		if (gotChecked == false) {
			document.getElementById("hotelAlert").innerHTML = "Please select a provider to search.";
			document.getElementById("hotelAlert").style.display = "block";
		}
		else{
			document.getElementById("hotelAlert").style.display = "none";
		}

		var pkgFrom = document.getElementById("hotelTo" + g_FieldSuffix).value;
		var numAdults = document.getElementById("hotelNumAdults" + g_FieldSuffix).value;
		var numChildren = document.getElementById("hotelNumChildren" + g_FieldSuffix).value;
		var numRooms = document.getElementById("hotelNumRooms" + g_FieldSuffix).value;

		var dateObject = {
			fldStartDate: 'hotelCheckIn' + g_FieldSuffix
			, fldEndDate: 'hotelCheckOut' + g_FieldSuffix
			, startDateMustBeAfter: 0
			, skipEndDate: false
		};
		if (!ParseDates(dateObject)) return;

		checkCP('hotel');

		// check the number of children - and get their ages
		var child1Age = 0;
		var child2Age = 0;
		var child3Age = 0;

		switch (numChildren) {
			case '3':
				child3Age = document.getElementById("hotelChildThreeAge" + g_FieldSuffix).value;
				if (child3Age == '0') {
					window.alert("Please select an age for Child 3.");
					return;
				}
				if (child3Age == '1') {
					//window.alert("Please call our Reservation Specialists at 1-800-321-2121 to book a child under the age of 2.");
					return;
				}
			case '2':
				child2Age = document.getElementById("hotelChildTwoAge" + g_FieldSuffix).value;
				if (child2Age == '0') {
					window.alert("Please select an age for Child 2.");
					return;
				}
				if (child2Age == '1') {
					//window.alert("Please call our Reservation Specialists at 1-800-321-2121 to book a child under the age of 2.");
					return;
				}
			case '1':
				child1Age = document.getElementById("hotelChildOneAge" + g_FieldSuffix).value;
				if (child1Age == '0'){
					window.alert("Please select an age for Child 1.");
					return;
				}
				if (child1Age == '1'){
					//window.alert("Please call our Reservation Specialists at 1-800-321-2121 to book a child under the age of 2.");
					return;
				}
				break;
		}

		tsam_InitURLArray();
		for (var i = 0; i < form.elements.length; i++){
			if (form.elements[i].type == 'checkbox'){
				if (form.elements[i].checked) {
					var providerCode = '';
					switch (form.elements[i].id){
						case 'hotelOrbitz' + g_FieldSuffix:				providerCode = 'orbitz-hotel'; break;
						case 'hotelTravelTicker' + g_FieldSuffix:		providerCode = 'travelticker-hotel'; break;
						case 'hotelHotwire' + g_FieldSuffix:			providerCode = 'hotwire-hotel'; break;
						case 'hotelPriceline' + g_FieldSuffix:			providerCode = 'priceline-hotel'; break;
						case 'hotelBookit' + g_FieldSuffix:				providerCode = 'bookit-hotel'; break;
						case 'hotelDealbase' + g_FieldSuffix:			providerCode = 'dealbase-hotel'; break;
						case 'hotelBookingbuddy' + g_FieldSuffix:		providerCode = 'bookingbuddy-hotel'; break;
						case 'hotelTripAdvisor' + g_FieldSuffix:		providerCode = 'tripadvisor-hotel'; break;
						case 'hotelMobissimo' + g_FieldSuffix:			providerCode = 'mobissimo-hotel'; break;
						case 'hotelExpedia':							providerCode = 'expedia-hotel'; break;
					}
					if (providerCode.length > 0) {
						var hotelID = '';
						try {
							hotelID = '/hid/' + document.getElementById("tsHotelID" + g_FieldSuffix).value;
							pkgFrom = 'x';
						}
						catch (e) { }
						var thisURL = 'http://' + submitURL + '/amid/hotel/' + providerCode + '/' + pkgFrom + '/' + pkgFrom + '/' + dateObject.outputStartDate + '/' + dateObject.outputEndDate + '/' + numAdults + '/0/0/' + numChildren + '/' + numRooms + '/' + child1Age + '/' + child2Age + '/' + child3Age + hotelID;
						tsam_AddURLToOpen(thisURL);
					}
				}
			}
		}
		tsam_OpenAllURLs();
	}

	function get3CharMonthName(inMonthNum){
		switch(inMonthNum){
			case 0:		return 'Jan';
			case 1:		return 'Feb';
			case 2:		return 'Mar';
			case 3:		return 'Apr';
			case 4:		return 'May';
			case 5:		return 'Jun';
			case 6:		return 'Jul';
			case 7:		return 'Aug';
			case 8:		return 'Sep';
			case 9:		return 'Oct';
			case 10:	return 'Nov';
			case 11:	return 'Dec';
		}
	}
	
	
	function validateUSDate( strValue ) {
/************************************************
DESCRIPTION: Validates that a string contains only
    valid dates with 2 digit month, 2 digit day,
    4 digit year. Date separator can be ., -, or /.
    Uses combination of regular expressions and
    string parsing to validate date.
    Ex. mm/dd/yyyy or mm-dd-yyyy or mm.dd.yyyy

PARAMETERS:
   strValue - String to be tested for validity

RETURNS:
   True if valid, otherwise false.

REMARKS:
   Avoids some of the limitations of the Date.parse()
   method such as the date separator character.
*************************************************/
  var objRegExp = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/
 
  //check to see if in correct format
  if(!objRegExp.test(strValue))
    return false; //doesn't match pattern, bad date
  else{
    var strSeparator = strValue.substring(2,3) 
    var arrayDate = strValue.split(strSeparator); 
    //create a lookup for months not equal to Feb.
    var arrayLookup = { '01' : 31,'03' : 31, 
                        '04' : 30,'05' : 31,
                        '06' : 30,'07' : 31,
                        '08' : 31,'09' : 30,
                        '10' : 31,'11' : 30,'12' : 31}
    var intDay = parseInt(arrayDate[1],10); 

    //check if month value and day value agree
    if(arrayLookup[arrayDate[0]] != null) {
      if(intDay <= arrayLookup[arrayDate[0]] && intDay != 0)
        return true; //found in lookup table, good date
    }
    var intMonth = parseInt(arrayDate[0],10);
    if (intMonth == 2) { 
       var intYear = parseInt(arrayDate[2]);
       if (intDay > 0 && intDay < 29) {
           return true;
       }
       else if (intDay == 29) {
         if ((intYear % 4 == 0) && (intYear % 100 != 0) || 
             (intYear % 400 == 0)) {
              // year div by 4 and ((not div by 100) or div by 400) ->ok
             return true;
         }   
       }
    }
  }  
  return false; //any other values, bad date
}

function tswFetchedDataInfoCallback(inObj){
	cityPairData = inObj;
}

function EvalCheck(inCheckID, inProviderCode, inOutArray)
{
	var tempProviderID, tempProviderName, tempDefaultOKToSearch = false;

	if (document.getElementById(inCheckID) != null) {
		if (document.getElementById(inCheckID).checked) {
			switch (inProviderCode) {
				case "vendorAAV":
					tempProviderID = 12371;
					tempProviderName = "American Airlines Vacations";
					break;
				case "vendorCheapCarib":
					tempProviderID = 12430;
					tempProviderName = "Cheap Caribbean";
					break;
				case "vendorExpediaFlight":
					tempProviderID = 13212;
					tempProviderName = "Expedia";
					tempDefaultOKToSearch = true;
					break;
				case "vendorExpediaPkg":
					tempProviderID = 13214;
					tempProviderName = "Expedia";
					tempDefaultOKToSearch = true;
					break;
			}
			inOutArray.push({
				providerID: tempProviderID
				, providerName: tempProviderName
				, checkName: inCheckID
				, providerCode: inProviderCode
				, defaultOKToSearch: tempDefaultOKToSearch
			});
		}
	}
}

function OKToSearchCityPair(inFrom, inTo, inProviderID, inDefaultValue)
{
	var cityPair_from = cityPairData[inFrom];
	if (cityPair_from) {
		var cityPair_to = cityPair_from[inTo];
		if (cityPair_to) {
			var cityPair_flag = cityPair_to[inProviderID];
			if (!cityPair_flag) return false;
			return true;
		}
	}
	return inDefaultValue;
}

function checkCP(inType){
	var providerArr = new Array();
	var fromField, toField, alertField;
	switch (inType) {
		case "pkg":
			EvalCheck("packageAAV", "vendorAAV", providerArr);
			EvalCheck("packageCheapCarib", "vendorCheapCarib", providerArr);
			EvalCheck("packageExpedia", "vendorExpediaPkg", providerArr);
			fromField = document.getElementById("packageFrom");
			toField = document.getElementById("packageTo");
			alertField = document.getElementById("pkgAlert");
			break;
		case "flight":
			EvalCheck("flightExpedia", "vendorExpediaFlight", providerArr);
			fromField = document.getElementById("flightFrom");
			toField = document.getElementById("flightTo");
			alertField = document.getElementById("flightAlert");
			break;
	}
	var providerMisMatch = "";
	for (var i = 0; i < providerArr.length; i++) {
		var providerInfo = providerArr[i];

		if (fromField.value.length > 0 && toField.value.length > 0) {
			if (parseInt(providerInfo.providerID) > 0) {
				if (!OKToSearchCityPair(fromField.value.toUpperCase(), toField.value.toUpperCase(), parseInt(providerInfo.providerID), providerInfo.defaultOKToSearch)) {
					//document.getElementById(providerInfo.providerCode).style.visibility = "hidden";
					document.getElementById(providerInfo.checkName).checked = false;
					if (providerMisMatch.length > 0) {
						providerMisMatch = providerMisMatch + ' and ';
					}
					providerMisMatch = providerMisMatch + providerInfo.providerName;
					toField.focus();
				}
				else {
					//document.getElementById(providerInfo.checkName).style.visibility = "visible";
					alertField.style.display = "none";
				}
			}
		}
		else {
			//document.getElementById(providerInfo.providerCode).style.visibility = "visible";
			alertField.style.display = "none";
		}
	}
	if (providerMisMatch.length > 0) {
		if (fromField.value.length > 3) {
			alertField.innerHTML = "We couldn't find the city you were looking for - please try a specific 3 character airport code.";
			fromField.focus();
		}
		else if (toField.value.length > 3) {
			alertField.innerHTML = "We couldn't find the city you were looking for - please try a specific 3 character airport code.";
			toField.focus();
		}
		else {
			alertField.innerHTML = "The city codes you have entered are not valid for " + providerMisMatch + ".";
		}
		alertField.style.display = "block";
	}
}

function checkPkgCP(){
	checkCP('pkg');
}

function showChildAgeFields(inType){
	return;
	switch(inType){
		case "pkg":
			var childCount = document.getElementById("packageNumChildren").value;
			if (childCount > 0){
				document.getElementById("caRow").style.display = "block";
				switch(childCount){
					case '1':
						document.getElementById("packageAgeOne").style.display = "block";
						document.getElementById("packageAgeTwo").style.display = "none";
						document.getElementById("packageAgeThree").style.display = "none";
						break;
					case '2':
						document.getElementById("packageAgeOne").style.display = "block";
						document.getElementById("packageAgeTwo").style.display = "block";
						document.getElementById("packageAgeThree").style.display = "none";
						break;
					case '3':
						document.getElementById("packageAgeOne").style.display = "block";
						document.getElementById("packageAgeTwo").style.display = "block";
						document.getElementById("packageAgeThree").style.display = "block";
						break;
				}
			}
			else{
				document.getElementById("caRow").style.display="none";
			}
			break;
		case "hotel":
			var childCount = document.getElementById("hotelNumChildren").value;
			if (childCount > 0){
				document.getElementById("hotelcaRow").style.display = "block";
				switch(childCount){
					case '1':
						document.getElementById("hotelAgeOne").style.display = "block";
						document.getElementById("hotelAgeTwo").style.display = "none";
						document.getElementById("hotelAgeThree").style.display = "none";
						break;
					case '2':
						document.getElementById("hotelAgeOne").style.display = "block";
						document.getElementById("hotelAgeTwo").style.display = "block";
						document.getElementById("hotelAgeThree").style.display = "none";
						break;
					case '3':
						document.getElementById("hotelAgeOne").style.display = "block";
						document.getElementById("hotelAgeTwo").style.display = "block";
						document.getElementById("hotelAgeThree").style.display = "block";
						break;
				}
			}
			else{
				document.getElementById("hotelcaRow").style.display="none";
			}
			break;
	}
}

function ProcessObjectDate(inObject, inTextMember, inArrayMember, inProcessedMember, inOutputMember)
{
	var workText = inObject[inTextMember];
	workText = workText.replace("/", "-");
	workText = workText.replace("/", "-");
	workText = workText.replace('.', '-');
	workText = workText.replace('.', '-');
	inObject[inTextMember] = workText;

	var workArr = workText.split("-");
	for (x in workArr) {
		if (workArr[x].length < 2) {
			workArr[x] = "0" + workArr[x];
		}
	}
	inObject[inTextMember] = workArr.join("-");
	inObject[inArrayMember] = workArr;

	var tmpDate = new Date();
	tmpDate.setFullYear(workArr[2], workArr[0] - 1, workArr[1]);
	inObject[inProcessedMember] = tmpDate;
	inObject[inOutputMember] = tmpDate.getFullYear() + '-' + (tmpDate.getMonth() + 1) + '-' + tmpDate.getDate();
}
function ParseDates(inDatesObject)
{
	var today = new Date();
	inDatesObject.startDateText = document.getElementById(inDatesObject.fldStartDate).value;
	inDatesObject.endDateText = document.getElementById(inDatesObject.fldEndDate).value;

	if (! validateUSDate(inDatesObject.startDateText)) {
		window.alert("Invalid Departure Date.");
		return false;
	}
	if (!inDatesObject.skipEndDate) {
		if (!validateUSDate(inDatesObject.endDateText)) {
			window.alert("Invalid Return Date.");
			return false;
		}
	}
	ProcessObjectDate(inDatesObject, "startDateText", "startArray", "startProcessedDate", "outputStartDate");
	if (!inDatesObject.skipEndDate) ProcessObjectDate(inDatesObject, "endDateText", "endArray", "endProcessedDate", "outputEndDate");

	if (!inDatesObject.skipEndDate) {
		if (inDatesObject.startProcessedDate > inDatesObject.endProcessedDate) {
			window.alert("Your Return Date Must Be After Your Departure Date");
			return false;
		}
	}

	if (inDatesObject.startDateMustBeAfter > 0) {
		// make sure the departure date is "startDateMustBeAfter" days out from today
		if (Math.floor((inDatesObject.startProcessedDate.getTime() - today.getTime()) / (1000 * 60 * 60 * 24)) < (inDatesObject.startDateMustBeAfter)) {
			window.alert("Departing date must be at least " + inDatesObject.startDateMustBeAfter + " days away.");
			return false;
		}
	}

	return true;
}

function isNumeric(sText){
	var validChars = "0123456789.";
	var IsNumber=true;
	var Char;

	for (i = 0; i < sText.length && IsNumber == true; i++){ 
		Char = sText.charAt(i); 
		if (validChars.indexOf(Char) == -1){
			IsNumber = false;
		}
	}
	return IsNumber;
}

var g_ParsedTSD = '';
var g_ParsedTSO = '';
function tsParseURLForDefaultSearch() {
	try {
		if (tssw_SetOW) {
			document.getElementById("tsFlightOW").checked = true;
			document.getElementById("tsFlightRT").checked = false;
			HandleOWClick();
		}
	}
	catch (e) { }
	var query = window.location.search.substring(1);
	if (query != undefined && query != "") {
		if (query.length < 1) return;

		var paramList = query.split("&");
		for (var i = 0; i < paramList.length; i++) {
			var paramParts = paramList[i].split("=");
			tsParseParam(paramParts[0], paramParts[1]);
		}
	}
	var urlArray = window.location.href.split("/");
	for (var i = 3; i < urlArray.length; i++) {
		if (tsParseParam(urlArray[i], urlArray[i + 1])) {
			i++;
		}
	}
	try { tsParseParam("tsd", tssw_Dest); } catch (e) { }
	try { tsParseParam("tso", tssw_Origin); } catch (e) { }
}

function tsParseParam(inParamName, inValue)
{
	if (inValue == undefined) return false;

	var didParse = true;
	switch (inParamName) {
		case "tso":
			tsSetField("flightFrom,packageFrom", inValue);
			g_ParsedTSO = inValue;
			break;
		case "tsd":
			tsSetField("flightTo,packageTo,hotelTo,carLocation", inValue);
			g_ParsedTSD = inValue;
			break;
		case "tsl":
			tsSetField("flightDepart,packageDepart,hotelCheckIn,carPickUp", inValue);
			break;
		case "tsr":
			tsSetField("flightReturn,packageReturn,hotelCheckOut,carDropOff", inValue);
			break;
		case "tsp":
			tsSetField("flightNumAdults,packageNumAdults,hotelNumAdults", inValue);
			break;
		case "tscp":
			tsSetField("packageNumChildren,hotelNumChildren", inValue);
			break;
		case "tsrm":
			tsSetField("packageNumRooms,hotelNumRooms", inValue);
			break;
		default:
			didParse = false;
			break;
	}
	return didParse;
}

function tsSetField(inIDList, inValue)
{
	var fieldArray = inIDList.split(",");
	for (var i = 0; i < fieldArray.length; i++) {
			document.getElementById(fieldArray[i]).value = inValue;
	}
}

function HandleOWClick()
{
	if (GetRadioValue("tsFlightOWRT") == "OW") {
		document.getElementById("flightReturn").style.visibility = "hidden";
	}
	else {
		document.getElementById("flightReturn").style.visibility = "visible";
	}
}

function GetRadioValue(inName)
{
	var radioArray = document.getElementsByName(inName);
	for (var i = 0; i < radioArray.length; i++) {
		if (radioArray[i].checked) return radioArray[i].value;
	}
	return "";
}

function HandleEmailSignup()
{
	try {
		if (document.getElementById("tssw_emailSignupAddress") == undefined) return;

		var enteredAddress = document.getElementById("tssw_emailSignupAddress").value;
		if (enteredAddress.length < 1) return;
		var signupURL = "http://www.travelscream.net/tripz/emailSignup.aspx?"
		signupURL += "email=" + enteredAddress
		signupURL += "&sitecode=destination-" + g_ParsedTSD + "-" + g_ParsedTSO
		//		try { signupURL += "&fname=" + document.getElementById("ltEMailSignupName" + workAppend).value; } catch (e) { }
		//		try { signupURL += "&postcode=" + document.getElementById("ltEMailSignupZip" + workAppend).value; } catch (e) { }
		//		if (inPagePos != undefined) signupURL += "&pagepos=" + inPagePos;

		var fileref = document.createElement('script');
		fileref.setAttribute("type", "text/javascript");
		fileref.setAttribute("src", signupURL);
		if (typeof fileref != "undefined") document.getElementsByTagName("head")[0].appendChild(fileref);
	}
	catch (e) { }
}

function HandleEMailSignupClick()
{
	if (GetRadioValue("tssw_emailSignupYesNoRadio") == "yes") {
		document.getElementById("tssw_emailSignupYesNo").style.display = "none";
		document.getElementById("tssw_emailSignupField").style.display = "block";
	}
}


function tsamp_CheckTilePopupParam()
{
	try {
		if (tsParam_tilePopups)
			tssw_tilePopups = true;
		else
			tssw_tilePopups = false;
	}
	catch (e) {
		tssw_tilePopups = false;
	}
	return tssw_tilePopups;
}

var tssw_urlArray;

function tsam_InitURLArray()
{
	tssw_urlArray = new Array();
}

function tsam_AddURLToOpen(inURL)
{
	if (tssw_urlArray == undefined) tssw_urlArray = new Array();
	tssw_urlArray.push(inURL);
}

function tsam_OpenAllURLs()
{
	var maxTilesPerRow = 3;
	var numRows = (Math.floor((tssw_urlArray.length - 1) / maxTilesPerRow) + 1);
	var ucAppend = ts_ucGetBookingCode();

	if (tssw_urlArray == undefined) return;
	if (tsamp_CheckTilePopupParam()) {
		var pad_left = 20;
		var pad_top = 90;

		var maxTilesThisSet = (maxTilesPerRow > tssw_urlArray.length) ? tssw_urlArray.length : maxTilesPerRow;

		var tileWidth = (screen.width - pad_left) / maxTilesThisSet;
		var tileScreenHeight = (screen.height - pad_top);
		var tileHeightIncrement = (tileScreenHeight / numRows);
		var tileVPos = 0;

		var rowCounter = 0;

		// set this to 10, because in chrome if you use 0 things open at parent window left, not screen left
		// plus it keeps us from having things bleed off screen
		var curTileLeft = 10;
		for (var i = 0; i < tssw_urlArray.length; i++) {
			window.open(tssw_urlArray[i] + ucAppend, 'tile' + i, "toolbar=0,menubar=0,width=" + tileWidth + ",height=" + tileHeightIncrement + ",left=" + curTileLeft + ",top=" + tileVPos + ",resizable=1,scrollbars=1");
			rowCounter++;
			curTileLeft += tileWidth;
			if (rowCounter == maxTilesPerRow) {
				rowCounter = 0;
				curTileLeft = 10;
				tileVPos += tileHeightIncrement;
			}
		}
	}
	else {
		for (var i = 0; i < tssw_urlArray.length; i++) {
			window.open(tssw_urlArray[i] + ucAppend);
		}
	}
}

function ts_ucGetBookingCode() 
{
	var foundCode = ts_ucParse();
	if (foundCode.length > 0) {
		return "/uc/" + foundCode;
	}
	return "";
}

function ts_ucParse() 
{
	try {
		var myR = new RegExp("/uc/([a-zA-Z0-9\-_]*)");
		var ucMatch = myR.exec(window.location);
		if (ucMatch != null) {
			if (ucMatch.length > 1) return ucMatch[1];
		}

		myR = new RegExp("uc=([a-zA-Z0-9\-_]*)");
		var ucMatch = myR.exec(window.location);
		if (ucMatch != null) {
			if (ucMatch.length > 1) return ucMatch[1];
		}
	}
	catch (e) { }
	return "";
}

