
function onlyOneSelected(selectedBox, className) {
	
	if(selectedBox != null && className != null){
		var checkBoxes = getElementsByClass(className, null, null);
		
		if(checkBoxes != null){
			for (k = 0; k < checkBoxes.length; k++) {
				var checkBox= checkBoxes[k];
				
				if(checkBox != null){
					if (checkBox != selectedBox) {					
						checkBox.checked = false;					
					}
				} 
			}	
		}
	}	
}


function enableOrDisableFlightCheckboxes(selectedBox, isFlightboxOut) {
	var checkboxes = document.getElementsByTagName('input');
	
	if (selectedBox.checked == false) {		
		/* a selected box cannot be de-selected by itself */
		selectedBox.checked = true;
	}
	else {
		/* de-select the checkboxes in flight out or in section that is not selected currently */
		for (i = 0; i < checkboxes.length; i++ ) {
			
			if (isFlightboxOut == true) {
				if (checkboxes[i].id.match('flightboxOut')) {
					
					if (checkboxes[i].id != selectedBox.id) {					
						checkboxes[i].checked = false;					
					}
				}
			}
			else {
				if (checkboxes[i].id.match('flightboxIn')) {
					
					if (checkboxes[i].id != selectedBox.id) {
						checkboxes[i].checked = false;
					}
				}
			}
		}
	}
}

function setDepartureAirport(currentOptionId){
	var transportTypeSelect = document.getElementById('checkAvailability:DepartureAirport');
	var currentOption = document.getElementById('checkAvailability:TransportType');
	
	if(currentOption != null && transportTypeSelect != null){
		var selectedValue = "none";
		var currentOptions = currentOption.options;
		if(currentOptions != null){
			for (i = 0; i < currentOptions.length; i++) {
				var singleOption = currentOptions[i];
				if(singleOption != null && (singleOption.selected == true)){
					selectedValue = singleOption.value;
				}	
			}
		}
		
		if(selectedValue != null){
			if(selectedValue != "Flight"){
				for (i = 0; i < transportTypeSelect.options.length; i++) {
					var option = transportTypeSelect.options[i];
								
					if(option != null && ("-1" == option.value)){
						transportTypeSelect.options[i].selected = true;
					}else{
						transportTypeSelect.options[i].selected = false;
					}	
				}
			}
		}	
	}	
	
}

function setFlightAsTransportType(currentOptionId){
	var transportTypeSelect = document.getElementById('checkAvailability:TransportType');
	var currentOption = document.getElementById('checkAvailability:DepartureAirport');
	
	if(currentOption != null && transportTypeSelect != null){
		var selectedValue = "none";
		var currentOptions = currentOption.options;
		if(currentOptions != null){
			for (i = 0; i < currentOptions.length; i++) {
				var singleOption = currentOptions[i];
				if(singleOption != null && (singleOption.selected == true)){
					selectedValue = singleOption.value;
				}	
			}
		}
		
		if(selectedValue != null){
			if(selectedValue != "-1"){
				for (i = 0; i < transportTypeSelect.options.length; i++) {
					var option = transportTypeSelect.options[i];
								
					if(option != null && ("Flight" == option.value)){
						transportTypeSelect.options[i].selected = true;
					}else{
						transportTypeSelect.options[i].selected = false;
					}	
				}
			}
		}	
	}	
}


function enableOrDisableBusCheckboxes(selectedBox, isTransportToByBus) {
	var checkboxes = document.getElementsByTagName('input');
	
	if (selectedBox.checked == false) {		
		/* a selected box cannot be de-selected by itself */
		selectedBox.checked = true;
	}
	else {
		/* de-select the checkboxes or in section that is not selected currently */
		for (i = 0; i < checkboxes.length; i++ ) {
			
			if (isTransportToByBus == true) {
				if (checkboxes[i].id.match('transportToByBus')) {
					
					if (checkboxes[i].id != selectedBox.id) {					
						checkboxes[i].checked = false;					
					}
				}
			}
			else {
				if (checkboxes[i].id.match('transportFromByBus')) {
					
					if (checkboxes[i].id != selectedBox.id) {
						checkboxes[i].checked = false;
					}
				}
			}
		}
	}
}

