var oldValue='';
var nextCommand;
var controlsDisabled = false;

function initPage() {
	navFrame = window.parent.topFrame;
	nextCommand = page.nextButtonCommand;

	initAirportWrappers();
	
//  setBlockVisibilities();	
}

function initAirportWrappers() {
	var depInput = new InputCoordinator("departurePseudo", "departureFrom");
	var retInput = new InputCoordinator("returnPseudo", "returnTo");

	var depSelect = new SelectWrapper('departureFrom');
	depSelect.otherInputCoord = retInput;
	depSelect.updateOtherSelect = function(code) {
		this.otherInputCoord.updateAirportCode(code);
	}
	
	var retSelect = new SelectWrapper('returnTo');
	retSelect.otherInputCoord = depInput;
	retSelect.updateOtherSelect = function(code) {
		this.otherInputCoord.updateAirportCode(code);
	}
}

function handleBodyOnLoad(navButtonIdToDisplay, nextCommandCode, tabIdToSelect, tabIdsToDisplay,
                isLoggedIn, agencyName) {
    nextCommand = nextCommandCode;
    
    initAirportWrappers();
    		
    if(tabIdToSelect) {
        parent.topFrame.initializeControls(navButtonIdToDisplay,tabIdToSelect,tabIdsToDisplay);
    }

    if(isLoggedIn) {
        parent.topFrame.loggedIn(agencyName);
    } else {
        parent.topFrame.notLoggedIn();
    }
    
//    setBlockVisibilities();

	window.parent.topFrame.enableSubmitters();
    undoBack(window);
}

function setBlockVisibilities() {
	var inputs = document.getElementsByTagName('INPUT');
	for(var i=0; i<inputs.length; ++i) {
		if(inputs[i].type=='checkbox') {
			if(inputs[i].id.indexOf('Selected')>-1) {
				alert(i);
				handleUseCheckboxOnClick(inputs[i]);
			}
		}
	}
}

function disableControls() {
	controlsDisabled = true;
}

function enableControls() {
	controlsDisable = false;
}

function handleNavButtonOnClick() {
	if(validate()) {
    	document.planForm.command.value=nextCommand;
    	document.planForm.submit();
   }
}

function departFromChange() {
	var departureFrom = document.getElementById('departureFrom');
	var returnTo = document.getElementById('returnTo');	
		
	if ((departureFrom.selectedIndex > 0) && (returnTo.selectedIndex <= 0)) {
		returnTo.selectedIndex = departureFrom.selectedIndex;
	}
}

function returnToChange() {
	var departureFrom = document.getElementById('departureFrom');
	var returnTo = document.getElementById('returnTo');
	
	if ((returnTo.selectedIndex > 0) && (departureFrom.selectedIndex <= 0)) {
		departureFrom.selectedIndex = returnTo.selectedIndex;
	}
}

