﻿function _renderAutocomplete(ul, item) {
    var city = item.City;
    var country = item.Country;
    var tlc = item.Code;
    var separator = ', ';

    var citySpan = $('<span/>');
    var countrySpan = $('<span/>');
    var separatorSpan = $('<span/>').text(separator);
    var tlcSpan = $('<span/>');

    citySpan.text(city);
    citySpan.addClass('city');
    countrySpan.text(country);
    countrySpan.addClass('country');
    tlcSpan.text(' ' + tlc);
    tlcSpan.addClass('tlc');

    return $("<li></li>")
                        .data("item.autocomplete", item)
                        .append($("<a></a>")
                        .append(citySpan)
                        .append(separatorSpan)
                        .append(countrySpan)
                        .append(tlcSpan))
                        .appendTo(ul);
}

function get_airportListObject(airportCache, lastXhr) {
    var _contract = airportCompleteInitData.Contract;
    var _minLength = 3;
    var _airportCompleteObject = new Object();
    var _webServelPath = webServicesUrl + "/" + "AiportComplete.asmx";
    _airportCompleteObject.source = function(request, response) {
        var term = request.term;
        if (term in airportCache) {
            response(airportCache[term]);
            return;
        }

        var _pageMethod = "GetAirportsList";
        var airportListRequest = new Object();
        airportListRequest["airportListRequest"] = new Object();
        airportListRequest["airportListRequest"]["Contract"] = _contract;
        airportListRequest["airportListRequest"]["FreeFlowText"] = request.term;

        lastXhr = $.ajax({
            type: "POST",
            url: _webServelPath + '/' + _pageMethod + '?contractName=' + _contract,
            data: $.toJSON(airportListRequest),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(data, status, xhr) {
                for (var i = 0; i < data.d.length; i++) {
                    var airport = data.d[i];
                    airport.label = airport.City + ', ' + airport.Country + ' ' + airport.Code;
                }

                airportCache[request.term] = data.d;
                if (xhr === lastXhr) {
                    response(data.d);
                }
            },
            error: ''
        });
    },
     _airportCompleteObject.minLength = _minLength;

    return _airportCompleteObject;
}


$(document).ready(function() {
    var _webServelPath = webServicesUrl + "/" + "AiportComplete.asmx";
    var _airportsCache = {}, lastXhr;
    var _initAirportCompletePluginObject = get_airportListObject(_airportsCache, lastXhr);
    $("input[id $= 'OriginTxt']").each(function(i, input) { $(input).autocomplete(_initAirportCompletePluginObject).data("autocomplete")._renderItem = _renderAutocomplete; });
    $("input[id $= 'DestinationTxt']").each(function(i, input) { $(input).autocomplete(_initAirportCompletePluginObject).data("autocomplete")._renderItem = _renderAutocomplete; });
});

