/*========================================================================================
  
$rcsfile: AvailabilitySearchInput.js $

$Revision: 1.4 $ $Date: 2006/09/07 17:25:26 $

Summary:	JavaScript file for the AvailabilitySearchInput control. Content moved from the C# code.

------------------------------------------------------------------------------------------
This file is part of the Navitaire NewSkies application.
Copyright (C) Navitaire.  All rights reserved.
========================================================================================*/
var cultureDays = new Array('Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa');
var cultureMonths = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
var datePickerFormat = 'mdy';
var datePickerDelimiter = '/';
var datePickerPrevious = '&lt;Prev';
var datePickerNext = 'Next&gt;';
var datePickerClose = 'x';
var datePickerChoose = 'Choose a Date';
$(
function () {



    //debugger;
    var prefix = "#ModifyItineraryFlightSearchAvailabilitySearchInputControl_CheckBoxChangeMarket_";
    var index = $("#selectedMarket").val();
    var variableName;
    if ($("#selectedMarket").val() != null) {
        variableName = prefix + index;
        $(variableName).attr("checked", "checked");
    }

    // Fix Dropdown
    rules = StationsTimeTable["ANYANY"];
    var ruleDate = new Date(rules[0].startdate);
    for (j = 1; j <= 2; j++) {
        var ds = document['SkySales'];
        var dropDownListMarketMonth = applicationJavaScriptHtmlId + '_DropDownListMarketMonth' + j;
        var oList = ds[dropDownListMarketMonth];
        if (oList != undefined) {
            for (i = 12; i >= 0; i--) {
                var mktMonth = oList.options[i].value.substring(5, 7);
                var mktYear = oList.options[i].value.substring(0, 4); ;
                var childDate = new Date(mktYear, mktMonth - 1, '01');
                if ((ruleDate.getFullYear() == childDate.getFullYear()) && (childDate.getMonth() > ruleDate.getMonth())) {
                    oList.remove(i);
                }
                else if (ruleDate.getFullYear() < childDate.getFullYear()) {
                    oList.remove(i);
                }
            }
        }
    }

}
)

var ElementsState = new Array();
var ExistingMarkets = new Array();

function GetDaysInMonth(iYear, iMonth) {
    return 32 - new Date(iYear, iMonth, 32).getDate();
}

function HideShowMarket(mktIx, disp)
{
	$('div#marketCityPair_' + mktIx).css('display', disp);
	HideShowMarketDate(mktIx, disp);
}

function HideShowMarketDate(mktIx, disp)
{
	$('div#marketDate_' + mktIx).css('display', disp);
}
function marketChangeCheckChanged(checkBox, marketIndex)
{
    DisableEnableMarket(marketIndex, !checkBox.checked);
}
function InitializeChange(eventArgs)
{
    DisableEnableMarket(1, true);
    DisableEnableMarket(2, true);
    
}
function DisableEnableMarket(mktIx, disableStatus)
{
	$('div#AVAILABILITYSEARCHINPUT_Market' + mktIx + 'Block').find('input').attr('disabled', disableStatus).end().find('select').attr('disabled', disableStatus);
}

function AvailabilitySearchValues_Validate(validateEventArgs)
{
	if (CheckCities() && CheckDates() && checkCityPairRules() && CheckPassengers() && CheckPaxCount())
	{
		return true;
	}

	return false;
}

function CheckPassengers()
{
	var tooManyInfants = localizedTextTooManyInfants;
	var ds = document['SkySales'];
	var adult = GetSelectedValue(applicationJavaScriptHtmlId + '_DropDownListAdult')*1;
	var child = GetSelectedValue(applicationJavaScriptHtmlId + '_DropDownListChild')*1; 
	var infant = GetSelectedValue(applicationJavaScriptHtmlId + '_DropDownListInfant')*1; 

	if ((adult) && (infant) && (infant > adult))
	{
		alert(tooManyInfants);
		return false;
	}

	return true;
}

function UpdateCalendarDate(updateCalendarDateEventArgs)
{
    var ds = document['SkySales'];
	var dropDownListMarketDay = applicationJavaScriptHtmlId + '_DropDownListMarketDay' + updateCalendarDateEventArgs.passedInfo;
	var dropDownListMarketMonth = applicationJavaScriptHtmlId + '_DropDownListMarketMonth' + updateCalendarDateEventArgs.passedInfo;
			
	var month = updateCalendarDateEventArgs.dateSelected.getMonth() + 1;
	if(month < 10)
	{
		month = '0' + month;
	}
	var day = updateCalendarDateEventArgs.dateSelected.getDate();
	if(day < 10)
	{
		day = '0' + day;
	}
			
	ds[dropDownListMarketMonth].value = updateCalendarDateEventArgs.dateSelected.getFullYear() + '-' + month;
	ds[dropDownListMarketDay].value = day;
}


// find the index of where value is in the list
// and returns the index.
function findIndexByValue(list, value)
{
	var i=0;
	while ( i< list.length )
	{
		if ( list[i].value == value )
			return i;
		i++;
	}
	return -1;
}

function addOption(list, text, value)
{
	var idx = list.length;
	list[idx]=new Option(text);
	list[idx].value=value;
	list.selectedIndex=idx;
	return idx;
}

function setDatesState(state, mktIx)
{
	ElementsState['DropDownListMarketDay'+mktIx] = state;
	ElementsState['DropDownListMarketMonth'+mktIx] = state;
	ElementsState['DropDownListMarketDateRange'+mktIx] = state;
	ElementsState['HyperLinkMarketCalendar'+mktIx] = state;
}

function setPaxsState(state)
{
	ElementsState['DropDownListAdult'] = state;
	ElementsState['DropDownListChild'] = state;
	ElementsState['DropDownListInfant'] = state;
	ElementsState['PassengersBlock'] = state;
}

function setMarketState(state, mktIx)
{
	ElementsState['Market'+mktIx+'Block'] = state;
}

function validateElement(elementName)
{
	if ((document['SkySales'][applicationJavaScriptHtmlId + '_' + elementName]) && (ElementsState[elementName]!= 'cancel') ) 
		return true;
	return false;
}

function GetMarketStructure()
{
	var selected = $("div#travelOptions input:checked").val();
	if (selected=='OneWay')
	{
		numMarketsToValidate=1;
		numDatesToValidate=1;
	}
	else if (selected=='RoundTrip')
	{
		numMarketsToValidate=1;
		numDatesToValidate=2;
	}
	else if (selected=='OpenJaw')
	{
		numMarketsToValidate=2;
		numDatesToValidate=2;
	}
	else 
	{
		numMarketsToValidate=applicationNumberOfMarketsToOffer; //set to max
		numDatesToValidate=applicationNumberOfMarketsToOffer;
	}

	return selected;			
}

