function adjustAllDates(input,idx) {
    var maxDate = readDate('departing0');
    for (var i=1; i<6; i++) {
        try {
            var thisDate = readDate('departing'+i);
            if(maxDate > thisDate){
                $('#departing'+i).val($.datepicker.formatDate('mm/dd/yy', maxDate));
            } else if (maxDate < thisDate) {
                maxDate = thisDate;
            }
        } catch(err) {/* just ignore; is probably OW or RT, and so departing[2-5] don't exist */}
    }
}


function adjustSelf(input) {
    if (input.name.match(/^departing\d+$/)) {
        var dateIdx = parseInt(input.name.replace(/departing/,''));
        var maxDate = null;
        for (var i=0; i<dateIdx; i++) {
            var thisDate = readDate('departing'+i);
            if(maxDate==null || thisDate > maxDate){
                maxDate=thisDate;
            }
        }
        if (maxDate!=null) { // && maxDate.toString()!='Invalid Date') {
            $('#departing'+dateIdx).datepicker('change', {minDate: maxDate} );
        }
    }
}


function readDate(id){
	date=$('#'+id).datepicker('getDate');
	if (date==null) {
		date=new Date($('#'+id).val());
	}
	return date;
}


function formSubmit(dc, dcDisplay, ac, acDisplay){
	dc = $('#' + dc);
	ac = $('#' + ac);
	dcDisplay = $('#' + dcDisplay);
	acDisplay = $('#' + acDisplay);

	if (!dc.val() && dcDisplay.val())
	{
		dc.val(dcDisplay.val());
	}

	if (!ac.val() && acDisplay.val())
	{
		ac.val(acDisplay.val());
	}
	return true;
}


/* objects used by favorite trip drop-down */

FreqTrip = function (depLoc,depLocDisplay,arrLoc,arrLocDisplay,
                     outDepTimes,outArrTimes,retDepTimes,retArrTimes,airlineList)
{
    this.depLoc=depLoc;
    this.depLocDisplay=depLocDisplay;
    this.arrLoc=arrLoc;
    this.arrLocDisplay=arrLocDisplay;
    this.outDepTimes=outDepTimes;
    this.outArrTimes=outArrTimes;
    this.retDepTimes=retDepTimes;
    this.retArrTimes=retArrTimes;
    this.airlineList=airlineList;
};

