/*

	Ajax javascript. Implemented with DWR.

*/
function listAFSubcategories() {
	var category = dwr.util.getValue("category");
	if (category != "") {
	  	ReferenceData.listSubcategories(category, function(subcategories) {
			var inputHTML = "";
			var subcategory;
			for (var i = 0; i < subcategories.length; i++) {
			 	 subcategory = subcategories[i];
				 inputHTML += '<input type="radio" value="' + subcategory.code + '" ';
				 inputHTML += 'name="incidentTypeSubcategoryCode" class="radio"';
				 if (i==0) {
				 	inputHTML += ' checked="checked" ';
				 }
				 inputHTML += '/>'+ subcategory.name +'<br />';
		 	}
		  	document.getElementById("subcategory").innerHTML = inputHTML;
	  	});
	} else {
		document.getElementById("subcategory").innerHTML = "";
	}
	if (category == 'BGG') {
  		showBaggageField();
  		showBaggageMessage();
  	} else {
  		closeBaggageField();
  	}
}

function listKLSubcategories() {
	var objSubCat = document.getElementById("subcategory");
	objSubCat.disabled = false;

	var category = dwr.util.getValue("category");
	dwr.util.removeAllOptions("subcategory");
	if (category != "") {
		ReferenceData.listSubcategories(category, function(subcategories) {
			dwr.util.addOptions("subcategory", subcategories, "code", "name");
		});
	}
	bggHandling();
	
}

function listRegions() {
	var country = dwr.util.getValue("country");
	var region = dwr.util.getValue("province");
	dwr.util.removeAllOptions("province");
	
	if (country != "") {
	  	ReferenceData.listRegions(country, function(regions) {
	  	 	if (regions.length == 0) {
				hideProvinceField();		  	 	
	  	 	} else {
				dwr.util.addOptions("province", regions, "code", "name");
			  	showProvinceField();
			  	document.getElementById("province").value = region;
			}
	  	});
	} else {
		hideProvinceField();
	}
}

function changeFlightCompany() {
	var airlineCode = dwr.util.getValue("flightCompanyCode");
	var flightNotApplicable = dwr.util.getValue("flightNumberCheck");
	if(flightNotApplicable != true){
		if(airlineCode == "OTHERS"){
			dwr.util.setValue("reservation.segment.flightNumberPrefix", "");
	    }else {    
			dwr.util.setValue("reservation.segment.flightNumberPrefix", airlineCode);
		}
	}else {
	    if(document.getElementById("flightCompanyCode") != null ){
			document.getElementById("flightCompanyCode").value = "";
		}
		if(document.getElementById("flightNumberPrefix") != null ){
			document.getElementById("flightNumberPrefix").value = "";
		}
		
	}
	listProducts();
}

function listProducts() {
	var airlineCode = dwr.util.getValue("flightCompanyCode");
	dwr.util.removeAllOptions("product");
	if (airlineCode != "") {
		ReferenceData.listProducts(airlineCode, function(products) {
			dwr.util.addOptions("product", products, "code", "name");
		});
	}
}

function listDepartureAirports() {
	var countryCode = dwr.util.getValue("departure_airport_country"); 
	dwr.util.removeAllOptions("departure_airport");
	if (countryCode != "") {
		ReferenceData.listAirports(countryCode, function(airports) {
			var selectAirport = document.getElementById("departure_airport");
			var selectedCountryIndex = document.getElementById("departure_airport_country").selectedIndex;
			var countryName = document.getElementById("departure_airport_country")[selectedCountryIndex].text;
			for (var i = 0; i < airports.length; i++) {
				airport = airports[i];
				if(airport.code != 'ZZZ'){  /*ZZZ ->default code */
					selectAirport.options[i] = new Option(airport.city + ", " + airport.name + " (" + airport.code + ") - " + countryName, airport.code);
				}else {
					selectAirport.options[i] = new Option(airport.city + airport.name + " (" + airport.code + ")");
				}
			}
		});
	}
}

function listArrivalAirports() {
	var countryCode = dwr.util.getValue("arrival_airport_country"); 
	dwr.util.removeAllOptions("arrival_airport");
	if (countryCode != "") {
		ReferenceData.listAirports(countryCode, function(airports) {
			var selectAirport = document.getElementById("arrival_airport");
			var selectedCountryIndex = document.getElementById("arrival_airport_country").selectedIndex;
			var countryName = document.getElementById("arrival_airport_country")[selectedCountryIndex].text;
			for (var i = 0; i < airports.length; i++) {
				airport = airports[i];
				if(airport.code != 'ZZZ'){ /* ZZZ ->default code */
					selectAirport.options[i] = new Option(airport.city + ", " + airport.name + " (" + airport.code + ") - " + countryName, airport.code);
				}else {
					selectAirport.options[i] = new Option(airport.city + airport.name + " (" + airport.code + ")");
				}
			}
		});
	}
}