/*
* Validates that the first departure date selected is not before the current date
* Validates that the date for marketN is not earlier than marketN-1
*/
function CheckDates()
{	
	var ds=document['SkySales'];					
	var dateToCompare = applicationFormatedDate; 
	var dayToday = applicationFormatedDay;
	var monthYearValue = applicationFormatedDateTime;
	var marketIndexToChange = $("#marketIndexToChange").text();
	for (var mktIx=1; mktIx<=numDatesToValidate; mktIx++)
	{
		if (MarketAction[mktIx] == 'Cancel')
			continue;

		if (!validateElement('DropDownListMarketDay' + mktIx))
			continue;

		var mktDay = ds[applicationJavaScriptHtmlId + '_DropDownListMarketDay'+mktIx].options[ds[applicationJavaScriptHtmlId + '_DropDownListMarketDay'+mktIx].selectedIndex].value;
		var mktMonth = ds[applicationJavaScriptHtmlId + '_DropDownListMarketMonth'+mktIx].options[ds[applicationJavaScriptHtmlId + '_DropDownListMarketMonth'+mktIx].selectedIndex].value.substring(5, 7);
		var mktYear	= ds[applicationJavaScriptHtmlId + '_DropDownListMarketMonth'+mktIx].options[ds[applicationJavaScriptHtmlId + '_DropDownListMarketMonth'+mktIx].selectedIndex].value.substring(0, 4);
		var mktMonthText = ds[applicationJavaScriptHtmlId + '_DropDownListMarketMonth'+mktIx].options[ds[applicationJavaScriptHtmlId + '_DropDownListMarketMonth'+mktIx].selectedIndex].text;
		var mkt2Lines = 0;	// TODO: set this to 1 if/when mkt2 month and day lists have a default '-' item at index 0.
		var mktDate = ''+mktYear+mktMonth+mktDay;
		
		if (! CheckDaysOfMonth(mktDay, mktMonth, mktYear))
		{
			alert(localizedTextInvalidDate);
			return false;
		}
		
		// don't check date if liftstatus is not default
		if(MarketLiftStatus[mktIx] == null)
		{
		    MarketLiftStatus[mktIx] = "Default";
		}
		
		if (mktDate < dateToCompare && MarketLiftStatus[mktIx]== applicationLiftStatus && (marketIndexToChange == "" || marketIndexToChange == mktIx))
		{
			if (mktIx == 1)
			{
				// if dptr of first market is past date, display alert and set to current date
				var msg=localizedTextPastDatePre;

				// don't want to reset the date when it's not 'change'
				// 'retain' is supposed to keep the old dates
				if (MarketAction[mktIx]=='New' || MarketAction[mktIx]=='Change')
				{
					msg=msg+localizedTextPastDatePost;
					alert(msg);
					ds[applicationJavaScriptHtmlId + '_DropDownListMarketDay'+mktIx].options.selectedIndex = dayToday - 1;
					ds[applicationJavaScriptHtmlId + '_DropDownListMarketMonth'+mktIx].options.selectedIndex = findIndexByValue(ds[applicationJavaScriptHtmlId + '_DropDownListMarketMonth'+mktIx],monthYearValue);
				}
				else
					alert(msg);
				return false;
			}
			else
			{
				var msg=localizedTextEarlierDatePre;
				if (MarketAction[mktIx]=='New' || MarketAction[mktIx]=='Change')
				{
					msg=msg+localizedTextEarlierDatePost;
					alert(msg);
					ds[applicationJavaScriptHtmlId + '_DropDownListMarketDay'+mktIx].options.selectedIndex = eval(ds[applicationJavaScriptHtmlId + '_DropDownListMarketDay'+(mktIx-1)].options.selectedIndex) + mkt2Lines;
					ds[applicationJavaScriptHtmlId + '_DropDownListMarketMonth'+mktIx].options.selectedIndex = eval(ds[applicationJavaScriptHtmlId + '_DropDownListMarketMonth'+(mktIx-1)].options.selectedIndex) + mkt2Lines;
				}
				else
					alert(msg);
				return false;
			}
		}
		
		dateToCompare = mktDate;

	}

	dateToCompare = applicationFormatedDate;
	
	// look for first market that's not 'Cancel'and not 'Retain'
	// these are the markets where availability will be obtained
	for (var mktIx=1; mktIx<=numDatesToValidate; mktIx++)
	{
		if (MarketAction[mktIx] == 'Cancel' || MarketAction[mktIx] == 'Retain')
			continue;
		if (!validateElement('DropDownListMarketDay' + mktIx))
			continue;

	    var mktDay 	= ds[applicationJavaScriptHtmlId + '_DropDownListMarketDay'+mktIx].options[ds[applicationJavaScriptHtmlId + '_DropDownListMarketDay'+mktIx].selectedIndex].value;
	    var mktMonth	= ds[applicationJavaScriptHtmlId + '_DropDownListMarketMonth'+mktIx].options[ds[applicationJavaScriptHtmlId + '_DropDownListMarketMonth'+mktIx].selectedIndex].value.substring(5, 7);
	    var mktYear	= ds[applicationJavaScriptHtmlId + '_DropDownListMarketMonth'+mktIx].options[ds[applicationJavaScriptHtmlId + '_DropDownListMarketMonth'+mktIx].selectedIndex].value.substring(0, 4);
	    var mktDate = ''+mktYear+mktMonth+mktDay;

	    if (mktDate == dateToCompare && (marketIndexToChange == "" || marketIndexToChange == mktIx))
	    {
//		    var todaysDateMessage = localizedTextTodaysDateMessage;
//		    if (todayDateMsg)
//		    {
//			    alert(todayDateMsg);
//		    }
	    }
	    break; 
	} // end loop to look for first market that's not 'Cancel'and not 'Retain'

	return true;
}

function CompareDates() {
    var secondDate = ds['date_picker_2'].value;
    var firstDate = ds['date_picker_1'].value;

}

var tempEventArgs;
var retryCount = 0;
function UpdateFlightSearch(eventArgs)
{
    alert('In Update');
	//Safe retry if the object hasn't been initialized yet
	if (ExistingMarkets == null || ExistingMarkets.length == 0)
	{
	    alert(ExistingMarkets.length);
	    alert('In Retry');    
		tempEventArgs = eventArgs;
		retryCount++;
		if (retryCount < 4)
		{
			setTimeout('UpdateFlightSearch(tempEventArgs)',50);
		}
		
		return;
	}
	
	alert('Passed Retry'); 
	var allowOpenJaw = applicationOpenJawEnabled;
	var ds = document['SkySales'];

	for (var i=0; i<eventArgs.SelectedModificationsArray.length; i++)
	{

		var orig = ds[applicationJavaScriptHtmlId + '_TextBoxMarketOrigin' + (i+1)];
		var dest = ds[applicationJavaScriptHtmlId + '_TextBoxMarketDestination' + (i+1)]; 
		var listOrigin = ds[applicationJavaScriptHtmlId + '_DropDownListMarketOrigin' + (i+1)]; 
		var listDest = ds[applicationJavaScriptHtmlId + '_DropDownListMarketDestination' + (i+1)]; 
		var day = ds[applicationJavaScriptHtmlId + '_DropDownListMarketDay' + (i+1)];
		var month = ds[applicationJavaScriptHtmlId + '_DropDownListMarketMonth' + (i+1)];

		if ( eventArgs.SelectedModificationsArray[i] == 'Retain')
		{
			var ds = document['SkySales'];
			var idx=-1;
			// revert values to market from existing booking 
			if (orig) orig.value=ExistingMarkets[i+1].orig;
			if (dest) dest.value=ExistingMarkets[i+1].dest;

			if (listOrigin)
			{
					listOrigin.selectedIndex=findIndexByValue(listOrigin,ExistingMarkets[i+1].orig);
					changeDest(listOrigin, listDest, listOrigin,ExistingMarkets[i+1].orig);
					alert("huh");
					idx= findIndexByValue(listDest,ExistingMarkets[i+1].dest);
					if (idx== '-1')
						addOption(listDest,ExistingMarkets[i+1].dest, ExistingMarkets[i+1].dest);
					else
						listDest.selectedIndex=idx;
			}
			if (day) day.selectedIndex=findIndexByValue(day,ExistingMarkets[i+1].day);
			if (month)
			{
			
				idx=findIndexByValue(month,ExistingMarkets[i+1].monthYearValue);
				if (idx== '-1')
					addOption(month, ExistingMarkets[i+1].monthYear, ExistingMarkets[i+1].monthYearValue);
				else
					month.selectedIndex=idx;
					
			}
			// diabled = retained
			setStationsState('retain', i+1);
			setDatesState('retain', i+1);
			setMarketState('retain', i+1);
			setPaxsState('retain');
			MarketAction[i+1] = 'Retain';
		}
		else if ( eventArgs.SelectedModificationsArray[i] == 'Change')
		{
			// enabled = change
			setDatesState('change', i+1);
			setMarketState('change', i+1);
			MarketAction[i+1] = 'Change';
			if (exists('Retain'))
			{
				setPaxsState('retain');
				if (allowOpenJaw)
					setStationsState('change', i+1);
				else
					setStationsState('cancel', i+1);
			}
			else //if all other mkts == Change or Cancel
			{
				setStationsState('change', i+1);
				setPaxsState('change');
			}
		}
		else // mkt == 'Cancel'
		{

			if (orig) orig.value=localizedTextTextBoxMarketOrigin;
			if (dest) dest.value=localizedTextTextBoxMarketDestination;

			if (listOrigin)
			{
					listOrigin.selectedIndex=findIndexByValue(listOrigin,'???');
					listDest.selectedIndex=findIndexByValue(listDest,'???');
			}

			// hidden = cancel
			setStationsState('cancel', i+1);
			setDatesState('cancel', i+1);
			setMarketState('cancel', i+1);
			MarketAction[i+1] = 'Cancel';
			if (all('Cancel'))
				setPaxsState('cancel');
		}
	}

	changeInterface();

}