FreqTripSelect = function (selectId,depLocId,depLocDisplayId,arrLocId,arrLocDisplayId,
                           outDepTimeCBId,outArrTimeCBId,retDepTimeCBId,retArrTimeCBId,
                           outDepTimeId,outArrTimeId,retDepTimeId,retArrTimeId,airlineIdList)
{
    this.selectId=selectId;
    this.depLocId=depLocId;
    this.depLocDisplayId=depLocDisplayId;
    this.arrLocId=arrLocId;
    this.arrLocDisplayId=arrLocDisplayId;
    this.outDepTimeCBId=outDepTimeCBId;
    this.outArrTimeCBId=outArrTimeCBId;
    this.retDepTimeCBId=retDepTimeCBId;
    this.retArrTimeCBId=retArrTimeCBId;
    this.outDepTimeId=outDepTimeId; //@todo: remove (not used)
    this.outArrTimeId=outArrTimeId; //@todo: remove (not used)
    this.retDepTimeId=retDepTimeId; //@todo: remove (not used)
    this.retArrTimeId=retArrTimeId; //@todo: remove (not used)
    this.airlineIdList=airlineIdList;
    
    this.freqTrips = new Array();
    
    this.addFreqTrip = function (id,depLoc,depLocDisplay,arrLoc,arrLocDisplay,
                                 outDepTimes,outArrTimes,retDepTimes,retArrTimes,airlineList)
    {
	this.freqTrips['id_'+id] = new FreqTrip(depLoc,depLocDisplay,arrLoc,arrLocDisplay,
                                                outDepTimes,outArrTimes,retDepTimes,retArrTimes,airlineList);
    }

    this.resetTimesSlider = function (i,tl,cbId,inputId) 
    {
        $("#"+cbId).attr('checked', false);
        toggleTimesSlider(i,tl,false);
        $("#"+inputId).val('0,1439');
    }

    this.setTimesSlider = function (i,tl,times,oppTimes,cbId,inputId) 
    {
        if (times) {
            $("#"+cbId).attr('checked', true);
            setTimesSlider(i,tl,times[0],times[1]);
            $("#"+inputId).val(times[0]+','+times[1]);
        } else if (tl=='takeoff' && !oppTimes) {
            // this is takeoff, and neither it nor land is specified;
            // just show this one (rather than have neither shown)
            $("#"+cbId).attr('checked', true);
            setTimesSlider(i,tl,0,1439);
            $("#"+inputId).val('0,1439');
        } else {
            this.resetTimesSlider(i,tl,cbId,inputId)
        }
    }
    
    this.fillForm = function (freqTripId)
    {
	//var freqTripId=$("#"+this.selectId+" option:selected").val();
	var id='id_'+freqTripId;
	try {
	    $("#"+this.depLocId).val(this.freqTrips[id].depLoc);
	    $("#"+this.depLocDisplayId).val(this.freqTrips[id].depLocDisplay);
	} catch(err) {/*Don't do anything */}	
	try {
	    $("#"+this.arrLocId).val(this.freqTrips[id].arrLoc);
	    $("#"+this.arrLocDisplayId).val(this.freqTrips[id].arrLocDisplay);
	} catch(err) {/*Don't do anything */}	

	try {
            this.setTimesSlider(0,'takeoff',this.freqTrips[id].outDepTimes,this.freqTrips[id].outArrTimes,this.outDepTimeCBId,this.outDepTimeId);
	} catch(err) {/*Don't do anything */}	
	try {
            this.setTimesSlider(0,'land',this.freqTrips[id].outArrTimes,this.freqTrips[id].outDepTimes,this.outArrTimeCBId,this.outArrTimeId);
	} catch(err) {/*Don't do anything */}	
	try {
            this.setTimesSlider(1,'takeoff',this.freqTrips[id].retDepTimes,this.freqTrips[id].retArrTimes,this.retDepTimeCBId,this.retDepTimeId);
	} catch(err) {/*Don't do anything */}	
	try {
            this.setTimesSlider(1,'land',this.freqTrips[id].retArrTimes,this.freqTrips[id].retDepTimes,this.retArrTimeCBId,this.retArrTimeId);
	} catch(err) {/*Don't do anything */}	

	try {
	    //alert(this.freqTrips.length);
	    //first, clear all airline selects in form
	    var numAirlineSelects=this.airlineIdList.length;
	    for (var i=0; i<numAirlineSelects; i++) {
		$("#"+this.airlineIdList[i]).attr('checked', false);
	    }
	    //next, set airline selects in form to preferred airlines
	    var numPreferredAirlines=this.freqTrips[id].airlineList.length;
	    for (var i=0; i<numPreferredAirlines; i++) {
		var aCode=this.freqTrips[id].airlineList[i];
		$("#"+aCode).attr('checked', true);
	    }
	} catch(err) {/*Don't do anything */}	
    }
};

function displayReturnDate(doDisplay) {
    var val=(doDisplay) ? ("visible") : ("hidden");
    $(".returnDate").css("visibility",val);
    $(".addToFreqTrips").css("visibility",val);
	displayReturnTimes(doDisplay);
}

function displayReturnTimes(doDisplay){
    var val=(doDisplay) ? ("block") : ("none");
    $("#timeReturnWrapper").css("display",val);
}

function changeSearchType(st) {
    window.document.location.href='/search/air/?st='+st;
}
function addMCFlight(i,max) {
    $('.addFlight').css('display','none'); 
    if (i+1 < max) {
        $('#addFlight'+(i+1)).css('display','block');
    }
    $('#searchLeg'+i).css('display','block'); 
}

function adjustAirportCode(hiddenId,displayId) {
    var displayVal=$('#'+displayId).val();
    var curHiddenVal=$('#'+hiddenId).val();
    if (!displayVal || 
	(curHiddenVal && 
	 displayVal.toUpperCase()!=curHiddenVal.toUpperCase() &&
	 displayVal.toUpperCase().indexOf('('+curHiddenVal.toUpperCase()+')')<0)) {  //!displayVal.match( /^\(\w+\)/ )) {
	$('#'+hiddenId).val('');
    }
}