function validate() {
	var mainAirSelected = document.getElementById('mainAirSelected');
	if(mainAirSelected && mainAirSelected.checked==true) {
		var departureFrom = document.getElementById('departureFrom');
		var returnTo = document.getElementById('returnTo');
		
		if (departureFrom.selectedIndex == 0) {
		 	window.parent.topFrame.enableSubmitters();
			alert('Please select a \"depart from\" location.');
			return false;		
		}
		
		if (returnTo.selectedIndex == 0) {
			window.parent.topFrame.enableSubmitters();
			alert('Please select a \"return to\" location.');
			return false;
		}
		
		//disallow combination of ata as airline with published fare type
/*    
		var airlinePrefs = document.getElementById('airlinePreference');
		var airPref = getSelectedValue(airlinePrefs);
		if(airPref=='TZ' || airPref=='tz') {
			var fareTypes = document.getElementById('fareTypePreference');
			var farePref = getSelectedValue(fareTypes);
			if(farePref=='P' || farePref=='p') {
			 	window.parent.topFrame.enableSubmitters();
				alert('ATA only offers contract fares.\nPlease select another fare type or airline.');
				return false;		
			}
		}
*/		
		//check dates both valid and at return later than the departure
		var departDate = document.getElementById('departureDate');
		var returnDate = document.getElementById('returnDate');
		if(!checkDate(departDate)) {
			window.parent.topFrame.enableSubmitters();
			return false;
		}
		
		if(!checkDate(returnDate)) {
			window.parent.topFrame.enableSubmitters();
			return false;
		}
		
		if ((!isFuture(departDate.value)) || (!isFuture(returnDate.value))) {
			alert('Please select dates occuring at least one day in the future.');
			window.parent.topFrame.enableSubmitters();
			return false;			
		}
		
      var departDateObj = makeDate(departDate);
      var returnDateObj = makeDate(returnDate);
		if(signedDaysBetween(departDateObj,returnDateObj)<1) {
			alert('The return date must be later than the departure date.');
			window.parent.topFrame.enableSubmitters();
			return false;
		}
	}
	//find all other page elements
	var roomCount = new Array();
	var carCount = new Array();
	var allInputs = document.getElementsByTagName('INPUT');
	for(var i=0; i<allInputs.length; ++i) {
		var input = allInputs[i];
		if(input.type=='checkbox' && input.checked==true) {
			var inputId = input.id;
			var idParts = inputId.split('_');
			
			//check for connecting air element
/*			no requirement to check any of this as of now
			if(idParts[0]=='interAirSelected') {
				//find all related connecting air attributes and test
				var departDate = document.getElementById('interAirDepartureDate_'+idParts[1]);
			}
*/			
			//check for accommodations element
			/*else*/ if(idParts[0]=='accommodationsSelected') {
				//parse out destination index
				//find all related accommodations attributes and test
				var checkInDate = document.getElementById('checkInDate_'+idParts[1]);
				var checkOutDate = document.getElementById('checkOutDate_'+idParts[1]);
				if(!checkDate(checkInDate,false)) {
					window.parent.topFrame.enableSubmitters();
					alert('The check-in date for the '+getOrdinal(idParts[1])+
						' destination accommodations is invalid.');
					return false;
				}
				if(!checkDate(checkOutDate,false)) {
					window.parent.topFrame.enableSubmitters();
					alert('The check-out date for the '+getOrdinal(idParts[1])+
						' destination accommodations is invalid.');
					return false;
				}
				
				if(!isFuture(checkInDate.value) || !isFuture(checkOutDate.value)) {
					window.parent.topFrame.enableSubmitters();
					alert('Please select check-in and check-out dates occuring at least one day in the future.');
					return false;
				}
				
				if(signedDaysBetween(makeDate(checkInDate),makeDate(checkOutDate))<1) {
					window.parent.topFrame.enableSubmitters();
					alert('The check-out date must be later than the check-in date for the '+
						getOrdinal(idParts[1])+' destination accommodations.');
					return false;
				}
				var nights = document.getElementById('nights_'+idParts[1]);
				if(!isPositiveInteger(nights.value,false)) {
					window.parent.topFrame.enableSubmitters();
					alert('The number of nights must be greater than 0 for the '+
						getOrdinal(idParts[1])+' destination accommodations.');
					return false;
				}
				
				//each room must have at least one adult: for now just record how many rooms for this destination
				//this line will get hit redundantly but isn't very expensive
				roomCount[idParts[1]] = getSelectedValue(document.getElementById('rooms_'+idParts[1]));
				
			}
				
			//check for transportation element
			else if(idParts[0]=='transportationSelected') {
				//parse out destination index
				//find all related transportation attributes and test
				
				//check dates
				var arrivalDate = document.getElementById('arrivalDate_'+idParts[1]);
				var departureDate = document.getElementById('departureDate_'+idParts[1]);
				if(!checkDate(arrivalDate,false)) {
					window.parent.topFrame.enableSubmitters();
					alert('The arrival date for the '+getOrdinal(idParts[1])+
						' destination transportation is invalid.');
					return false;
				}
				if(!checkDate(departureDate,false)) {
					window.parent.topFrame.enableSubmitters();
					alert('The departure date for the '+getOrdinal(idParts[1])+
						' destination transportation is invalid.');
					return false;
				}
				if(!isFuture(arrivalDate.value) || !isFuture(departureDate.value)) {
					window.parent.topFrame.enableSubmitters();
					alert('Please select arrival and departure dates at least one day in the future.');
					return false;			
				}
				if(signedDaysBetween(makeDate(arrivalDate),makeDate(departureDate))<1) {
					window.parent.topFrame.enableSubmitters();
					alert('The departure date must be later than the arrival date for the '+
						getOrdinal(idParts[1])+' destination transportation.');
					return false;
				}
				var transNights = document.getElementById('transNights_'+idParts[1]);
				if(!isPositiveInteger(transNights.value,false)) {
					window.parent.topFrame.enableSubmitters();
					alert('The number of nights must be greater than 0 for the '+
						getOrdinal(idParts[1])+' destination transportation.');
					return false;
				}
				
				var transportationType = getSelectedValue(document.getElementById('transportationType_'+idParts[1]));
				//check rental car rules
				if (transportationType == 'car') {
					//each car must have at least one driver
					carCount[idParts[1]] = getSelectedValue(document.getElementById('numberOfCars_'+idParts[1]));
					
					var paxCount = document.getElementById('car1Table' + idParts[1]).rows.length - 2;
					for (var paxIndex = 0; paxIndex < paxCount; paxIndex++) {
						var driverCount = 0;
						
						for (var carIndex = 0; carIndex < carCount[idParts[1]]; carIndex++) {							
							var driverElement = document.getElementById('car' + (carIndex  + 1) + 'Driver' + paxIndex + '_' + idParts[1]);
							if(driverElement.checked) {
								driverCount++;
							}
							if (driverCount > 1) {
								window.parent.topFrame.enableSubmitters();
								alert('Each passenger can only be designated as the driver of one vehicle. Please adjust your selections accordingly.');
								return false;							
							}
						}
					}
				} else {
					//check transfer rules - no requirements for this yet
				}
			}
		}
	}
	
	//check room occupant rules
	for(var j=0; j<roomCount.length; ++j) {
		//each j represents a destination index
		//each array value indicates the number of rooms for that destination
		//look for adults and infants in each room: <%=j%>room1occupant<%=destinationIndex%>"
		//get the number of rows in the containing table and subtract 2 to get the number of travellers
		var travellers = document.getElementById('roomOccupantTable'+j).rows.length - 2;
		for(var k=0; k<roomCount[j]; ++k) {
			var adultCount = 0;
			for(var m=0; m<travellers; ++m) {
				//get occupant selector: "<%=j%>room1occupant<%=destinationIndex%>"
				var traveller = document.getElementById(m+'room'+(k+1)+'occupant'+j);
				if(traveller && traveller.value=='ADULT' && traveller.checked) {
					++adultCount;
				}
			}
			if(adultCount<1) {
				window.parent.topFrame.enableSubmitters();
				alert(getOrdinal(j)+' destination '+getOrdinal(k)+' room must have at least one adult occupant.');
				return false;
			}
		}
	}
	
	for(var j=0; j<carCount.length; ++j) {
		var numberOfCars = carCount[j];
		for(var k=0; k<numberOfCars; ++k) {//"car1Table<%=destinationIndex%>"
			var drivers = 0;
			var travellers = document.getElementById('car'+(k+1)+'Table'+j).rows.length - 1;
			for(var m=0; m<travellers; ++m) {//"car1Driver<%=k%>_<%=destinationIndex%>"
				var driver = document.getElementById('car'+(k+1)+'Driver'+m+'_'+j);
				if(driver && driver.checked) {
					++drivers;
				}
			}
			if(drivers<1) {
				window.parent.topFrame.enableSubmitters();
				alert(getOrdinal(j)+' destination '+getOrdinal(k)+' car must have at least one driver.');
				return false;
			}
		}
	}
	
	return true;
}