function changeInterface()
{
	if(!document.getElementById || !document.createTextNode)
		return true;

	var ds = document['SkySales'];
	for (var id in ElementsState)
	{
		if (ElementsState[id] == 'retain')
		{
			if (document.getElementById(applicationJavaScriptHtmlId + '_'+id)) document.getElementById(applicationJavaScriptHtmlId + '_'+id).style.display = 'inline';
			if (ds[applicationJavaScriptHtmlId + '_'+id]) ds[applicationJavaScriptHtmlId + '_'+id].disabled = true;
		}
		else if (ElementsState[id] == 'change')
		{
			if (document.getElementById(applicationJavaScriptHtmlId + '_'+id)) document.getElementById(applicationJavaScriptHtmlId + '_'+id).style.display = 'inline';
			if (ds[applicationJavaScriptHtmlId + '_'+id]) ds[applicationJavaScriptHtmlId + '_'+id].disabled = false;
		}
		else if (ElementsState[id] == 'cancel')
		{
			if (document.getElementById(applicationJavaScriptHtmlId + '_'+id)) document.getElementById(applicationJavaScriptHtmlId + '_'+id).style.display = 'none';
		}
	}
}

function ExistingMarket(orig,dest,day,monthYear,monthYearValue)
{
	this.orig = orig;
	this.dest = dest;
	this.day = day;
	this.monthYear = monthYear;
	this.monthYearValue = monthYearValue;
}

function all(action)
{
	var radioGroupCount = applicationNumberOfMarketsToOffer;
	for (var i=1; i<=radioGroupCount; i++)
	{
		if ( GetCheckedValue(applicationHtmlId + 'RadioGroupMarket'+i) != action) return false;
	}
	return true;
}

function exists(action)
{
	var radioGroupCount = applicationNumberOfMarketsToOffer;
	for (var i=1; i<=radioGroupCount; i++)
	{ 
		if ( GetCheckedValue(applicationHtmlId + 'RadioGroupMarket'+i) == action) return true;
	}
	return false;
}

function CheckPaxCount()
{
	var dropDownNames = applicationPassengerArrayValues.split(",");
	var ds = document['SkySales'];
	var paxDropdownRendered = false;
	
	if(document.getElementById && document.createTextNode)
	{
		var paxCount = 0;
		var undefined;

		for(var i=0; i < dropDownNames.length; i++)
		{
			if (ds[dropDownNames[i]] != undefined)
			{
				paxDropdownRendered = true;
				paxCount = paxCount + parseInt(ds[dropDownNames[i]].value);
			}
		}

		if (paxDropdownRendered && paxCount == 0)
		{
			alert(localizedTextLessThanOnePassenger);
			return false;
		}
		else if (paxCount > applicationBookingMaxPassengers)
		{
			alert(localizedTextExceedsMaxPaxAllowed + applicationBookingMaxPassengers);
			return false;
		}
	}
	
	return true;
}

/*
* Validates that there's 1 set of O&D entered if one way is selected
* Validates that there's 1 set of O&D entered if round trip is selected
* Validates that there's 2 sets of O&D entered if open jaw is selected
* For TripPlanner, the number of markets to search is however many was entered
* For Round trip, validates that the origin is the same as the ultimate/last
* destination
* Validates that Origin is not the same as destination
* Sets the global variables numDatesToValidate and numMarketsToValidate
*/
function CheckCities()
{
	var selected   = GetMarketStructure();
		
	var ds = document['SkySales'];
	var stations = new Array();

	var i=-1;
	for (var mktIx=1; mktIx<=numMarketsToValidate; mktIx++)
	{
		if (MarketAction[mktIx] == 'Cancel')
			continue;
			
		if (applicationUseDropDownForStations)
		{
			if (validateElement('DropDownListMarketOrigin' + mktIx))
				{
					i+=1;
					stations[i] = ds[applicationJavaScriptHtmlId + '_DropDownListMarketOrigin' + mktIx];
					if (IsEmpty(stations[i], '???'))
					{
						if ( selected=='TripPlanner' && mktIx>1)
						{
							// an empty origin signals the end of the requested market
							numMarketsToValidate = mktIx-1;
							numDatesToValidate = mktIx-1;
							break;
						}
						else
						{
							alert(localizedMissingOrigin);
							return false;
						}
					}
				}
				else if (selected=='TripPlanner' && mktIx>1)
				{
					// an empty origin signals the end of the requested market
					numMarketsToValidate = mktIx-1;
					numDatesToValidate = mktIx-1;
					break;
					
				}

				if (validateElement('DropDownListMarketDestination' + mktIx))
				{
					i+=1;
					stations[i] = ds[applicationJavaScriptHtmlId + '_DropDownListMarketDestination' + mktIx];
					if (IsEmpty(stations[i], '???'))
					{
						alert(localizedMissingDest);
						return false;
					}
					
				}
		
		}
		else
		{
			if (validateElement('TextBoxMarketOrigin' + mktIx))
				{
					i+=1;
					stations[i] = ds[applicationJavaScriptHtmlId + '_TextBoxMarketOrigin' + mktIx];
					if (IsEmpty(stations[i], localizedTextTextBoxMarketOrigin))
					{
						if (selected=='TripPlanner' && mktIx>1)
						{
							// an empty origin signals the end of the requested market
							numMarketsToValidate = mktIx-1;
							numDatesToValidate = mktIx-1;
							break;
						}
						else
						{
							alert(localizedMissingOrigin);
							return false;
						}
					}
				}
				else if (selected=='TripPlanner' && mktIx>1)
				{
					// an empty origin signals the end of the requested market
					numMarketsToValidate = mktIx-1;
					numDatesToValidate = mktIx-1;
					break;
					
				}

				if (validateElement('TextBoxMarketDestination' + mktIx))
				{
					i+=1;
					stations[i] = ds[applicationJavaScriptHtmlId + '_TextBoxMarketDestination' + mktIx];
					if (IsEmpty(stations[i], localizedTextTextBoxMarketDestination))
					{
						alert(localizedMissingDest);
						return false;
					}
					
					if (stations[i].value.toUpperCase() == stations[i-1].value.toUpperCase())
					{
						alert(localizedSameOriginDestination);
						return false;
					}
				}
		}
	} // end loop mktIx<=numMarketsToValidate
	
	if (!applicationOpenJawEnabled)
	{
		var ok = true;
		if (stations.length > 2) 
		{
			for (var i=1; i<stations.length-1; i+=2)
			{
				if (stations[i].value.toUpperCase() != stations[i+1].value.toUpperCase()) 
				{
					ok = false;
					break;
				}
			}
		}
		if (!ok)
		{
			alert (localizedInvalidCityPairs);
			return false;
		}
	}
	
	return true;
} // end of AVAILABILITYSEARCH_checkCities

