var maxrowcount = 16;
var overlayLinksCache = new Array();
var defaultDestinationOption = '<table style="width:200px"><tbody><tr class="ondhead"><td style="text-align:center; padding: 5px;">Please select an origin.</td></tr><tr class="foot"><td colspan="5"><a id="closeDestinationOverlay" href="javascript:void(0)"><img src="images/closePop.gif"/></a></td></tr></tbody></table>';
var onNoOriginMatch = '<table style="width:200px"><tbody><tr class="ondhead"><td id="originInfoErrorMessage" style="text-align:center; padding: 5px;">Oops! Please click above again or delete your entry to see where we fly.</td></tr><tr class="foot"><td colspan="5"><a id="closeOriginOverlay" href="javascript:void(0)"><img src="images/closePop.gif"/></a></td></tr></tbody></table>';
var onNoDestinationMatch = '<table style="width:200px"><tbody><tr class="ondhead"><td id="destinationInfoErrorMessage" style="text-align:center; padding: 5px;">Oops! Please click above again or delete your entry to see where we fly.</td></tr><tr class="foot"><td colspan="5"><a id="closeDestinationOverlay" href="javascript:void(0)"><img src="images/closePop.gif"/></a></td></tr></tbody></table>';

RegExp.escape = function(str){
    var specials = new RegExp("[.*+?|()\\[\\]{}\\\\]", "g"); // .*+?|()[]{}\
    return str.replace(specials, "\\$&");
}

function initSelectedRoutes() {
    var selectedOrigin = YAHOO.util.Dom.get("selectedOriginAirport");
    var selectedDestination = YAHOO.util.Dom.get("selectedDestinationAirport");
    var originAirports = YAHOO.util.Dom.get('originAirports');
    var destinationAirports = YAHOO.util.Dom.get('destinationAirports');
    var airportObj = null;
    if(originAirports.value != '' ) {
        airportObj = YAHOO.jetblue.b2c.arr.ondArray[originAirports.value];
        if(airportObj != null) {
            searchPageUtil.changeDisplayValue(originAirports.id, airportObj.getCode(), airportObj.getFullDescription());
        }
    } else if(selectedOrigin.value != '' ) {
        airportObj = YAHOO.jetblue.b2c.arr.ondArray[selectedOrigin.value];
        if(airportObj != null) {
            searchPageUtil.changeDisplayValue(originAirports.id, airportObj.getCode(), airportObj.getFullDescription());
        }
    }

    airportObj = null;
    if(destinationAirports.value != '' ) {
        airportObj = YAHOO.jetblue.b2c.arr.ondArray[destinationAirports.value];
        if(!YAHOO.lang.isNull(airportObj)) {
            searchPageUtil.changeDisplayValue(destinationAirports.id, airportObj.getCode(), airportObj.getFullDescription());
        }
    } else if(selectedDestination.value != '' ) {
        airportObj = YAHOO.jetblue.b2c.arr.ondArray[selectedDestination.value];
        if(!YAHOO.lang.isNull(airportObj)) {
            searchPageUtil.changeDisplayValue(destinationAirports.id, airportObj.getCode(), airportObj.getFullDescription());
        }
    }
}