function saveOldValue(valueToSave) {
    oldValue = valueToSave;
}

function handleUseCheckboxOnClick(checkbox) {
    var cbRow = checkbox.parentNode.parentNode;
    var cbTable = cbRow.parentNode;
    var rowIndex = cbRow.rowIndex + 1;
    var rowToHide = cbTable.rows[rowIndex];
    if(checkbox.checked) {
        rowToHide.style.display = '';
    } else {
        rowToHide.style.display = 'none';
    }
}

function handleRoomsOnChange(roomsSelect, occupantCount, pageElementIndex) {
    var roomOptions = roomsSelect.options;
    if(roomOptions[0].selected==true) {
        document.getElementById('room2Column'+pageElementIndex).style.visibility='hidden';
        document.getElementById('room3Column'+pageElementIndex).style.visibility='hidden';
        for(var occupantIndex=0; occupantIndex<occupantCount; ++occupantIndex) {
            var occupantId = occupantIndex+'room2occupant'+pageElementIndex;
            document.getElementById(occupantId).style.visibility='hidden';
            occupantId = occupantIndex+'room3occupant'+pageElementIndex;
            document.getElementById(occupantId).style.visibility='hidden';
        }
    } else if(roomOptions[1].selected==true) {
        document.getElementById('room2Column'+pageElementIndex).style.visibility='visible';
        document.getElementById('room3Column'+pageElementIndex).style.visibility='hidden';
        for(var occupantIndex=0; occupantIndex<occupantCount; ++occupantIndex) {
            var occupantId = occupantIndex+'room2occupant'+pageElementIndex;
            document.getElementById(occupantId).style.visibility='visible';
            var occupantId = occupantIndex+'room3occupant'+pageElementIndex;
            document.getElementById(occupantId).style.visibility='hidden';
        }
    } else if(roomOptions[2].selected==true) {
        document.getElementById('room2Column'+pageElementIndex).style.visibility='visible';
        document.getElementById('room3Column'+pageElementIndex).style.visibility='visible';
        for(var occupantIndex=0; occupantIndex<occupantCount; ++occupantIndex) {
            var occupantId = occupantIndex+'room2occupant'+pageElementIndex;
            document.getElementById(occupantId).style.visibility='visible';
            var occupantId = occupantIndex+'room3occupant'+pageElementIndex;
            document.getElementById(occupantId).style.visibility='visible';
        }
    }
}