function setStationsState(state, mktIx)
{
	if (applicationUseDropDownForStations)
	{
		ElementsState['DropDownListMarketOrigin'+mktIx] = state;
		ElementsState['DropDownListMarketDestination'+mktIx] = state;
	}
	else
	{
		ElementsState['TextBoxMarketOrigin'+mktIx] = state;
		ElementsState['TextBoxMarketDestination'+mktIx] = state;
	}
}

function OriginMac(object)
{
    var index =  object.id.substring(object.id.length - 1);
    if(index > 0)
    {
        var checkbox = document.getElementById(applicationJavaScriptHtmlId + '_CheckBoxUseMacOrigin' + index);        
        var checkboxLabel = document.getElementById(applicationJavaScriptHtmlId + '_LabelUseMacOrigin' + index);

        if (checkbox && checkboxLabel)
        {
            setMac(object, checkbox, checkboxLabel);
            // reset the destination macs items
            var destId = object.id;
            destId = destId.replace(/Origin/, "Destination");
            var dest = document.getElementById(destId);
            DestinationMac(dest);
        }
    }
}

function DestinationMac(object)
{
    var index =  object.id.substring(object.id.length - 1);
    if(index > 0)
    {        
        var checkbox = document.getElementById(applicationJavaScriptHtmlId + '_CheckBoxUseMacDestination' + index);        
        var checkboxLabel = document.getElementById(applicationJavaScriptHtmlId + '_LabelUseMacDestination' + index);        
        if (checkbox && checkboxLabel) setMac(object, checkbox, checkboxLabel);
    }
}

function setMac(object, checkbox, checkboxLabel)
{
    if(Stations && object && checkbox && checkboxLabel && object.value &&
     Stations[object.value.toUpperCase()] != null && Stations[object.value.toUpperCase()].macCode.length > 0)
    {	        
	    // hide just the checkbox because the mac code is the selected market (station)
	    if (checkbox)
	    {
	        if ((Stations[object.value.toUpperCase()] != null) && (object.value.toUpperCase() == Stations[object.value.toUpperCase()].macCode.toUpperCase()))
	            checkbox.style.display='none';
	        else
	            checkbox.style.display='block';
	    }
	        
	    if (checkboxLabel)
	    {
	        checkboxLabel.innerHTML = macSearchAllText + Stations[object.value.toUpperCase()].macCode + macCodeSeparator;
	        checkboxLabel.style.display = "block";
	    }
	    
	        
        if (Stations[object.value.toUpperCase()] != null)
        {
	        for(var i in MacsArray[Stations[object.value.toUpperCase()].macCode])
	        {
	            if(i > 0)
	            {
	                checkboxLabel.innerHTML += macCitySeparator;
	                
	            }
	            checkboxLabel.innerHTML +=  MacsArray[Stations[object.value.toUpperCase()].macCode][i];	            
	        }
	    }
	}
	else
	{
	    if (checkbox) 
	    {
	        checkbox.checked = false;	        
	        checkbox.style.display = "none";
	    }
	    if (checkboxLabel) 
	    {
	        checkboxLabel.innerHtml = "";
	        checkboxLabel.style.display = "none";
	    }
	}    
}

function initMacs()
{
    for(var i = 1; i <= applicationNumberOfMarketsToOffer; i++)
    {
	    var orig = document.getElementById(applicationJavaScriptHtmlId + '_TextBoxMarketOrigin' + i);
	    var dest = document.getElementById(applicationJavaScriptHtmlId + '_TextBoxMarketDestination' + i);
	    var listOrigin = document.getElementById(applicationJavaScriptHtmlId + '_DropDownListMarketOrigin' + i);
	    var listDest = document.getElementById(applicationJavaScriptHtmlId + '_DropDownListMarketDestination' + i);
	    
	    if (orig) OriginMac(orig);
	    if (dest) DestinationMac(dest);
	    if (listOrigin) OriginMac(listOrigin);
	    if (listDest) DestinationMac(listDest);
    }
}

function setNewDay(list)
{
    var selectedDay = $('#' + list.id).val();
    var marketIndex = list.id.charAt(list.id.length - 1)
    var theMonth = (parseInt(defaultDepartMonth,10) < 10) ? "0" + parseInt(defaultDepartMonth,10) : defaultDepartMonth;
    var theYear = defaultDepartYear;
    
    if( marketIndex <= 1) //depart
    {
        defaultDepartDay = selectedDay;
        var object = $('#date_picker_id_1');
    }
    else //return
    {
        defaultReturnDay = selectedDay;
        theMonth = (parseInt(defaultReturnMonth,10) < 10) ? "0" + parseInt(defaultReturnMonth,10) : defaultReturnMonth;
        theYear = defaultReturnYear;
        var object = $('#date_picker_id_2');
    }
    if (datePickerFormat = 'mdy')
    {
       selecteddate = theMonth + datePickerDelimiter + selectedDay + datePickerDelimiter + theYear;
    }
    else // dmy
    {
        selecteddate =  selectedDay + datePickerDelimiter + theMonth + datePickerDelimiter + theYear;
    }
    if( object[0] != null)
    {
        object[0].value = selecteddate;
    }
}