function initAirportOverlay() {
    YAHOO.jetblue.b2c.overlay.manager = new YAHOO.widget.OverlayManager();
    YAHOO.jetblue.b2c.calendar.manager = new YAHOO.widget.OverlayManager();
    var footerContent = '<div><a href="javascript:void(0)"><img src="images/closePop.gif"/></a></div>';
    YAHOO.jetblue.b2c.overlay.origin = new YAHOO.widget.Overlay("originOverlay", {visible:false, iframe:true, zIndex: 500, effect:{effect:YAHOO.widget.ContainerEffect.FADE,duration:0.13}});
    YAHOO.jetblue.b2c.overlay.origin.setBody('');
    YAHOO.jetblue.b2c.overlay.origin.render(document.body);

    YAHOO.jetblue.b2c.overlay.destination = new YAHOO.widget.Overlay("destinationOverlay", {visible:false, iframe:true, zIndex: 510, effect:{effect:YAHOO.widget.ContainerEffect.FADE,duration:0.13}});
    YAHOO.jetblue.b2c.overlay.destination.setBody('');
    YAHOO.jetblue.b2c.overlay.destination.render(document.body);

    YAHOO.jetblue.b2c.overlay.manager.register([YAHOO.jetblue.b2c.overlay.origin,
            YAHOO.jetblue.b2c.overlay.destination]);
    YAHOO.jetblue.b2c.calendar.manager.register([YAHOO.jetblue.b2c.dialog.dialog1, YAHOO.jetblue.b2c.dialog.dialog2]);
    initAirportOverlayListenerForSingleCity();
    initAirportOverlayListenerForMultiCity();

    YAHOO.util.Event.addListener(document, "click",
            function(e){
                var eventSource = YAHOO.util.Event.getTarget(e);
                var div1 = YAHOO.util.Dom.getAncestorByClassName(eventSource, 'jsInput clearfix pointer-hand ondcontainer');
                var div2 = YAHOO.util.Dom.getAncestorByClassName(eventSource, 'yui-module yui-overlay');
                var popupOverlayDiv = YAHOO.util.Dom.getAncestorByClassName(eventSource, 'middle-search');
                var caldiv1 = YAHOO.util.Dom.getAncestorByClassName(eventSource, 'jsInput clearfix pointer-hand');
                var caldiv2 = YAHOO.util.Dom.getAncestorByClassName(eventSource, 'yui-module yui-overlay yui-panel');
                var popupCalOverlayDiv = YAHOO.util.Dom.getAncestorByClassName(eventSource, 'calheader');
               
                if(!(div1 != null || div2 != null) || !(div1 != null || popupOverlayDiv != null)) {
                    YAHOO.jetblue.b2c.overlay.manager.hideAll();
                }
                if((caldiv1 == null && caldiv2 == null) || (caldiv1 == null && popupCalOverlayDiv == null && popupOverlayDiv == null)) {  
                	YAHOO.jetblue.b2c.calendar.manager.hideAll();
                    for(i in multiSearchCalendars){
                    	multiSearchCalendars[i].dialog.hide();  
                    }
                }
                
                if (caldiv1 != null && div1 != null){
                	 YAHOO.jetblue.b2c.calendar.manager.hideAll();
                     for(i in multiSearchCalendars){
                     	multiSearchCalendars[i].dialog.hide();  
                     }
                }
            }
    );

    YAHOO.util.Event.addListener("originOverlay", 'click', originRouteClickCallBack, YAHOO.jetblue.b2c.overlay.origin, true);
    YAHOO.util.Event.addListener("destinationOverlay", 'click', routeClickCallBack, YAHOO.jetblue.b2c.overlay.destination, true);
}

function initAirportOverlayListenerForSingleCity()
{
    var orgDispField = YAHOO.util.Dom.get('originAirportsDisplay');
    var destDispField = YAHOO.util.Dom.get('destinationAirportsDisplay');
    YAHOO.util.Event.addListener("originContainer", "click", originClickCallback);
    YAHOO.util.Event.addListener("destinationContainer", "click", destinationClickCallback);
    YAHOO.util.Event.addListener(orgDispField, "keyup", originKeyUpCallback);
    YAHOO.util.Event.addListener(orgDispField, "keydown", originKeyDownCallback);
    YAHOO.util.Event.addListener(destDispField, "keyup", destinationKeyUpCallback);
    YAHOO.util.Event.addListener(destDispField, "keydown", destinationKeyDownCallback);
}

function originKeyDownCallback(e) {
    searchPageEvents.ondKeydDownCallback(e, 'origin');
}
function destinationKeyDownCallback(e) {
    searchPageEvents.ondKeydDownCallback(e, 'destination');
}

function initAirportOverlayListenerForMultiCity()
{
    var numRows = 4;
    for (i = 0; i < numRows; i++)
    {
        var origin = "originContainer" + i;
        var destination = "destinationContainer" + i;
        var originDisplay = 'originAirport' + i + 'Display';
        var destinationDisplay = 'destinationAirport' + i + 'Display';
        YAHOO.util.Event.addListener(origin, "click", originClickCallback);
        YAHOO.util.Event.addListener(destination, "click", destinationClickCallback);
        YAHOO.util.Event.addListener(originDisplay, "keyup", originKeyUpCallback);
        YAHOO.util.Event.addListener(destinationDisplay, "keyup", destinationKeyUpCallback);
        YAHOO.util.Event.addListener(originDisplay, "keydown", originKeyDownCallback);
        YAHOO.util.Event.addListener(destinationDisplay, "keydown", destinationKeyDownCallback);
    }
}