function addEvent(elm, evt, fn) {
	if (elm.addEventListener) {
		elm.addEventListener(evt, fn, false);
		return true;
	}
	else if (elm.attachEvent) {
		var r = elm.attachEvent('on'+evt, fn);
		return r;
	}
	else {
		elm['on'+evt] = fn;
	}
}


var selectDepartAirportFromAutoFill = function(evt) {
	var aRE = /^a$/i
	evt = (evt) ? evt : ((window.event) ? event : null);
		if (evt) {
		   	var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
		   	if (elem && aRE.test(elem.nodeName)) {
				var airport = elem.innerHTML;
				document.getElementById("departure").value = airport;
				if(document.getElementById("departAirportCheck") != null)
					document.getElementById("departAirportCheck").focus();
				else document.getElementById("airportDepartList").focus();
				$('autocompletefill_departure').style.display = 'none';
			}
		}
}
var selectArrivalAirportFromAutoFill = function(evt) {
	var aRE = /^a$/i
	evt = (evt) ? evt : ((window.event) ? event : null);
		if (evt) {
		   	var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
		   	if (elem && aRE.test(elem.nodeName)) {
				var airport = elem.innerHTML;
				document.getElementById("arrival").value = airport;
				if(document.getElementById("arrivalAirportCheck") != null)
					document.getElementById("arrivalAirportCheck").focus();
				else document.getElementById("airportArriveList").focus();
				$('autocompletefill_arrival').style.display = 'none';	
			}
		}
}


var navigateInDepartureList = function (evt) {
			evt = (evt) ? evt : ((window.event) ? event : null);
			var depart_autocomplete = document.getElementById("autocomplete_departure");
			if (evt && (evt.keyCode == 40 || evt.keyCode == 38 || evt.keyCode == 13)) {
				var as = depart_autocomplete.childNodes;
				for (var i=0;i < as.length; i++) {
					var a = as[i];
					if (a.className == 'selected') {
						
						if(evt.keyCode == 40 && a.nextSibling != null) {
							a.className = "";
							a.nextSibling.className = "selected";    
							depart_autocomplete.scrollTop = a.nextSibling.offsetTop - 20;
						}
						else if(evt.keyCode == 38 && a.previousSibling != null) {
							a.className = "";
							a.previousSibling.className = "selected";    
							depart_autocomplete.scrollTop = a.previousSibling.offsetTop - 20;
						} 
						else if(evt.keyCode == 13) {
							a.className = "";
							var airport = a.innerHTML;
							document.getElementById("departure").value = airport;
							depart_autocomplete.parentNode.style.display = "none";
							
							//depart_autocomplete.style.display = "none";
							//document.getElementById("departure").blur();
						}
						
						evt.cancelBubble = true;
						return false;
					}
				}
				if (as.length > 0 && evt.keyCode == 40) {
					as[0].className = 'selected';
					depart_autocomplete.scrollTop = 0;
					return false;	
				}
			}
}	

var navigateInArrivalList = function (evt) {
			evt = (evt) ? evt : ((window.event) ? event : null);
			var depart_autocomplete = document.getElementById("autocomplete_arrival");
			if (evt && (evt.keyCode == 40 || evt.keyCode == 38 || evt.keyCode == 13)) {
				var as = depart_autocomplete.childNodes;
				for (var i=0;i < as.length; i++) {
					var a = as[i];
					if (a.className == 'selected') {
						if(evt.keyCode == 40 && a.nextSibling != null) {
							a.className = "";
							a.nextSibling.className = "selected";    
							depart_autocomplete.scrollTop = a.nextSibling.offsetTop - 20;
						}
						else if(evt.keyCode == 38 && a.previousSibling != null) {
							a.className = "";
							a.previousSibling.className = "selected";    
							depart_autocomplete.scrollTop = a.previousSibling.offsetTop - 20;
						} 
						else if(evt.keyCode == 13) {
							a.className = "";
							var airport = a.innerHTML;
							document.getElementById("arrival").value = airport;
							depart_autocomplete.parentNode.style.display = "none";
						}
						evt.cancelBubble = true;
						return false;
					}
				}
				if (as.length > 0 && evt.keyCode == 40) {
					as[0].className = 'selected';
					depart_autocomplete.scrollTop = 0;
					return false;
				}
			}
}	