function highlightMoveDays(list, className)
{
    if (window.searchinput_initcomplete == undefined)
        return;

    var marketIndex = list.id.charAt(list.id.length - 1)
    var theYear = $('#' + list.id).val().split('-')[0];
    var theMonth = $('#' + list.id).val().split('-')[1];
    var daysAllowed = GetDaysInMonth(theYear, (theMonth - 1));
    var compareYear = defaultDepartYear;
    var compareMonth = (parseInt(defaultDepartMonth,10) < 10) ? "0" + parseInt(defaultDepartMonth,10) : defaultDepartMonth;
    var selectedDay = (parseInt(defaultDepartDay,10) < 10) ? "0" + parseInt(defaultDepartDay,10) : (parseInt(defaultDepartDay,10) > daysAllowed) ? daysAllowed : defaultDepartDay;
    var resetReturnMonth = ( new Date(theYear, theMonth) > new Date(defaultReturnYear, defaultReturnMonth) ) ? true : false;
    
    if( marketIndex > 1) //return
    {
        resetReturnMonth = false;
        compareYear = defaultReturnYear;
        compareMonth = (parseInt(defaultReturnMonth,10) < 10) ? "0" + parseInt(defaultReturnMonth,10) : defaultReturnMonth;
        selectedDay = (parseInt(defaultReturnDay) < 10 ) ? "0" + parseInt(defaultReturnDay): (parseInt(defaultReturnDay) > daysAllowed) ? daysAllowed : parseInt(defaultReturnDay);
    }
    
    if(theYear != compareYear || theMonth != compareMonth )
    {
        $('#' + applicationJavaScriptHtmlId + '_DropDownListMarketDay' + marketIndex).removeOption(/./);
        if( resetReturnMonth )
        {
            $('#' + applicationJavaScriptHtmlId + '_DropDownListMarketDay2').removeOption(/./);
        }
//        daysAllowed = 31;
        for(var i = 1; i <= daysAllowed; i++ )
        {
            var key = i;
            if( key < 10 )
            {
                key = "0" + key;
            }

            var selected = (selectedDay == key) ? true : false;
            //Here we add the days to the Days DropDown 
            $('#' + applicationJavaScriptHtmlId + '_DropDownListMarketDay' + marketIndex).addOption(key, key, selected);
            if( resetReturnMonth )
            {
                $('#' + applicationJavaScriptHtmlId + '_DropDownListMarketDay2').addOption(key, key, selected);
            }
        }

        
        // Bug# 4310 - On 2nd of August, the return date defaulted to Aug 1st
        // This code compares the departure and return dates. If that situation occurs, we just add 7 days to the
        // return date ( provided the return date does NOT exceed the # of days in the current month.

        //Only check this condition when the we are in the same Month
        if ($("#HomeFlightSearchControl_DropDownListMarketMonth1").val() == $("#HomeFlightSearchControl_DropDownListMarketMonth2").val()) {
         
            var departure_day = parseInt($("#HomeFlightSearchControl_DropDownListMarketDay1").val());
            var return_day = parseInt($("#HomeFlightSearchControl_DropDownListMarketDay2").val());

            if (return_day < departure_day && ((departure_day + 7) <= daysAllowed)) {
                return_day = departure_day + 7;

                if (return_day < 10) {
                    selectedDay = "0" + return_day;   //anything less than 9 needs a zero added to the beginning
                }

                else {
                    selectedDay = return_day + "";    //Converts to string (selectedDay is used by the DatePicker)
                }

                $("#HomeFlightSearchControl_DropDownListMarketDay2").val(selectedDay);
            }

        }

        if (datePickerFormat = 'mdy')
        {
            selecteddate = theMonth + datePickerDelimiter + selectedDay + datePickerDelimiter + theYear;
        }
        else // dmy
        {
            selecteddate =  selectedDay + datePickerDelimiter + theMonth + datePickerDelimiter + theYear;
        }

        if( marketIndex <= 1) //depart
        {
            defaultDepartYear = theYear;
            defaultDepartMonth = theMonth;
            defaultDepartDay = selectedDay;
            var object = $('#date_picker_id_1');
            if(object[0] != null)
            {
                object[0].value = selecteddate;
            }
            if( resetReturnMonth )
            {
                defaultReturnYear= theYear;
                defaultReturnMonth = theMonth;
                defaultReturnDay = selectedDay;
                object = $('#date_picker_id_2');
                if( object[0] != null )
                {
                    object[0].value = selecteddate;
                }
                $('#' + list.id.substr(0, list.id.length - 1) + "2").selectOptions(defaultReturnYear + "-" + defaultReturnMonth, true);
            }
        }
        else //return
        {
            defaultReturnYear = theYear;
            defaultReturnMonth = theMonth;
            defaultReturnDay = selectedDay;
            var object = $('#date_picker_id_2');
            if( object[0] != null )
            {
                object[0].value = selecteddate;
            }
        }
    }
}

function highlightMoveOriginCities(marketIndex, className)
{
	// origin city
	try
	{
	    var moveDepartureCities = eval("moveDepartureCities" + marketIndex);
	}
	catch(e)
	{
	    return;
	}
	if(moveDepartureCities != null)
	{
	    var listOrigin = document.getElementById(applicationJavaScriptHtmlId + '_DropDownListMarketOrigin' + marketIndex);
	    for(var i = 0; i < moveDepartureCities.length; i++)
	    {
	        for(var j = 0; j < listOrigin.options.length; j++)
	        {
	            if(moveDepartureCities[i] == listOrigin.options[j].value)
	            {
	                listOrigin.options[j].className = className;
	                break;
	            }
	        }
	    }
	}
}

function highlightMoveDestinationCities(marketIndex, className)
{
	// destination city
	try
	{
	    var moveDepartureCities = eval("moveArrivalCities" + marketIndex);
	}
	catch(e)
	{
	    return;
	}
	if(moveDepartureCities != null)
	{
	    var listOrigin = document.getElementById(applicationJavaScriptHtmlId + '_DropDownListMarketDestination' + marketIndex);
	    
	    for(var i = 0; i < moveDepartureCities.length; i++)
	    {
	        for(var j = 0; j < listOrigin.options.length; j++)
	        {
	            if(moveDepartureCities[i] == listOrigin.options[j].value)
	            {
	                listOrigin.options[j].className = className;
	                break;
	            }
	        }
	    }
	}
}



var defaultDate = new Date();
var defaultDepartYear = defaultReturnYear = defaultDate.getFullYear();
var defaultDepartMonth = defaultReturnMonth = ((defaultDate.getMonth()+1) < 10) ? "0" + (defaultDate.getMonth()+1) : (defaultDate.getMonth()+1);
var defaultDepartDay = defaultReturnDay = (defaultDate.getDate() < 10 ) ? "0" + defaultDate.getDate() : defaultDate.getDate();