function originKeyUpCallback(e) {
    var key = searchPageUtil.getKeyVariable(e);

    if(searchPageUtil.isKeyInList(key, [35,36,37,38,39,40])) {
        return;
    }

    var DomUtil = YAHOO.util.Dom;
    var overlayContext = DomUtil.getAncestorByTagName(DomUtil.getAncestorByTagName(this, 'div'), 'div');
    // align the overlay to the left div of the field container for the origin
    var divElementToAlignWith = DomUtil.getFirstChild(overlayContext);
    YAHOO.jetblue.b2c.overlay.origin.cfg.setProperty("context", [divElementToAlignWith, "tl", "bl", ["beforeShow", "windowResize"]]);

    // get body of overlay where routes are to be written to
    var overlayBody = YAHOO.jetblue.b2c.overlay.origin.body;
    overlayBody.innerHTML = '';

    var originField = DomUtil.getFirstChild(DomUtil.getNextSibling(divElementToAlignWith));
    var destinationField = DomUtil.getFirstChild(DomUtil.getLastChild(DomUtil.getNextSibling(overlayContext)));

    originField.value = '';

    populateOrigins(key, YAHOO.jetblue.b2c.overlay.origin, overlayBody, originField, destinationField, YAHOO.jetblue.b2c.overlay.destination);

    YAHOO.jetblue.b2c.overlay.destination.hide();
    YAHOO.jetblue.b2c.overlay.origin.show();
    keymarker = 0;
}

function originClickCallback(e) {
    var DomUtil = YAHOO.util.Dom;
    // align the overlay to the left div of the field container for the origin
    var divElementToAlignWith = DomUtil.getFirstChild(this);
    searchPageUtil.resetLastOriginField();
    YAHOO.jetblue.b2c.overlay.origin.cfg.setProperty("context", [divElementToAlignWith, "tl", "bl", ["beforeShow", "windowResize"]]);

    // get body of overlay where routes are to be written to
    var overlayBody = YAHOO.jetblue.b2c.overlay.origin.body;
    overlayBody.innerHTML = '';

    var originField = DomUtil.getFirstChild(DomUtil.getNextSibling(divElementToAlignWith));
    var originFieldDisplay = DomUtil.getNextSibling(originField);
    originFieldDisplay.focus();

    if(originField.value == '') DomUtil.getNextSibling(originField).value = '';

    var destinationField = DomUtil.getFirstChild(DomUtil.getLastChild(DomUtil.getNextSibling(this)));
    var destinationFieldDisplay = DomUtil.getNextSibling(destinationField);
    (destinationField.value == '') ? destinationFieldDisplay.value = defaultDestinationValue : void(0);

    // check if origin data has not yet been loaded
    populateOrigins(null, YAHOO.jetblue.b2c.overlay.origin, overlayBody, originField, destinationField, YAHOO.jetblue.b2c.overlay.destination);

    YAHOO.jetblue.b2c.overlay.destination.hide();
    YAHOO.jetblue.b2c.overlay.origin.show();
    keymarker = 0;
}