function handleCalendarOnClose(targetField, pageElementIndex) {
	if(!controlsDisabled) {
		var Id1 = 'checkInDate' + pageElementIndex;
		var Id2 = 'checkOutDate' + pageElementIndex;
		var Id3 = 'arrivalDate' + pageElementIndex;
		var Id4 = 'departureDate' + pageElementIndex;
		var startId = '';
		var endId = '';
		var nightsId = '';
		
		if((targetField.id==Id1) || (targetField.id==Id2)) {       
	        startId = 'checkInDate';
	        endId = 'checkOutDate';
	        nightsId = 'nights';        
	    } 
	    else if((targetField.id==Id3) || (targetField.id==Id4)) {    	
	        startId = 'arrivalDate';
	        endId = 'departureDate';
	        nightsId = 'transNights';           
		}	
		
	    startId = startId + pageElementIndex;
	    endId = endId + pageElementIndex;
	    nightsId = nightsId + pageElementIndex;
	    
	    dateChanged(targetField, startId, endId, nightsId);    
	}
}

function handleCalendarOnClick(calendarElement) {
	if(!controlsDisabled) {
		openCalendar(calendarElement);
	}
	return true;
}

function handleTransportationTypeOnChange(transportationTypeSelect, pageElementIndex) {
    var options = transportationTypeSelect.options;
    for(var typeIndex=0; typeIndex<options.length; ++typeIndex) {
        var option = options[typeIndex];
        if(option.selected) {
            if(option.value=='transfer') {
                document.getElementById('carsSelectorRow'+pageElementIndex).style.display = 'none';
                document.getElementById('carsTables'+pageElementIndex).style.display = 'none';
                document.getElementById('transferDetails'+pageElementIndex).style.display = '';

            } else {
                document.getElementById('carsSelectorRow'+pageElementIndex).style.display = '';
                document.getElementById('carsTables'+pageElementIndex).style.display = '';
                document.getElementById('transferDetails'+pageElementIndex).style.display = 'none';
            }
            break;
        }
    }
}

function handleNumberOfCarsOnChange(numberOfCarsSelect, pageElementIndex) {
    var numberOfCarsOptions = numberOfCarsSelect.options;
    var numberOfCarsSelected = 1;
    for(var carsIndex=0; carsIndex<numberOfCarsOptions.length; ++carsIndex) {
        if(numberOfCarsOptions[carsIndex].selected) {
            numberOfCarsSelected += carsIndex;
            break;
        }
    }
    if(numberOfCarsSelected==3) {
        document.getElementById('car2Table'+pageElementIndex).style.visibility='visible';
        document.getElementById('car3Table'+pageElementIndex+'row').style.display='';
        document.getElementById('car3TableSpacer'+pageElementIndex).style.display='';
    } else if(numberOfCarsSelected==2) {
        document.getElementById('car2Table'+pageElementIndex).style.visibility='visible';
        document.getElementById('car3Table'+pageElementIndex+'row').style.display='none';
        document.getElementById('car3TableSpacer'+pageElementIndex).style.display='none';
    } else {
        document.getElementById('car2Table'+pageElementIndex).style.visibility='hidden';
        document.getElementById('car3Table'+pageElementIndex+'row').style.display='none';
        document.getElementById('car3TableSpacer'+pageElementIndex).style.display='none';
    }
}
