function sameDropoff(obj,pickUp,dropOff,carDropOff,carPickUp,pageFrom){
	if($(obj).checked == true && $(pickUp).value !=''){
		$(dropOff).value = $(pickUp).value;
		$(carDropOff).value =carPickUp;
	}
	if($(pickUp).id == dropOff && ($(obj).checked == true)){
		$(obj).checked = false;
	}

	var dropoffValue = $(dropOff).value;
	if(pageFrom!='carList'){
		if($(pickUp).id != dropOff && ($(obj).checked == false)){
				$(dropOff).value = '';
				$(carDropOff).value = '';
		}
	}
}


function getCarAirportAsHTMLString(currentAirport, highlightValue, highlightMatch) {

	var anchor = "";
	var highlight = "";
	var flagSelected="false";
	if (currentAirport.airportName.toLowerCase().indexOf(highlightValue.toLowerCase())==0) {
		anchor = "<font id=\"anchor\"></font>"
		if (currentAirport.airportName.toLowerCase()==(highlightValue.toLowerCase()) && !flagSelected) {
			highlight=" class=\"toBoxHighlight\" ";
			flagSelected="true";
		}
	}
	var openingAnchorTag = anchor + "<a onFocus='changeBkgrnd(this)' onBlur='changeBkgrnd_Blur(this)' href='javascript:void(0)' id='car" + currentAirport.code + "'" + highlight + "/>";
	var airportText;
	if (highlightMatch) {
		airportText = currentAirport.toStringWithHighlightedAirport(highlightValue);
	} else {
		airportText = currentAirport.toStringAirportCodeOnly();
	}
	airportText=airportText.substring(0,airportText.length-12)+")</span>";
	var closingAnchorTag = "</a>";
	return openingAnchorTag + airportText + closingAnchorTag;
}

/*
 * this object is the control object for the To text Box.
 * It sets up initial data and handles any expected events for the box.
 * 
 * Most importantly it handles the keyup event which will populate the available
 * to airports.
 */