function doAutoCompleteOrigin(event, data, formatted, i) {
    if (data){
        $("#origin"+i+"Code").val(data[1]);
        $("#origin"+i).select();
        $("#destination"+i).focus();
    }else{
        $("#origin"+i+"Code").val('');
    }
}

function doAutoCompleteDestination(event, data, formatted, i) {
    if (data){
        $("#destination"+i+"Code").val(data[1]);
        $("#destination"+i).select();
        $("#departing"+i).focus()	
            }else{
        $("#destination"+i+"Code").val('');
    }
}

function setupFlightFormAutocomplete(){
    suggestDefault = {width: 400, minChars: 3, selectFirst: true, autoFill: false, delay: false, multipleSeparator: '!!'};
    
    // this is hacky, but I couldn't figure out another pass leg index into the autocompletiong methods
    $("#origin0").autocomplete('/user/airport.myt', suggestDefault).result(function(event, data, formatted){doAutoCompleteOrigin(event, data, formatted,0);});
    $("#destination0").autocomplete('/user/airport.myt', suggestDefault).result(function(event, data, formatted) {doAutoCompleteDestination(event, data, formatted,0);});
    $("#origin1").autocomplete('/user/airport.myt', suggestDefault).result(function(event, data, formatted){doAutoCompleteOrigin(event, data, formatted,1);});
    $("#destination1").autocomplete('/user/airport.myt', suggestDefault).result(function(event, data, formatted) {doAutoCompleteDestination(event, data, formatted,1);});
    $("#origin2").autocomplete('/user/airport.myt', suggestDefault).result(function(event, data, formatted){doAutoCompleteOrigin(event, data, formatted,2);});
    $("#destination2").autocomplete('/user/airport.myt', suggestDefault).result(function(event, data, formatted) {doAutoCompleteDestination(event, data, formatted,2);});
    $("#origin3").autocomplete('/user/airport.myt', suggestDefault).result(function(event, data, formatted){doAutoCompleteOrigin(event, data, formatted,3);});
    $("#destination3").autocomplete('/user/airport.myt', suggestDefault).result(function(event, data, formatted) {doAutoCompleteDestination(event, data, formatted,3);});
    $("#origin4").autocomplete('/user/airport.myt', suggestDefault).result(function(event, data, formatted){doAutoCompleteOrigin(event, data, formatted,4);});
    $("#destination4").autocomplete('/user/airport.myt', suggestDefault).result(function(event, data, formatted) {doAutoCompleteDestination(event, data, formatted,4);});
    $("#origin5").autocomplete('/user/airport.myt', suggestDefault).result(function(event, data, formatted){doAutoCompleteOrigin(event, data, formatted,5);});
    $("#destination5").autocomplete('/user/airport.myt', suggestDefault).result(function(event, data, formatted) {doAutoCompleteDestination(event, data, formatted,5);});
}

function setupFlightDatePicker(num){
		$.datepicker.setDefaults({
			showOn: '',
			currentText: 'Choose a date',
			multiPadding: 20,
			speed: '',
			numberOfMonths: 2,
			showStatus: false,
			closeAtTop: false,
			nextText: 'next &raquo;',
			prevText: '&laquo; prev',
			changeMonth: false,
			changeYear: false,
			minDate: new Date(),
			dayNamesMin: ['S','M','T','W','T','F','S']
		});
                for (var i=0; i<6; i++) {
                    try {
                        $("#departing"+i).datepicker({onSelect: adjustAllDates, beforeShow: adjustSelf});
                    } catch(err) {/* just ignore; is probably OW or RT, and so departing[2-5] don't exist */}
                }
                
}

function prePopulateOrigin(idx)
{
    if ($('#origin'+idx).val()=='' && $('#origin'+idx+'Code').val()=='' && $('#destination'+(idx-1)).val()!='') {
        $('#origin'+idx).val($('#destination'+(idx-1)).val());
        $('#origin'+idx+'Code').val($('#destination'+(idx-1)+'Code').val());
    }
}