function populateOrigins(key, originOverlay, overlayBody, originField, destinationField, destinationOverlay) {
    /*, originParams, destinationParams
     var selectedOrigin = document.getElementById("selectedOriginAirport");

     if (selectedOrigin.value !== '') {
     defaultOriginAirport = selectedOrigin.value;
     }*/
    var DomUtil = YAHOO.util.Dom;
    var origins = new Array();

    var displayFieldTrimmed = YAHOO.lang.trim(DomUtil.getNextSibling(originField).value);
    var displayFieldEscaped = displayFieldTrimmed;
    displayFieldEscaped = RegExp.escape(displayFieldEscaped);
    var r1 = new RegExp('^' + displayFieldEscaped, 'i');
    var r2 = new RegExp(',\\s' + displayFieldEscaped, 'i');

    for (var origin in routes)
    {
        var desc = airports[origin] + ' (' + origin + ')';
        if(key != null && (YAHOO.lang.trim(displayFieldEscaped) != '' && YAHOO.lang.trim(displayFieldEscaped) != defaultOriginValue)) {
            if(desc.match(r1) || origin.match(r1) || airports[origin].match(r1) || airports[origin].match(r2)) {
                origins.push(new Array(origin, airports[origin]));
            }
        } else if (key == null) {
            origins.push(new Array(origin, airports[origin]));
        } else {
            origins.push(new Array(origin, airports[origin]));
        }
    }

    origins.sort(sortOptionsByText);
    originCount = origins.length;

    if(origins.length == 0) {
        overlayBody.innerHTML = onNoOriginMatch;
        return;
    }

    var tblEl = document.createElement('table');
    var tBody = document.createElement('tbody');
    var tRow = document.createElement('tr');
    DomUtil.addClass(tRow, 'ondhead');
    tBody.appendChild(tRow);
    tblEl.appendChild(tBody);
    var tCell;
    var ulEl;

    for (i = 0; i < origins.length; i++) {
        var routetxt = origins[i][1];
        var routeval = origins[i][0];
        var routelinktxt = routetxt + ' (' + routeval + ')';

        var liElement = document.createElement('li');
        var aLink = createLink("javascript:changeFormValue('" + originOverlay.id + "', '" + originField.id + "','" + routelinktxt.replace(/'/i, "\\'") + "','" + routeval + "');", routelinktxt, routeval);
        aLink.id = 'org' + (i + 1);
        if(routelinktxt == displayFieldTrimmed) {
            DomUtil.addClass(aLink, 'selected');
            originField.value = routeval;
        }
        liElement.appendChild(aLink);

        if (i == 0) {
            ulEl = document.createElement('ul');
            ulEl.appendChild(liElement);

            tCell = document.createElement('td');
            tCell.appendChild(ulEl);
            tRow.appendChild(tCell);

        } else if ((i % maxrowcount) !== 0) {
            ulEl.appendChild(liElement);

        } else if ((i % maxrowcount) == 0) {
            ulEl = document.createElement('ul');
            ulEl.appendChild(liElement);

            tCell = document.createElement('td');
            tCell.appendChild(ulEl);
            tRow.appendChild(tCell);
        }

        /*if (defaultOriginAirport == routeval) {
         originParams.getActualField().value = routeval;
         originParams.getDisplayField().value = routelinktxt;
         }*/
    }
    
    originsAndDestinationsOverlayFooter(tBody);

    overlayBody.appendChild(tblEl);
    /*if (selectedOrigin.value !== '') {
     fillDestinationAirports(originParams, destinationParams);
     }*/
}

function originsAndDestinationsOverlayFooter(tBody) {
	var DomUtil = YAHOO.util.Dom;

	  /*airline logos and links*/
    if(typeof(interlineTextLink) != "undefined")
    {
    	var tRow = document.createElement('tr');
	    DomUtil.addClass(tRow, 'interlineTextLink');
	    tBody.appendChild(tRow);    
	    
	    var tCell = document.createElement('td');
	    //DomUtil.addClass(tCell, 'CityPanelBottomCell');
	    tCell.colSpan = 5;
	    tCell.innerHTML = interlineTextLink;
	    tRow.appendChild(tCell);
	    
	    var tSpanLufthansa = document.createElement('span');
	    DomUtil.addClass(tSpanLufthansa, 'CityPanelSeparator');
	    tCell.appendChild(tSpanLufthansa);
	    
	    var tLinkLufthansa = document.createElement('a');
	    tLinkLufthansa.href = partnerLufthansaLink;
	    
	    var tImgLufthansa = document.createElement('img');
	    DomUtil.addClass(tImgLufthansa, 'CityPanelImage');
	    tImgLufthansa.id = 'LufthansaImage';
	    tImgLufthansa.src = 'images/L_logo_normal.gif';	    
	    tLinkLufthansa.appendChild(tImgLufthansa);
	    tCell.appendChild(tLinkLufthansa);
	    
	    var tSpanAerLingus = document.createElement('span');
	    DomUtil.addClass(tSpanAerLingus, 'CityPanelSeparator');
	    tCell.appendChild(tSpanAerLingus);
	    
	    var tLinkAerLingus = document.createElement('a');
	    tLinkAerLingus.href = partnerAerLingusLink;
	    
	    var tImgAerLingus = document.createElement('img');
	    DomUtil.addClass(tImgAerLingus, 'CityPanelImage');
	    tImgAerLingus.id = 'AerLingusImage';
	    tImgAerLingus.src = 'images/A_logo_normal.gif';
	    tLinkAerLingus.appendChild(tImgAerLingus);
	    tCell.appendChild(tLinkAerLingus);
	    
	    YAHOO.util.Event.addListener(tImgLufthansa, "mouseover", onMouseOverImgLufthansa);
        YAHOO.util.Event.addListener(tImgLufthansa, "mouseout", onMouseOutImgLufthansa);
        YAHOO.util.Event.addListener(tImgAerLingus, "mouseover", onMouseOverImgAerLingus);
        YAHOO.util.Event.addListener(tImgAerLingus, "mouseout", onMouseOutImgAerLingus);
    }
    
    
    var tRow = document.createElement('tr');
    DomUtil.addClass(tRow, 'foot');
    tBody.appendChild(tRow);
    var tCell = document.createElement('td');
    tCell.colSpan = 5;
    tCell.innerHTML = '<a id="closeOriginOverlay" href="javascript:void(0)"><img src="images/closePop.gif"/></a>';
    tRow.appendChild(tCell);
    
}

function onMouseOverImgLufthansa() {
	YAHOO.util.Dom.get('LufthansaImage').src = 'images/L_logo_rollover.gif';	    
}

function onMouseOutImgLufthansa() {
	YAHOO.util.Dom.get('LufthansaImage').src = 'images/L_logo_normal.gif';	    
}

function onMouseOverImgAerLingus() {
	YAHOO.util.Dom.get('AerLingusImage').src = 'images/A_logo_rollover.gif';	    
}

function onMouseOutImgAerLingus() {
	YAHOO.util.Dom.get('AerLingusImage').src = 'images/A_logo_normal.gif';	    
}

function destinationKeyUpCallback(e) {
    var key = searchPageUtil.getKeyVariable(e);

    if(searchPageUtil.isKeyInList(key, [35,36,37,38,39,40])) {
        return;
    }

    var DomUtil = YAHOO.util.Dom;
    var overlayContext = DomUtil.getAncestorByTagName(DomUtil.getAncestorByTagName(this, 'div'), 'div');
    // align the overlay to the left div of the field container for the origin
    var divElementToAlignWith = DomUtil.getFirstChild(overlayContext);
    YAHOO.jetblue.b2c.overlay.destination.cfg.setProperty("context", [divElementToAlignWith, "tl", "bl", ["beforeShow", "windowResize"]]);

    // get body of overlay where routes are to be written to
    // var overlayBody = DomUtil.getFirstChild(destinationOverlay.id);
    var overlayBody = YAHOO.jetblue.b2c.overlay.destination.body;
    overlayBody.innerHTML = '';
    // destination fields container
    var destinationField = DomUtil.getFirstChild(DomUtil.getNextSibling(divElementToAlignWith));
    // origin fields container
    var originField = DomUtil.getFirstChild(DomUtil.getLastChild(DomUtil.getPreviousSibling(overlayContext)));

    destinationField.value = '';
    if(key == 9) DomUtil.getNextSibling(destinationField).value = '';

    if(!populateDestinations(key, YAHOO.jetblue.b2c.overlay.destination, overlayBody, destinationField, originField)) overlayBody.innerHTML = defaultDestinationOption;

    YAHOO.jetblue.b2c.overlay.origin.hide();
    searchPageUtil.resetLastOriginField();
    YAHOO.jetblue.b2c.overlay.destination.show();
    keymarker = 0;
}

function destinationClickCallback(e) {
    var DomUtil = YAHOO.util.Dom;
    // align the overlay to the left div of the field container for the origin
    var divElementToAlignWith = DomUtil.getFirstChild(this);
    YAHOO.jetblue.b2c.overlay.destination.cfg.setProperty("context", [divElementToAlignWith, "tl", "bl", ["beforeShow", "windowResize"]]);

    // get body of overlay where routes are to be written to
    // var overlayBody = DomUtil.getFirstChild(destinationOverlay.id);
    var overlayBody = YAHOO.jetblue.b2c.overlay.destination.body;
    overlayBody.innerHTML = defaultDestinationOption;
    // destination fields container
    var destinationField = DomUtil.getFirstChild(DomUtil.getNextSibling(divElementToAlignWith));
    var destinationFieldDisplay = DomUtil.getNextSibling(destinationField);
    destinationFieldDisplay.focus();

    // if(destinationField.value == '') DomUtil.getNextSibling(destinationField).value = '';
    // origin fields container
    var originField = DomUtil.getFirstChild(DomUtil.getLastChild(DomUtil.getPreviousSibling(this)));
    var originFieldDisplay = DomUtil.getNextSibling(originField);
    (originField.value == '') ? originFieldDisplay.value = defaultOriginValue : void(0);

    populateDestinations(null, YAHOO.jetblue.b2c.overlay.destination, overlayBody, destinationField, originField);

    YAHOO.jetblue.b2c.overlay.origin.hide();
    searchPageUtil.resetLastOriginField();
    YAHOO.jetblue.b2c.overlay.destination.show();
    keymarker = 0;
}

function populateDestinations(key, destinationOverlay, overlayBody, destinationField, originField) {
    /*var selectedDestination = document.getElementById("selectedDestinationAirport");
     var selectedDestinationAirport = destinationParams.getActualField().value; // populate with current selected airport

     if (selectedDestAirport !== '') {
     selectedDestinationAirport = selectedDestAirport;
     }*/
    var DomUtil = YAHOO.util.Dom;
    var destinations = new Array();

    var displayFieldTrimmed = YAHOO.lang.trim(DomUtil.getNextSibling(destinationField).value);
	var displayFieldEscaped = displayFieldTrimmed;
    displayFieldEscaped = RegExp.escape(displayFieldEscaped);
	var r1 = new RegExp('^' + displayFieldEscaped, 'i');
    var r2 = new RegExp(',\\s' + displayFieldEscaped, 'i');
    var auxRoutes = [];
    if (typeof routes[originField.value] === 'undefined') {
    	var queue = [];
        for (var orig in routes) {
        	queue.push(orig);
        }
        for (var qi=0; qi<queue.length; qi++) {
        	for (var lipa in routes[queue[qi]]) {
        		auxRoutes[lipa] = routes[queue[qi]][lipa];
        	}
        }
    } else {
    	auxRoutes = routes[originField.value];
    }
    var previousDestOnList = false;
    var destField = DomUtil.getNextSibling(destinationField).value;
    if (destField === defaultDestinationValue) {
    	DomUtil.getNextSibling(destinationField).value = '';
    }
    else {
    	for (var destination in auxRoutes) {
    		var current = destinationField.value;
    		if (destination === current) {
    			previousDestOnList = true;
    			break;
    		}
    	}
    	if (!previousDestOnList && (key === null || key === undefined)) {
    		destinationField.value = '';
    		DomUtil.getNextSibling(destinationField).value = '';
    	}
    }
    for (var destination in auxRoutes) {
		var desc = airports[destination] + ' (' + destination + ')';
        if(key != null && (YAHOO.lang.trim(displayFieldEscaped) != '' && YAHOO.lang.trim(displayFieldEscaped) != defaultDestinationValue)) {
            if(desc.match(r1) || destination.match(r1) || airports[destination].match(r1) || airports[destination].match(r2)) {
                destinations.push(new Array(destination, airports[destination]));
            }
        } else if (key == null) {
            destinations.push(new Array(destination, airports[destination]));
        } else {
            destinations.push(new Array(destination, airports[destination]));
        }
    }

    destinations.sort(sortOptionsByText);
    destinationCount = destinations.length;

	if(destinations.length == 0) {
        overlayBody.innerHTML = onNoDestinationMatch;
        return true;
    }
    overlayBody.innerHTML = '';

    var tblEl = document.createElement('table');
    var tBody = document.createElement('tbody');
    var tRow = document.createElement('tr');
    DomUtil.addClass(tRow, 'ondhead');
    tBody.appendChild(tRow);
    tblEl.appendChild(tBody);
    var tCell;
    var ulEl;

    for (i = 0; i < destinations.length; i++) {
        var routetxt = destinations[i][1];
        var routeval = destinations[i][0];
        var routelinktxt = routetxt + ' (' + routeval + ')';

        var liElement = document.createElement('li');
        var aLink = createLink("javascript:changeFormValue('" + destinationOverlay.id + "', '" + destinationField.id + "','" + routelinktxt.replace(/'/i, "\\'") + "','" + routeval + "')", routelinktxt, routeval);
        aLink.id = 'dest' + (i + 1);
        if(routelinktxt == displayFieldTrimmed) {
            DomUtil.addClass(aLink, 'selected');
            destinationField.value = routeval;
        }
        liElement.appendChild(aLink);

        if (i == 0) {
            ulEl = document.createElement('ul');
            ulEl.appendChild(liElement);

            tCell = document.createElement('td');
            tCell.appendChild(ulEl);
            tRow.appendChild(tCell);

        } else if ((i % maxrowcount) !== 0) {
            ulEl.appendChild(liElement);

        } else if ((i % maxrowcount) == 0) {
            ulEl = document.createElement('ul');
            ulEl.appendChild(liElement);

            tCell = document.createElement('td');
            tCell.appendChild(ulEl);
            tRow.appendChild(tCell);
        }

        /*if (selectedDestination.value == routeval) {
         destinationParams.getActualField().value = routeval;
         destinationParams.getDisplayField().value = routelinktxt;
         }*/
    }
    
	originsAndDestinationsOverlayFooter(tBody);

    overlayBody.appendChild(tblEl);
    return true;
    /* enable selection of destinationAirports
     destinationAirports.disabled = false;*/
}

function originRouteClickCallBack(e) {
    var eventSource = YAHOO.util.Event.getTarget(e);

    if (eventSource.nodeName.toLowerCase() === 'img') {
        var inputChildren = searchPageUtil.getOndOverlayInputFields(this);
        if(inputChildren[0].value == '') {
            inputChildren[1].value = defaultOriginValue;
        }
        this.hide();
    } else if (eventSource.nodeName.toLowerCase() === 'a') {
    	// In fact all is not needed.
        var Dom = YAHOO.util.Dom;
        var inputDiv = Dom.getLastChild(Dom.getNextSibling(Dom.getAncestorByTagName(this.cfg.getProperty("context")[0], 'div')));
        //Dom.getChildren(inputDiv)[0].value = '';
    }
}

function routeClickCallBack(e) {
    var eventSource = YAHOO.util.Event.getTarget(e);

    if (eventSource.nodeName.toLowerCase() === 'img') {
        var inputChildren = searchPageUtil.getOndOverlayInputFields(this);
        if(inputChildren[0].value == '') {
            inputChildren[1].value = defaultDestinationValue;
        }
        this.hide();
    }

}

function changeFormValue(overlay, elementId, text, val) {
    var Dom = YAHOO.util.Dom;
    var el = document.getElementById(elementId);
    var elDisplay = document.getElementById(elementId + 'Display');
    el.value = val;
    elDisplay.value = text;

    if (overlay == 'originOverlay') {
        YAHOO.jetblue.b2c.overlay.origin.hide();
        var container = Dom.getNextSibling(Dom.getAncestorByTagName(YAHOO.jetblue.b2c.overlay.origin.cfg.getProperty('context')[0], 'div'));
        var fx = destinationClickCallback;
        fx.apply(container, [container]);
    } else {
        YAHOO.jetblue.b2c.overlay.destination.hide();
    }
}

function createLink(linkHref, linkInnerHTML, linkRouteVal) {
    var el = document.createElement('a');
    el.style.textDecoration = 'none';
    el.href = linkHref;
    el.innerHTML = linkInnerHTML;
    
    var macAirportsLen = arrMACAirports.length;
    for(var i=0; i<macAirportsLen; i++) 
    {
    	if (linkRouteVal == arrMACAirports[i])
    	{
    		el.style.fontWeight = 'bold';
    	}
    }
    
    return el;
}

function AirportDetails(code, description) {
    this.code = code;
    this.description = description;
}
AirportDetails.prototype = {
    getCode: function() {
        return this.code;
    },
    getFullDescription: function() {
        return this.description + ' (' + this.code + ')';
    }
};

function AirportUtils() { }
AirportUtils.prototype = {
    initOrigins: function () {
        for (var origin in routes) {
            YAHOO.jetblue.b2c.arr.ondArray[origin] = new AirportDetails(origin, airports[origin]);
        }
    }
};

function SearchPageUtil() {
}
SearchPageUtil.prototype = {
    changeDisplayValue: function (hiddenFieldId, value, displayText) {
        var hiddenField = YAHOO.util.Dom.get(hiddenFieldId);
        var displayField = YAHOO.util.Dom.getNextSibling(hiddenField);
        hiddenField.value = value;
        displayField.value = displayText;
    },
    resetLastOriginField : function() {
        if (!(typeof YAHOO.jetblue.b2c.overlay.origin.cfg.getProperty('context') === 'undefined')) {
            var ctx = YAHOO.jetblue.b2c.overlay.origin.cfg.getProperty('context')[0];
            var inputFields = YAHOO.util.Dom.getChildren(YAHOO.util.Dom.getNextSibling(ctx));
            (inputFields[0].value == '') ? inputFields[1].value = defaultOriginValue : void(0);
        }
    },
    resetLastDestinationField : function () {
        if (!(typeof YAHOO.jetblue.b2c.overlay.destination.cfg.getProperty('context') === 'undefined')) {
            var ctx = YAHOO.jetblue.b2c.overlay.destination.cfg.getProperty('context')[0];
            var inputFields = YAHOO.util.Dom.getChildren(YAHOO.util.Dom.getNextSibling(ctx));
            (inputFields[0].value == '') ? inputFields[1].value = defaultDestinationValue : void(0);
        }
    },
    getKeyVariable : function(e) {
        var evt = (e) ? e : (window.event) ? window.event : null;
        var key;
        if (evt) {
            key = (evt.charCode) ? evt.charCode : ((evt.keyCode) ? evt.keyCode : ((evt.which) ? evt.which : 0));
        }
        return key;
    },
    isKeyInList : function(key, list) {
        for (var i = 0; i < list.length; i++) {
            if (key == list[i]) {
                return true;
            }
        }
        return false;
    },
    getOndOverlayInputFields : function(overlay) {
        var inputChildren = YAHOO.util.Dom.getChildren(YAHOO.util.Dom.getNextSibling(overlay.cfg.getProperty('context')[0]));
        return inputChildren;
    }
};


function SearchPageEvents() {
}
SearchPageEvents.prototype = {
    ondKeydDownCallback : function(e, ondswitch) {
        var key = searchPageUtil.getKeyVariable(e);

        var ondId = null;
        var overlay = null;
        var ondCount = null;
        var cssStyle = 'keyselected';
        if (ondswitch == 'origin') {
            ondId = 'org';
            overlay = YAHOO.jetblue.b2c.overlay.origin;
            ondCount = originCount;
        } else {
            ondId = 'dest';
            overlay = YAHOO.jetblue.b2c.overlay.destination;
            ondCount = destinationCount;
        }

        if (key == 13) {
            YAHOO.util.Event.stopEvent(e);
            var alink = YAHOO.util.Dom.get(ondId + keymarker);
            (alink != null) ? location.href = alink.href : void(0);
            overlay.hide();
            keymarker = 0;
        }

        var curr = null;
        var previous = null;

        if (key == 40) {
            keymarker += 1;
            curr = YAHOO.util.Dom.get(ondId + (keymarker));
            previous = YAHOO.util.Dom.get(ondId + (keymarker - 1));

            if (previous != null) {
                YAHOO.util.Dom.removeClass(previous, cssStyle);
            }

            if (curr != null) {
                YAHOO.util.Dom.addClass(curr, cssStyle);
            } else {
                keymarker = 0;
                keymarker += 1;
                curr = YAHOO.util.Dom.get(ondId + keymarker);
                YAHOO.util.Dom.addClass(curr, cssStyle);
            }
        }

        if (key == 38) {
            keymarker -= 1;
            curr = YAHOO.util.Dom.get(ondId + (keymarker));
            previous = YAHOO.util.Dom.get(ondId + (keymarker + 1));

            if (previous != null) {
                YAHOO.util.Dom.removeClass(previous, cssStyle);
            }

            if (curr != null) {
                YAHOO.util.Dom.addClass(curr, cssStyle);
            } else {
                keymarker = ondCount;
                curr = YAHOO.util.Dom.get(ondId + keymarker);
                YAHOO.util.Dom.addClass(curr, cssStyle);
            }
        }
    }
}

YAHOO.jetblue.b2c.util.airportUtil = new AirportUtils();
YAHOO.jetblue.b2c.arr.ondArray = new Array();
var searchPageUtil = new SearchPageUtil();
var searchPageEvents = new SearchPageEvents();
var keymarker = 0;
var originCount = 0, destinationCount = 0;