var CarBoxControl = Class.create();
CarBoxControl.prototype = {
  initialize : function (boxId, boxListDivId, boxPlusSign, selectionFieldId, carForm, carFieldsToHide, car_dataContainer,carHideOnlyCloseButton,carDropOffSameLocation) {
	
    this.box = $(boxId);
    this.boxListDiv = $(boxListDivId);
    this.selectionField = $(selectionFieldId);
    this.boxPlusSign = $(boxPlusSign);
	this.carForm = $(carForm);
	this.currentSelectionCars = "";
	this.carFieldsToHide = carFieldsToHide;
	this.car_dataContainer = car_dataContainer;
	this.carDropOffSameLocation = carDropOffSameLocation;
	this.carHideOnlyCloseButton = carHideOnlyCloseButton;
	this.box.onkeydown = this.boxKeyDown.bindAsEventListener(this);
	this.box.onkeyup = this.boxKeyUp.bindAsEventListener(this);
	this.box.onfocus = this.boxFocus.bindAsEventListener(this);
	this.boxPlusSign.onclick = this.boxPlusSignClick.bindAsEventListener(this);
	this.carBoxOpen = false;
	this.inputType = 'textBox';
	
  },
boxKeyDown : function (evt) {
	
	if(evt != null && (evt.keyCode==40)){  	
		
		var carPredictiveTable = $("carPredictiveLookUp");
		if(carPredictiveTable != null) {
			var carAnchorTags = carPredictiveTable.getElementsByTagName("a"); // fetches all car city list
			if (this.currentSelectionCars == "") {
				var carFirstItem = carAnchorTags[0];
				this.currentSelectionCars = carFirstItem;
				changeBkgrnd(carFirstItem);
			} else {
				
				for (var i=0; i < carAnchorTags.length; i++) {
					if (Element.hasClassName(carAnchorTags[i], "selected")) {
						changeBkgrnd_Blur(carAnchorTags[i]);
						// if not the last item
						if (i < (carAnchorTags.length - 1)) {
							carNextItem = carAnchorTags[i+1];
						// ie we are on the last item, go to first
						} else {
							carNextItem = carAnchorTags[0];
						}
						this.currentSelectionCars = carNextItem;
						changeBkgrnd(carNextItem);
						i = carAnchorTags.length;
					}
				}
			}
		}
		fixScrollPosition(this.boxListDiv, this.currentSelectionCars);
		return false;
	} else if(evt != null && evt.keyCode==38) {  
				var carPredictiveTable = $("carPredictiveLookUp");
		if(carPredictiveTable != null) {
			var carAnchorTags = carPredictiveTable.getElementsByTagName("a");
			if (this.currentSelectionCars != "") {
				for (var i=0; i < carAnchorTags.length; i++) {
					if (Element.hasClassName(carAnchorTags[i], "selected")) {
						changeBkgrnd_Blur(carAnchorTags[i]);
						// if not the last item
						if (i > 0) {
							carNextItem = carAnchorTags[i-1];
						// on the first item, go to the last
						} else {
							carNextItem = carAnchorTags[carAnchorTags.length - 1];
						}
						this.currentSelectionCars = carNextItem;
						changeBkgrnd(carNextItem);
						i = carAnchorTags.length;
					}
				}
		// select last item
		} else {
			var carLastItem = carAnchorTags[carAnchorTags.length - 1];
			this.currentSelectionCars = carLastItem;
			changeBkgrnd(carLastItem);
			}
		}
		fixScrollPosition(this.boxListDiv, this.currentSelectionCars);
		return false;
	} else if(evt != null && evt.keyCode==13) {  
			if (this.currentSelectionCars != "") {
			this.currentSelectionCars.onclick();
		} else {
			if (this.boxListDiv.getElementsByTagName("a").length==1) {
				this.boxListDiv.getElementsByTagName("a")[0].onclick();
			}
		}
	}
  },
  boxKeyUp : function (evt) {
	
	if(evt == null || evt.keyCode==40 || evt.keyCode==38 || evt.keyCode==13 || evt.keyCode==9 || evt.keyCode==37 || evt.keyCode==39 ) {  
	} else {
		this.currentSelectionCars = "";
		this.populateMatchingAirports(evt);
	}
  },
 boxFocus : function (evt) {
	
  	this.box.select();
  	
  },
  boxPlusSignClick : function (evt) {
	
	this.populateAllAirports(evt);// populates all airports
	this.box.focus();
	var carPredictiveTable = $("carPredictiveLookUp");
	var carAnchorTags = carPredictiveTable.getElementsByTagName("a");
	for (var i=0; i < carAnchorTags.length; i++) {
		if (("car" + this.selectionField.value) == carAnchorTags[i].id) {
			this.currentSelectionCars = carAnchorTags[i];
			changeBkgrnd(carAnchorTags[i]);
			fixScrollPosition(this.boxListDiv,this.currentSelectionCars);
		}
	}

   },
  populateAllAirports : function (evt) {
	
	var carAirports = getCarAirportsFromAirportCodes(this.car_dataContainer.getFromAirports(), this.car_dataContainer.getAirports()); 
	// returns the from airport codes list when compared against all 
	this.populateOptions(evt, carAirports, false);
	
  	
  },
  populateMatchingAirports : function (evt) {
	  
	 var matchingAirports=getValidAirportsThatMatchString(this.box.value, this.car_dataContainer);
	 this.populateOptions(evt, matchingAirports, true);
  },
  populateOptions : function (evt, carAirportsToRender, carHighlightMatch) {


	var url=window.location.href;
	this.boxListDiv.style.display='block'; // shows the car box
	var url=window.location.href;
	this.setCarBoxOpen(true); // sets the car box
	if (carAirportsToRender.length == 0) {
		removeClassName(this.boxListDiv, "carCityBoxHidden");
		removeClassName(this.boxListDiv, "carBoxSingleColumn");
		removeClassName(this.boxListDiv, "carBoxDoubleColumns");
		addClassName(this.boxListDiv, "carBoxNoMatches");
		this.boxListDiv.innerHTML="&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;There are no cities matching your request. Try again or click on the + to see valid destination cities.";
		$(this.carHideOnlyCloseButton[0]).onclick = this.closeCarBoxListDiv.bindAsEventListener(this);
	} else{
	
		if(url.lastIndexOf("/info") > 0){
			
			//this.boxListDiv.style.width="280px";
			var carOptionListStrC1="";
			var carRecordCount=0;

			for (var x=0;x < carAirportsToRender.length; x++) {
				var carCurrentAirport = carAirportsToRender[x];
					carOptionListStrC1=carOptionListStrC1+getCarAirportAsHTMLString(carCurrentAirport, this.box.value, carHighlightMatch) + "<BR>";
					carRecordCount++;
			}

			carOptionList=
				"<table id=\"carPredictiveLookUp\">" + "<tr>" + 
				"<td style=\"vertical-align: top; padding: 2px 2px 2px 20px;\">" +
							carOptionListStrC1
						"</td>";

			carOptionList=carOptionList +	"</tr>" + "</table>";
			
			removeClassName(this.boxListDiv, "carCityBoxHidden");
			removeClassName(this.boxListDiv, "carBoxNoMatches");
			removeClassName(this.boxListDiv, "carBoxDoubleColumns");
			addClassName(this.boxListDiv, "carBoxSingleColumn");
			//this.boxListDiv.style.width="220px";
			this.boxListDiv.innerHTML = carOptionList;


		}
		else{
	
		var carOptionListStrC1="";
		var carOptionListStrC2="";
		var carSingleColumnLength=5;
		var carRecordCount=0;
		carSingleColumnLength=(carSingleColumnLength<carAirportsToRender.length/2)?(carAirportsToRender.length/2):carSingleColumnLength;
		for (var x=0;x < carAirportsToRender.length; x++) {
			var carCurrentAirport = carAirportsToRender[x];
			carOptionListStrC1=carOptionListStrC1+getCarAirportAsHTMLString(carCurrentAirport, this.box.value, carHighlightMatch) + "<BR>";
			carRecordCount++;
		}
	
		/*for (var x=0;x < carAirportsToRender.length; x++) {
			var carCurrentAirport = carAirportsToRender[x];
			if (carRecordCount < carSingleColumnLength) {
				carOptionListStrC1=carOptionListStrC1+getCarAirportAsHTMLString(carCurrentAirport, this.box.value, carHighlightMatch) + "<BR>";
			} else {
				carOptionListStrC2=carOptionListStrC2+getCarAirportAsHTMLString(carCurrentAirport, this.box.value, carHighlightMatch) + "<BR>";
			}
			carRecordCount++;
		}*/
	
		/*carOptionList=
			"<table id=\"carPredictiveLookUp\">" + "<tr>" +  "<td width=\'10px' valign=\"top\">" +
					"</td>" +
			"<td valign=\"top\">" +
						carOptionListStrC1
					"</td>";
		if (carOptionListStrC2 != "") {
			carOptionList=carOptionList +	"<td valign=\"top\">" +	carOptionListStrC2 + "</td>";
		}

		carOptionList=carOptionList +	"</tr>" + "</table>";

		if(carRecordCount < "6"){
			removeClassName(this.boxListDiv, "carCityBoxHidden");
			removeClassName(this.boxListDiv, "carBoxNoMatches");
			removeClassName(this.boxListDiv, "carBoxDoubleColumns");
			addClassName(this.boxListDiv, "carBoxSingleColumn");
			//this.boxListDiv.style.width="280px";
		} else if(carRecordCount > "5") {
			removeClassName(this.boxListDiv, "carCityBoxHidden");
			removeClassName(this.boxListDiv, "carBoxNoMatches");
			removeClassName(this.boxListDiv, "carBoxSingleColumn");
			addClassName(this.boxListDiv, "carBoxDoubleColumns");
			//this.boxListDiv.style.width="480px";
		} else {
		}*/
		
		carOptionList=
			"<table id=\"carPredictiveLookUp\">" + "<tr>" +  "<td width=\'10px' valign=\"top\">" +
					"</td>" +
			"<td valign=\"top\">" +
						carOptionListStrC1
					"</td>";
		
		carOptionList=carOptionList +	"</tr>" + "</table>";
		removeClassName(this.boxListDiv, "carCityBoxHidden");
		removeClassName(this.boxListDiv, "carBoxNoMatches");
		removeClassName(this.boxListDiv, "carBoxDoubleColumns");
		addClassName(this.boxListDiv, "carBoxSingleColumn");
		this.boxListDiv.innerHTML = carOptionList;
	}
	
		
		for (var x=0;x < carAirportsToRender.length; x++) {
			var carCurrentAirport = carAirportsToRender[x];
			new CarSelection(carCurrentAirport, this.box, this.selectionField, this.boxListDiv, this,this.carDropOffSameLocation);
		}
		if (carAirportsToRender.length > 0) {
			document.onclick = this.closeCarBoxListDiv.bindAsEventListener(this);
		}
	

	}

  },
  setCarBoxOpen : function (carBoxOpen) {

  	this.carBoxOpen = carBoxOpen;// set the open box to true
	this.hideShowCarFields(carBoxOpen); // hides the fields that will cover the city list box
	this.hideShowCarCloseButton(carBoxOpen);// show the close button in the city list box
	//Why this condition
	if (!carBoxOpen) {
		this.currentSelection = "";
	}

  },
  hideShowCarFields : function (hide) {

	
    for (var i=0; i < this.carFieldsToHide.length; i++) {
		if (hide) {
			$(this.carFieldsToHide[i]).style.visibility="hidden";
		} else {
			$(this.carFieldsToHide[i]).style.visibility="visible";
		}
	}
  },
  hideShowCarCloseButton : function (hide) {
	    for (var i=0; i < this.carHideOnlyCloseButton.length; i++) {
		if (hide) {
			$(this.carHideOnlyCloseButton[i]).style.display="block";
		} else {
			$(this.carHideOnlyCloseButton[i]).style.display="none";
		}
	}

  },
  closeCarBoxListDiv : function (evt) {
	 
	  if (evt.target) carTarg = evt.target
		else if (evt.srcElement) carTarg = evt.srcElement
		if(carTarg.id != this.boxPlusSign.id){ 
			if (this.carBoxOpen) {
				this.boxListDiv.style.display='none';
				this.hideShowCarFields(false);
				this.hideShowCarCloseButton(false);
				if (this.selectionField.value == '') {
					this.box.value = '';
				} else {
					var previousCarAirport = getObjectFromArrayByCode(this.selectionField.value, this.car_dataContainer.getAirports());
					this.box.value = previousCarAirport.toStringNameOnly();
				}
				this.setCarBoxOpen(false);
			}
		}
  }
  
}