$(document).ready(function(){

    // Bug# 4313 - The Fare Type Drop down was moved over to the left. 
    $(".enclosed-box-content").css("width", "315px");

    var updateDates = new Function("AvailabilitySearchInput.dateSelected(this);");
    var theMonth = defaultDate.getMonth();
    var theDay = defaultDate.getDate();
    var theYear = defaultDate.getFullYear();
   
    defaultMinDate = new Date(theYear,theMonth,theDay);
    maxrules = StationsTimeTable["ANYANY"];
    var maxruleDate = new Date(maxrules[0].startdate);
    defaultMaxDate = maxruleDate;
    
    // Fix number of days
    var daysAllowed = GetDaysInMonth(theYear, theMonth);
    var listDepartureDay = $('#' + applicationJavaScriptHtmlId + '_DropDownListMarketDay1');
    for (i=31; i>daysAllowed; i--)
    {
        listDepartureDay[0].remove(listDepartureDay[0].length-1);
    }
    // Most variables are defined in common.xml
    $('input.calendarRange').calendar({autoPopUp: 'button',buttonImageOnly: true, 
        buttonImage: 'images/Base/calendar-up.gif',dateFormat: datePickerFormat.toUpperCase() + '/',
        yearRange: '-0:+1', minDate: defaultMinDate, maxDate: defaultMaxDate,
        dayNames: cultureDays, monthNames: cultureMonths, nextText: datePickerNext, prevText: datePickerPrevious,
        closeText: datePickerClose, buttonText: datePickerChoose, clearText: '', currentText: '',
        changeMonth: false,	changeYear: false, changeFirstDay: false, hideIfNoPrevNext: false });
    $('input.calendarRange').bind('change',updateDates);
    
    // Set Initial Values for return calendar control
    var listReturnMonth = $('#' + applicationJavaScriptHtmlId + '_DropDownListMarketMonth2');
    var listReturnDay = $('#' + applicationJavaScriptHtmlId + '_DropDownListMarketDay2');
    if (listReturnMonth.length > 0)
    {
        defaultReturnYear = listReturnMonth.val().split('-')[0];
        defaultReturnMonth = listReturnMonth.val().split('-')[1];
        defaultReturnDay = listReturnDay.val();
        if (datePickerFormat = 'mdy')
            selecteddate = defaultReturnMonth + datePickerDelimiter + defaultReturnDay + datePickerDelimiter + defaultReturnYear;
        else // dmy
            selecteddate =  defaultReturnDay + datePickerDelimiter + defaultReturnMonth + datePickerDelimiter + defaultReturnYear;
        var object = $('#date_picker_id_2');
        if( object[0] != null )
            object[0].value = selecteddate;
        // Fix number of days    
        var daysAllowed = GetDaysInMonth(defaultReturnYear, (defaultReturnMonth - 1));
        for (i=31; i>daysAllowed; i--)
        {
            listReturnDay[0].remove(listReturnDay[0].length-1);
        }
    }
    // Set Initial Values for return calendar control
    var listDepartMonth = $('#' + applicationJavaScriptHtmlId + '_DropDownListMarketMonth1');
    var listDepartDay = $('#' + applicationJavaScriptHtmlId + '_DropDownListMarketDay1');
    if (listDepartMonth.length > 0) {
        defaultDepartYear = listDepartMonth.val().split('-')[0];
        defaultDepartMonth = parseInt(listDepartMonth.val().split('-')[1]);
        defaultDepartDay = parseInt(listDepartDay.val());
        if (datePickerFormat = 'mdy')
            selecteddate = defaultDepartMonth + datePickerDelimiter + defaultDepartDay + datePickerDelimiter + defaultDepartYear;
        else // dmy
            selecteddate = defaultDepartDay + datePickerDelimiter + defaultDepartMonth + datePickerDelimiter + defaultDepartYear;
        var object = $('#date_picker_id_1');
        if (object[0] != null)
            object[0].value = selecteddate;
        // Fix number of days    
        var daysAllowed = GetDaysInMonth(defaultDepartYear, (defaultDepartMonth - 1));
        for (i = listDepartDay[0].length; i > daysAllowed; i--) {
            listDepartDay[0].remove(listDepartDay[0].length - 1);
        }
    }

    window.searchinput_initcomplete = true;
    
});


AvailabilitySearchInput = new Object();

function pad(number,length) {
        var str = "" + number;
        while (str.length < length)
          str = '0' + str;
        return str;
    }   

AvailabilitySearchInput.CheckDateRanges = function(m1,m2,d1,d2,index)
{
    if (m1.val() == null || d1.val() == null || m2.val() == null || d2.val() == null)
        return;
        
    var ym1 = m1.val().split("-");
    var ym2 = m2.val().split("-");
    if ((ym1[0] > ym2[0]) || ((ym1[0] == ym2[0]) && (ym1[1] > ym2[1])) || ((ym1[0] == ym2[0]) && (ym1[1] == ym2[1]) && (d1.val() > d2.val())))
    {
        if (index == 1)
        {
            var origdate = new Date(ym1[0],ym1[1]-1,d1.val());
            var newdate = new Date(origdate);
            newdate.setDate(origdate.getDate() + 7);
            var dropDownListMarketDay = d2;
            var dropDownListMarketMonth = m2;
            var newindex = 2;
            var changedate = true;
        }
        else 
        {
            var origdate = new Date(ym2[0],ym2[1]-1,d2.val());
            var newdate = new Date(origdate);
            newdate.setDate(origdate.getDate() - 7);
            var dropDownListMarketDay = d1;
            var dropDownListMarketMonth = m1;
            var newindex = 1;
            var changedate = true;            
        }
    }

    if (changedate == true)
    {
        month = parseInt(newdate.getMonth());
        monthIndex = pad(month+1,2);
        var newval = '' + newdate.getFullYear() + '-' + monthIndex;
        var newval2 = newdate.getDate();
        newval2 = '' + pad(newval2,2);
        dropDownListMarketMonth.val(newval);
        dropDownListMarketDay.val(pad(newdate.getDate(),2));
	    if (datePickerFormat = 'mdy')
	        selecteddate = monthIndex + datePickerDelimiter + pad(newdate.getDate(),2) + datePickerDelimiter + newdate.getFullYear();
	    else // dmy
	        selecteddate = pad(newdate.getDate(),2) + datePickerDelimiter + monthIndex + datePickerDelimiter + newdate.getFullYear();
	    var object = $('#date_picker_id_' + newindex);        
        if( object[0] != null )
        {
            object[0].value = selecteddate;
        }
    }
        
}

AvailabilitySearchInput.dateSelected = function (obj) {
    var monthNames = cultureMonths;
    var day = "";
    var month = "";
    var year = "";
    var whichMkt = "";

    if (obj != null) {
        var ds = document['SkySales'];
        var objValue = obj.value;
        var objId = obj.id;
        if (objValue.indexOf(datePickerDelimiter) > -1) {
            var datePickerArray = objValue.split(datePickerDelimiter);
            for (var i = 0; i < datePickerFormat.length; i++) {
                var dateData = datePickerArray[i];
                if (dateData.charAt(0) == '0') {
                    dateData = dateData.substring(1);
                }
                var formatChar = datePickerFormat.charAt(i);
                switch (formatChar) {
                    case 'm': month = dateData; break;
                    case 'd': day = dateData; break;
                    case 'y': year = dateData; break;
                }
            }
            whichMkt = parseInt(objId.substring(objId.length - 1));
            month = parseInt(month);
            month = monthNames[--month];
        }

        //Get the day and month controls to update. whichMkt is hidden field in form.
        var dropDownListMarketDay = applicationJavaScriptHtmlId + '_DropDownListMarketDay' + whichMkt;
        var dropDownListMarketMonth = applicationJavaScriptHtmlId + '_DropDownListMarketMonth' + whichMkt;

        //Get the index number of the month selected, start at -2 so you don't just return 0 or Jan.
        var x = 0;
        var monthIndex = -2;
        for (x = 0; x < monthNames.length; x++) {
            if (monthNames[x] == month) {
                monthIndex = x;
                break;
            }
        }

        //Since array starts at 0 add one and then send it to the padding function for 02 instead of 2.
        monthIndex++;
        monthIndex = pad(monthIndex, 2);

        dayIndex = day;
        dayIndex = pad(dayIndex, 2);

        ds[dropDownListMarketDay].value = '' + dayIndex;
        ds[dropDownListMarketMonth].value = year + '-' + monthIndex;

        // *********************************************************************************************************************
        // Bug# 3422. When a short month like September was selected in the month drop down, then calender clicked, move to next month
        // select 31.  The Month would be updated with October however the Day was left unchanged. The fix was just to populate
        // the selected month Day drop down with the correct number of days.

        $('#' + applicationJavaScriptHtmlId + '_DropDownListMarketDay' + whichMkt).removeOption(/./);

        var daysAllowed = GetDaysInMonth(year, (monthIndex - 1));
        for (var i = 1; i <= daysAllowed; i++) {
            var key = i;
            if (key < 10) {
                key = "0" + key;
            }

            var selected = (dayIndex == key) ? true : false;
            //Here we add the days to the Days DropDown 
            $('#' + applicationJavaScriptHtmlId + '_DropDownListMarketDay' + whichMkt).addOption(key, key, selected);
        }

        //*********************************************************************************************************************

        if (whichMkt <= 1) {
            defaultDepartYear = year;
            defaultDepartMonth = monthIndex;
            defaultDepartDay = dayIndex;
            if (new Date(year, monthIndex, dayIndex) > new Date(defaultReturnYear, defaultReturnMonth, defaultReturnDay)) {
                defaultReturnYear = year;
                defaultReturnMonth = monthIndex;
                defaultReturnDay = dayIndex;
                if ($('#' + applicationJavaScriptHtmlId + '_DropDownListMarketMonth2') != null) {
                    $('#' + applicationJavaScriptHtmlId + '_DropDownListMarketMonth2').selectOptions(defaultReturnYear + '-' + defaultReturnMonth, true);
                    $('#' + applicationJavaScriptHtmlId + '_DropDownListMarketDay2').selectOptions(defaultReturnDay, true);
                }
                if (datePickerFormat = 'mdy') {
                    selecteddate = defaultReturnMonth + datePickerDelimiter + defaultReturnDay + datePickerDelimiter + defaultReturnYear;
                }
                else // dmy
                {
                    selecteddate = defaultReturnDay + datePickerDelimiter + defaultReturnMonth + datePickerDelimiter + defaultReturnYear;
                }

                var object = $('#date_picker_id_2');
                if (object[0] != null) {
                    object[0].value = selecteddate;
                }
            }
        }
        else {
            defaultReturnYear = year;
            defaultReturnMonth = monthIndex;
            defaultReturnDay = dayIndex;
        }

        var calendarLayerObj = document.getElementById("calendarLayer");
        if (calendarLayerObj != null) {
            calendarLayerObj.style.display = 'none';
        }
    }
}