function enableOrDisableTrainCheckboxes(selectedBox, isTransportToByTrain) {
	var checkboxes = document.getElementsByTagName('input');
	
	if (selectedBox.checked == false) {		
		/* a selected box cannot be de-selected by itself */
		selectedBox.checked = true;
	}
	else {
		/* de-select the checkboxes or in section that is not selected currently */
		for (i = 0; i < checkboxes.length; i++ ) {
			
			if (isTransportToByTrain == true) {
				if (checkboxes[i].id.match('transportToByTrain')) {
					
					if (checkboxes[i].id != selectedBox.id) {					
						checkboxes[i].checked = false;					
					}
				}
			}
			else {
				if (checkboxes[i].id.match('transportFromByTrain')) {
					
					if (checkboxes[i].id != selectedBox.id) {
						checkboxes[i].checked = false;
					}
				}
			}
		}
	}
}
//event when after ajax request complete after pressing alle reizigers checkbox
//selects all travellers, and simulates them being clicked
function allTravellersClicked(chckbx) {
	var checks = findCheckboxesRecursive(chckbx.parentNode.parentNode.parentNode.parentNode.parentNode);
	for (i = 0; i < checks.length; i++) {
		if (checks[i] != null && checks[i].onclick && chckbx.checked) {
			checks[i].checked = true;
			checks[i].onclick();
		}	
	}	
}
//event when after ajax request complete after pressing any traveller checkbox
//deselects all travellers checkbox, and simulates it being clicked
function singleTravellerClicked(chckbx) {
	var checks = findCheckboxesRecursive(chckbx.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode);
	if (checks[0] != null && checks[0].onclick && !chckbx.checked) {
		checks[0].checked = false;
		checks[0].onclick();
	}	
}
//event when after ajax request complete after pressing extra selection checkbox
//opens traveller box and selects all checkboxes in it, and simulates them being clicked 
//or closes traveller box and deselects all checkboxes in it, and simulates them being clicked 
function selectExtraClicked(chckbx, changeValues) {
	var checks = findCheckboxesRecursive(chckbx.parentNode.parentNode.parentNode);
	for (i = 0; i < checks.length; i++) {
		if (checks[i] != null && checks[i].onclick && chckbx.checked) {
			if (changeValues) {
				checks[i].checked = true;
			}
			checks[i].disabled = false;
			checks[i].onclick();
			if (i == 2) {
				checks[i].parentNode.parentNode.parentNode.parentNode.parentNode.style.display = 'block';
			}	
		}
		if (checks[i] != null && checks[i].onclick && !chckbx.checked) {
			if (changeValues) {
				checks[i].checked = false;
			}
			if (i != 0) {
				checks[i].disabled = true;
			}
			checks[i].onclick();
			if (i == 2) {
				checks[i].parentNode.parentNode.parentNode.parentNode.parentNode.style.display = 'none';
			}
		}	
	}	
}
//support method: finds all cheboxes recursively for given node
function findCheckboxesRecursive(elem) {
	var result = new Array();
	var tempResult = new Array();
	var count = 0;
	if (elem.getElementsByTagName) {
		tempResult = elem.getElementsByTagName('input');
	}
	for (var i = 0; i < tempResult.length; i++) {
		if (tempResult[i] != null && tempResult[i].type == 'checkbox') {
			result[count++] = tempResult[i];
		}	
	}	
	return result;
}
//extras onload reopening
function extrasOnloadReopen() {
	try {
		var inputs = document.getElementsByTagName('input');
		for ( var a = 0; a < inputs.length; a++) {
			if (inputs[a].id.match('extraSelectCheckbox') && inputs[a].checked) {
				var checks = findCheckboxesRecursive(inputs[a].parentNode.parentNode.parentNode);
				for ( var j = 0; j < checks.length; j++) {
					if (checks[j] != null && checks[j].onclick
							&& inputs[a].checked) {
						checks[j].disabled = false;
						if (j == 1) {
							checks[j].checked = true;
						}
						for ( var k = 2; k < checks.length; k++) {
							if (!checks[j].checked) {
								checks[1].checked = false;
							}
						}
						if (j == 2) {
							checks[j].parentNode.parentNode.parentNode.parentNode.parentNode.style.display = 'block';
						}
					}
				}
			}
		}
	} catch (e) {
		// TODO: handle exception, but how?
	}
}