function getCarAirportsFromAirportCodes(airportCodes, allAirports) {

	var airports = new Array();
	for (var i=0; i<airportCodes.length;i++) {
		var carCurrentAirport = getObjectFromArrayByCode(airportCodes[i], allAirports);
		airports.push(carCurrentAirport);
	}
	return airports;
}

//CQ 18880
function getCarCountryCodeFromAirportCode(fromAirport,obj){
	var carCurrentAirport = getObjectFromArrayByCode(fromAirport, obj.getAirports());
   return carCurrentAirport.country.code;

}
// End CQ18880
var CarSelection = Class.create();
CarSelection.prototype = {
  initialize : function (airport, box, selectionField, boxListDiv, carBoxControl,carDropOffSameLocation) {
	this.airport = airport;
    this.box = box;
	this.selectionField = selectionField;
    this.boxListDiv = boxListDiv;
    this.carBoxControl = carBoxControl;
	this.carDropOffSameLocation = carDropOffSameLocation;
    this.carAirportHref = $("car" + airport.code);
	this.carAirportHref.onclick = this.carAirportHrefClick.bindAsEventListener(this);
  },
  carAirportHrefClick : function (evt) {
	
	this.carBoxControl.setCarBoxOpen(false);
  	this.selectionField.value = this.airport.code;
	this.box.value = this.airport.toStringNameOnly();
  	sameDropoff(this.carDropOffSameLocation,($(this.box).id),('carDropOffTextField'),'carDropOff',this.selectionField.value,'carList');
	//this.selectionField.onchange();
  	this.boxListDiv.innerHTML = '';
	this.boxListDiv.style.display='none';
  }
}