function ReturnDateDisplay()
{
    AvailabilitySearchInput.ToggleMarketOptions();    
}

AvailabilitySearchInput.ToggleMarketOptions = function(){
    GetMarketStructure();
    var travelOptionContainer = $('div#travelOptions');
    var selectedTravelOption = $(':checked', $(travelOptionContainer));
    if(selectedTravelOption.val() == 'RoundTrip')
    {
        if ($("#CheckBoxChangeMarket_1").val() == null)
        {
            $('#marketCityPair_2').hide();
            $('#marketDate_2').show();
        }
    }
    else if(selectedTravelOption.val() == 'OpenJaw')
    {
        $('#marketCityPair_2').show();
        $('#marketDate_2').show();    
    }
    else{
        $('input[value=OneWay]', travelOptionContainer).select();
        $('#marketCityPair_2').hide();
        $('#marketDate_2').hide();    
    }
};

//populate the stations
$(document).ready(function(){
    initMacs();
});

//ensure that the right things are visible onload (defaulting to oneway)
$(document).ready(function(){
    AvailabilitySearchInput.ToggleMarketOptions();
});

//hide the car search onload
$(document).ready(function(){
    $('div#aosAvailabilitySearchDivBody').hide();
    $('div#aosAvailabilitySearchDivBody + div').hide();
    $('div#aosAvailbilitySearchDivHeader').hide();
});

var mode = 'initial';

AvailabilitySearchInput.ToggleAvailabilitySearchForm = function(){
                
                $('div#searchDivHeader').toggle();
                $('div#searchDivHeaderBody').toggle();
                $('div#SearchDivHeaderFooter').toggle();
                
                //hide the ssr div to avoid confusion
                $('div#ssrSearchDivHeader').toggle();
                $('div#ssrSearchDivBody').toggle();
                $('div#ssrSearchDivFooter').toggle();
                
                $('div#aosAvailabilitySearchDivBody').toggle();
                $('div#aosAvailbilitySearchDivFooter').toggle();
                $('div#aosAvailbilitySearchDivHeader').toggle();
};

$(document).ready(function(){
    //check to see if we recieved any parameters from AOS for car availability
    if($("div#aosAvailabilitySearchDivBody :input:visible[type!='submit']").size() != 0)
    {
        $("div#flowType input[id*=_flowSelectCar]").click(function(){        
            if(mode == 'initial'){
                $('#flowType').remove().insertBefore( $('div#aosAvailabilitySearchDivBody div:eq(0)') );
                //With IE the value gets cleared on the remove option so we need to move it first
                $(this).attr('checked','checked');
                AvailabilitySearchInput.ToggleAvailabilitySearchForm();
                mode='swapped';
            }
        });
        
        $("div#flowType input[id*=_flowSelectFlight]").click(function(){
            if(mode=='swapped'){
                //put the div below the search header
                $('#flowType').remove().insertBefore($('div#searchDivHeaderBody div:eq(0)'));
                //With IE the value gets cleared on the remove option so we need to move it first
                $(this).attr('checked','checked');            
                AvailabilitySearchInput.ToggleAvailabilitySearchForm();
                mode = 'initial';
            }
            
        });
    }
    else
    {
        //but by default select flight in this instance (no car parameters)
        $("div#flowType input[id$=_flowSelectFlight]").attr('checked','checked');
        //hide flowtype node if we didn't get any query parameters for cars
        $('div#flowType').hide();
    }
});

//populates the resident country input field
$(document).ready(function(){
    var options = '';
    var selectedItem = '';
    if(countryInfo)
    {
        var selectBox = $('p#AvailabilitySearchInputResidentCountry :input');
        for(var i = 0; i < countryInfo.length; i++)
        {
            if(i == 0)selectedItem = countryInfo[i].ResidentCountryCode;
            options += '<option value="' + countryInfo[i].ResidentCountryCode + '">' + countryInfo[i].ResidentCountry+ '</option>';
        }
        $(selectBox).append(options);
        $(selectBox).val(selectedItem);
        //give it another class
   }    
});


$(document).ready(function(){
    $("div#travelOptions input").click(function(){
        AvailabilitySearchInput.ToggleMarketOptions();
    });
});


//fill the station drop down lists
//$(document).ready(function(){

//    var marketCityPairs = $("#searchDivHeaderBody div[@id*='marketCityPair']")
//    $("select[@id*='DropDownListMarketOrigin']",marketCityPairs).each(function(){
//        fillList(this,'');
//    });
//    
//    $("select[@id*='DropDownListMarketDestination']",marketCityPairs).each(function(){
//        fillList(this,'');
//    });
//    
//    highlightMoveOriginCities(marketCityPairs.length, '');
//    highlightMoveDestinationCities(marketCityPairs.length, '');
//});

var jsLoaded = true;


function checkCityPairRules()
{
    var origin = $('#' + applicationJavaScriptHtmlId + '_DropDownListMarketOrigin1').val();
    var destination = $('#' + applicationJavaScriptHtmlId + '_DropDownListMarketDestination1').val();
    var roundTrip = $('#' + applicationJavaScriptHtmlId + '_RoundTrip').attr("checked");
    var departDate = '';    
    var returnDate = '';
    var monthYear = $('#' + applicationJavaScriptHtmlId + '_DropDownListMarketMonth1').val();
    var theYear = getYearFromDDLValue(monthYear);
    var theMonth = getMonthFromDDLValue(monthYear);
    var theDay = $('#' + applicationJavaScriptHtmlId + '_DropDownListMarketDay1').val();
    departDate = new Date(theYear, theMonth, theDay);
    
    if (roundTrip)
    {
        monthYear = $('#' + applicationJavaScriptHtmlId + '_DropDownListMarketMonth2').val();
        theYear = getYearFromDDLValue(monthYear);
        theMonth = getMonthFromDDLValue(monthYear);
        theDay = $('#' + applicationJavaScriptHtmlId + '_DropDownListMarketDay2').val();
        returnDate = new Date(theYear, theMonth, theDay);
    }    
    return (validateCityPairRules(origin, destination, departDate, returnDate)); 
}

