function autocompleteDestination(locale, value){
    if(value.length > 2 || value.length == 0){
        AutoComplete.autocomplete(locale, value, true, autoDWRDestination);
    }
}

function autocompleteOrigin(locale, value){
    if(value.length > 2 || value.length == 0){
        AutoComplete.autocomplete(locale, value, false, autoDWROrigin);
    }
}

function autoDWROrigin(data){
    
    var airports = data.airports;
    var iataName;
    var resultHtml = ""; 
    var countryPrev = null, countryCur = null;
    var match = document.getElementById("autOrigin").value;
    
    for(var i = 0; i < airports.length; i++){
        countryPrev = countryCur;
        iataName = airports[i];
        countryCur = iataName.country;
        if(countryPrev == null || countryPrev != countryCur){
            resultHtml += "<div class='vv_search_country'>" + countryCur + "</div>";
        }
        resultHtml += "<div class='vv_search_airport' id='o" + iataName.iataCode + "' onclick=\"selectOrigin('" + iataName.iataCode + "');\">";
        resultHtml += "<span class='vv_search_airportCity'>" + highlight(iataName.city, match) + "</span> - <span class='vv_search_airportName'>" + highlight(iataName.name, match) + "</span> <span class='vv_search_airportCode'>(" + highlight(iataName.iataCode, match) + ")</span>";
        resultHtml += "</div>";
    }
    
    document.getElementById("divOrigin").innerHTML = resultHtml;
    select();
}

function autoDWRDestination(data){
    
    var airports = data.airports;
    var iataName;
    var resultHtml = ""; 
    var countryPrev = null, countryCur = null;
    var match = document.getElementById("autDestination").value;
    
    for(var i = 0; i < airports.length; i++){
        countryPrev = countryCur;
        iataName = airports[i];
        countryCur = iataName.country;
        if(countryPrev == null || countryPrev != countryCur){
            resultHtml += "<div class='vv_search_country'>" + countryCur + "</div>";
        }
        resultHtml += "<div class='vv_search_airport' id='d" + iataName.iataCode + "' onclick=\"selectDestination('" + iataName.iataCode + "');\">";
        resultHtml += "<span class='vv_search_airportCity'>" + highlight(iataName.city, match) + "</span> - <span class='vv_search_airportName'>" + highlight(iataName.name, match) + "</span> <span class='vv_search_airportCode'>(" + highlight(iataName.iataCode, match) + ")</span>";
        resultHtml += "</div>";
    }
    
    document.getElementById("divDestination").innerHTML = resultHtml;
    select();
}

function highlight(value, match) {
    var start = 0;
    var index;
    var result = "";
    var valueLow = value.toLowerCase();
    var matchLow = match.toLowerCase();
    if (matchLow.length > 0) {
        while ((index = valueLow.indexOf(matchLow, start)) != -1) {
            result += value.substring(start, index) + "<b>" + value.substring(index, index + matchLow.length) + "</b>";
            start = index + matchLow.length;
        }
        result += value.substring(start, value.length);
    } else {
        result = value;
    }
    return result;
}

/*
function selectOrigin(iataCode) {
    var origin = document.getElementsByName("origin")[0].value;

    document.getElementsByName("origin")[0].value = iataCode;
    selectOrigin(iataCode);

    if(origin != ""){
        var object = document.getElementById("o" + origin);
        object.style.background = '#FFF'; 
    }
}
*/

/*
function selectDestination(iataCode){
    var destination = document.getElementsByName("destination")[0].value;
    

    document.getElementsByName("destination")[0].value = iataCode;
    selectDestination(iataCode);
    
    if(destination != ""){
        var object = document.getElementById("d" + destination);
        object.style.background = '#FFF'; 
    }    
}
*/

function selectOrigin(iataCode) {
    // Rimuove la classe vv_search_airport_selected 
    // dall'elemento precedentemente selezionato (se esiste)
    var origin = document.getElementById("origin");
    if (origin.value != "") {
        var object = document.getElementById("o" + origin.value);
        if (object != null) {
            removeClassName(object, "vv_search_airport_selected");
        }
    }
    // Aggiunge la classe vv_search_airport_selected
    // all'elemento selezionato
    var object = document.getElementById("o" + iataCode);
    if(object != null){
        addClassName (object, "vv_search_airport_selected");
    }
    // Imposta il nuovo valore dell'aeroporto
    origin.value = iataCode;
}

function selectDestination(iataCode) {
    // Rimuove la classe vv_search_airport_selected 
    // dall'elemento precedentemente selezionato (se esiste)
    var destination = document.getElementById("destination");
    if (destination.value != "") {
        var object = document.getElementById("d" + destination.value);
        if (object != null) {
            removeClassName(object, "vv_search_airport_selected");
        }
    }
    // Aggiunge la classe vv_search_airport_selected
    // all'elemento selezionato
    var object = document.getElementById("d" + iataCode);
    if(object != null){
        addClassName (object, "vv_search_airport_selected");
    }
    // Imposta il nuovo valore dell'aeroporto
    destination.value = iataCode;
}

function select(){
    
    var val = document.getElementById("origin").value;
    if(val != "" && val != null){
        selectOrigin(val);
    }
    
    val = document.getElementById("destination").value;
    if(val != "" && val != null){
        selectDestination(val);
    }
}

function removeClassName(object, className) {
    var rep=object.className.match(' '+className)?' '+className:className;
    object.className=object.className.replace(rep,'');
}

function addClassName(object, className) {
    if(!RegExp('\\b'+className+'\\b').test(object.className)) {
        object.className+=object.className?' '+className:className;
    }
}