function getValidAirportsThatMatchString(stringToMatch, car_dataContainer) {
  

	var carAirportCodeList = car_dataContainer.getToAirports();
	var carAirports = car_dataContainer.getAirports();


	
	var matchingAirports = getAirportsThatMatchString(stringToMatch, carAirportCodeList, carAirports);
	// ensure all matching airports are valid for this from/to combination
	//var validAirports = getValidToAirports(fromAirport, matchingAirports, dataContainer)
	return matchingAirports;
	
}


//Car From To Handler

var CarPickDropHandler = Class.create();
CarPickDropHandler.prototype = {
  initialize : function (carPickUpBoxControl, carDropOffBoxControl,car_dataContainer) {
	this.carPickUpBoxControl = carPickUpBoxControl;
	this.carDropOffBoxControl = carDropOffBoxControl;
	this.car_dataContainer = car_dataContainer;
	this.carPickUpBox = this.carPickUpBoxControl.box;
	this.carDropOff = this.carDropOffBoxControl.box;
	this.carPickUpSelectionField = this.carPickUpBoxControl.selectionField;
	this.carDropOffSelectionField = this.carDropOffBoxControl.selectionField;
	this.carPickUpBoxControl.boxPlusSign.onclick = this.checkBoxOpen.bindAsEventListener(this);
	
  },
  checkBoxOpen : function(evt){
	var dropOffClass=this.carDropOffBoxControl.boxListDiv.className;
	if(dropOffClass.search("carCityBoxHidden")!=-1){
		this.carPickUpBoxControl.boxPlusSignClick(evt);
	}
	else{
		this.carDropOffBoxControl.closeCarBoxListDiv(evt);
		this.carPickUpBoxControl.boxPlusSignClick(evt);
	}
  },
  setInitialValues : function (pickUp, dropOff) {


	if (this.carPickUpBoxControl.inputType == 'textBox' && pickUp != null && pickUp != '') {
		var carPickUpAirport = getObjectFromArrayByCode(pickUp, this.car_dataContainer.getAirports());
		if (carPickUpAirport != null) {
			this.carPickUpBox.value = carPickUpAirport.airportName;
			this.carPickUpSelectionField.value = carPickUpAirport.code;
		}
	}
	if (this.carDropOffBoxControl.inputType == 'textBox' && dropOff != null && dropOff != '') {
		var carDropOffAirport = getObjectFromArrayByCode(dropOff, this.car_dataContainer.getAirports());
		if (carDropOffAirport != null) {
			this.carDropOff.value = carDropOffAirport.airportName;
			this.carDropOffSelectionField.value = carDropOffAirport.code;
		}
	}


		//changes made for CQ14948
			if(pickUp!=dropOff){
			document.carForm.checkCarDropSameLocation.checked=false;
			}

		
  }

}