function getYearFromDDLValue(departMonthYear)
{
    if (departMonthYear.indexOf("-") > -1)
    {
        return departMonthYear.substring(0, departMonthYear.indexOf("-"));
    }
    else
    {
        return '';
    }
}

function getMonthFromDDLValue(departMonthYear)
{
    if (departMonthYear.indexOf("-") > -1)
    {
        return new Number(departMonthYear.substring(departMonthYear.indexOf("-") + 1)) - 1;
    }
    else
    {
        return '';
    }
}

function validateCityPairRules(origin, destination, departDate, returnDate)
{
    //debugger;
    var isValid = true;   
    var rule = getCityRule(origin, destination);
    
    if (rule != undefined)
    {        
        var msg = '';
        
        for (var i = 0; i < rule.length; i++)
        {        
            // validate dates of operations
            isInEffect = validateCityPairDates(getDateFromString(rule[i].startdate), getDateFromString(rule[i].enddate), departDate, rule[i].origin, rule[i].destination);
            if (isInEffect) 
            {
                // validate days of operations
                isValid = validateCityPairDays(rule[i].days, departDate);
                if (!isValid) 
                {
                    alert(rule[i].message);
                    return isValid;
                } 
            }            
        }
    }
    
    if (returnDate != '' && isValid == true)
    {
        isValid = validateCityPairRules(destination, origin, returnDate, '');     
    }    
    return isValid;
}

function getDateFromString(stringDate)
{
    var temp = '';
    var year = '';
    var month = '';
    var day = '';
    
    if (stringDate == undefined || stringDate == '' || stringDate == null) return null;
        
    if (stringDate.indexOf("/") > -1)
    {
        month = new Number(stringDate.substring(0, stringDate.indexOf("/"))) - 1;
        temp = stringDate.substring(stringDate.indexOf("/") + 1);
    }    
    if (temp != '' && temp.indexOf("/") > -1)
    {
        day = temp.substring(0, temp.indexOf("/"));
        year = temp.substring(temp.indexOf("/") + 1);
    }       
    return new Date(year, month, day);     
}

function getCityRule(origin, destination)
{
    //debugger;
    var rules = new Array();
    
    if (StationsTimeTable[origin + destination] != undefined)
        rules = rules.concat(StationsTimeTable[origin + destination]);
        
    if (StationsTimeTable["ANY" + destination] != undefined)
        rules = rules.concat(StationsTimeTable["ANY" + destination]);
        
    if (StationsTimeTable[origin + "ANY"] != undefined)
        rules = rules.concat(StationsTimeTable[origin + "ANY"]);
        
    if (StationsTimeTable["ANYANY"] != undefined)
        rules = rules.concat(StationsTimeTable["ANYANY"]);
        
    return rules;
}

function validateCityPairDates(startDate, endDate, dateToValidate, origin, destination)
{
    //debugger;
    var isValid = false; 
    if (origin == "ANY" && destination == "ANY")
    {
        if (dateToValidate > startDate && dateToValidate <= endDate)
        {
            return true;
        }
    }
    else
    {
        if (dateToValidate >= startDate && dateToValidate <= endDate)    
        {
            return true;
        }
    }
    return isValid;
}

function validateCityPairDays(days, dateToValidate)
{
    //debugger;
    var isValid = true;
    switch (dateToValidate.getDay())
    {
        case 0:
            isValid = (days[0].toLowerCase() == 'true')
            break;            
        case 1:
            isValid = (days[1].toLowerCase() == 'true')
            break;    
        case 2:
            isValid = (days[2].toLowerCase() == 'true')
            break;   
        case 3:
            isValid = (days[3].toLowerCase() == 'true')
            break;  
        case 4:
            isValid = (days[4].toLowerCase() == 'true')
            break;             
        case 5:
            isValid = (days[5].toLowerCase() == 'true')
            break;               
        case 6:
            isValid = (days[6].toLowerCase() == 'true')
            break;    
    }
    return isValid;
}


/* START Functions used for market drop down lists, no longer generated code, should be included anywhere that the drop down market hash is desired*/
function changeDest(o, d, dVal, showAlt) {
    if (!document.images) {
        return;
    }
    if (!d) {
        alert("There's no DropDownDest!");
        return;
    }

    // default text => choose from... or going to...
    var dLabel = d.options[0].text;
    var oIx = window.parseInt(o.selectedIndex, 10);
    var dIx = 0;
    var name = '';

    if (oIx > 0) {
        var oVal = o.options[oIx].value;

        // clear and begin new destList
        d.length = 1;
        d.options[0] = new Option(dLabel, '');
        if (d.requiredempty) {
            d.options[0].value = d.requiredempty;
        }

        for (var i = 0; i < SortedStations.length; i++) {
            for (j = 0; j < Stations[oVal].mkts.length; j++) {
                var stnCode = Stations[oVal].mkts[j];

                var station = Stations[stnCode];

                if (station) {

                    if ((SortedStations[i] == stnCode) && (station.validDest == true)) {
                        var code = station.origCode != "" ? station.origCode : stnCode;
                        if (stnCode == dVal) { dIx = d.length; }

                        d.length += 1;
                        if (showStationCodes) {
                            name = station.name + ' (' + code + ')';
                        }
                        else {
                            name = station.name;
                        }
                        d.options[d.length - 1] = new Option(name);
                        d.options[d.length - 1].value = code;
                        break;
                    }
                }
            }

            if (d.length - 1 == Stations[oVal].mkts.length) { break; }
        }

        d.selectedIndex = dIx;
    }
    else {
        fillList(d, dVal, showAlt);
    }
} // end changeDest

function fillList(d, dVal, showAlt) {
    if (!d) {
        alert("There's no DropDownDest!");
        return;
    }
    var dLabel = d.options[0].text;

    if ((dVal == '') && (d.selectedIndex > -1)) {
        dVal = d.options[d.selectedIndex].value;
    }
    var dIx = 0;

    d.length = 1;
    d.options[0] = new Option(dLabel, dVal);
    if (d.requiredempty) {
        d.options[0].value = d.requiredempty;
    }

    var name = '';
    var i = 0;
    for (i = 0; i < SortedStations.length; i++) {
        stnCode = SortedStations[i];
        var station = Stations[stnCode];

        if (!station) {
            continue;
        }

        if (station.validDest == true) {

            if (showAlt || station.origCode == "") {
                // want to display correct code. not the alias
                var code = station.origCode != "" ? station.origCode : stnCode;

                if (dVal == stnCode) {
                    dIx = d.length;
                }
                d.length += 1;
                if (showStationCodes) {
                    name = station.name + ' (' + code + ')';
                }
                else {
                    name = station.name;
                }
                d.options[d.length - 1] = new Option(name);
                d.options[d.length - 1].value = code;
            }
        }
    }

    d.selectedIndex = dIx;

} // end fillList

function Station(code, macCode, name, validOrig, validDest, origCode, mktsArray) {
    this.code = code;
    this.macCode = macCode;
    this.name = name;
    this.validOrig = validOrig;
    this.validDest = validDest;
    this.mkts = mktsArray;
    this.origCode = origCode;

}


/*END Functions used for market drop down lists, no longer generated code, should be included anywhere that the drop down market hash is desired*/