function searchDepartureAirport(evt){
	var query = dwr.util.getValue("departure");
	evt = (evt) ? evt : ((window.event) ? event : null)
    if(evt){ 
		if (evt.keyCode == 40 || evt.keyCode == 38 || evt.keyCode == 13) {
			return navigateInDepartureList(evt);
		}
		if (query == null || query.length == 0 ) {
			$('autocompletefill_departure').style.display = 'none';
		} else {
			ReferenceData.listAllAirports(query, function(airports) {
				$('autocomplete_departure').innerHTML = "";
				for (var i = 0; i < airports.length; i++) {
					var airport = airports[i];
					var x = document.createElement("a");
					x.setAttribute("href", "javascript:void(null)");
					x.setAttribute("onclick", "return false;");
					x.innerHTML = airport.city + ", " + airport.name + " (" + airport.code + ")";
					$('autocomplete_departure').appendChild(x);
				}
				if (airports.length > 0) {
					addEvent(document.getElementById("autocomplete_departure"), "click", selectDepartAirportFromAutoFill);
					$('autocompletefill_departure').style.display = 'block';
				} else {
					$('autocompletefill_departure').style.display = 'none';
				}
			});
		}
    }
}

function searchArrivalAirport(evt){
var query = dwr.util.getValue("arrival"); 
	if (evt.keyCode == 40 || evt.keyCode == 38 || evt.keyCode == 13) {
		return navigateInArrivalList(evt);
	}
	if (query == null || query.length == 0 ) {
		$('autocompletefill_arrival').style.display = 'none';
	} else {
		ReferenceData.listAllAirports(query, function(airports) {
			$('autocomplete_arrival').innerHTML = "";
			for (var i = 0; i < airports.length; i++) {
				var airport = airports[i];
				var x = document.createElement("a");
				x.setAttribute("href", "javascript:void(null)");
				x.setAttribute("onclick", "return false;");
				x.innerHTML = airport.city + ", " + airport.name + " (" + airport.code + ")";
				$('autocomplete_arrival').appendChild(x);
			}
			if (airports.length > 0) {
				addEvent(document.getElementById("autocomplete_arrival"), "click", selectArrivalAirportFromAutoFill);
				$('autocompletefill_arrival').style.display = 'block';
			} else {
				$('autocompletefill_arrival').style.display = 'none';
			}
		});
	}
}

function setBoxWithEmptyValue(selectbox) {
	dwr.util.removeAllOptions(selectbox);
}

/**
* Searches arrival airport for KL excluding the 'Default' airport
*/
function searchKLArrivalAirport(evt){
var query = dwr.util.getValue("arrival"); 
	if (evt.keyCode == 40 || evt.keyCode == 38 || evt.keyCode == 13) {
		return navigateInArrivalList(evt);
	}
	if (query == null || query.length == 0 ) {
		$('autocompletefill_arrival').style.display = 'none';
	} else {
		ReferenceData.listAllAirports(query, function(airports) {
			$('autocomplete_arrival').innerHTML = "";
			for (var i = 0; i < airports.length; i++) {
				var airport = airports[i];
				if(airport.code != 'ZZZ'){
					var x = document.createElement("a");
					x.setAttribute("href", "javascript:void(null)");
					x.setAttribute("onclick", "return false;");
					x.innerHTML = airport.city + ", " + airport.name + " (" + airport.code + ")";
					$('autocomplete_arrival').appendChild(x);
				}
			}
			if (airports.length > 0) {
			    if(airports[0].code == 'ZZZ' && airports.length == 1 ){
			    	$('autocompletefill_arrival').style.display = 'none';
			    }else {
					addEvent(document.getElementById("autocomplete_arrival"), "click", selectArrivalAirportFromAutoFill);
					$('autocompletefill_arrival').style.display = 'block';
				}
			} else {
				$('autocompletefill_arrival').style.display = 'none';
			}
		});
	}
}

/**
* Searches depart airport for KL excluding the 'Default' airport
* 40 -down arrow
* 38 -up arrow
* 13 -enter
*/
function searchKLDepartureAirport(evt){
	var query = dwr.util.getValue("departure");
	evt = (evt) ? evt : ((window.event) ? event : null)
	if(evt){ 
		if (evt.keyCode == 40 || evt.keyCode == 38 || evt.keyCode == 13) {
			return navigateInDepartureList(evt);
		}
		if (query == null || query.length == 0 ) {
			$('autocompletefill_departure').style.display = 'none';
		} else {
			ReferenceData.listAllAirports(query, function(airports) {
				$('autocomplete_departure').innerHTML = "";
				for (var i = 0; i < airports.length; i++) {
					var airport = airports[i];
					if(airport.code != 'ZZZ'){
						var x = document.createElement("a");
						x.setAttribute("href", "javascript:void(null)");
						x.setAttribute("onclick", "return false;");
						x.innerHTML = airport.city + ", " + airport.name + " (" + airport.code + ")";
						$('autocomplete_departure').appendChild(x);
					}
				}
				if (airports.length > 0) {
					if(airports[0].code == 'ZZZ' && airports.length == 1 ){
						$('autocompletefill_departure').style.display = 'none';
					}else {
						addEvent(document.getElementById("autocomplete_departure"), "click", selectDepartAirportFromAutoFill);
						$('autocompletefill_departure').style.display = 'block';
					}
				} else {
					$('autocompletefill_departure').style.display = 'none';
				}
			});
		}
    }
}
