// Language dependent text
var DEFAULT_LANG = 'de';
var NOTE = new Array();
NOTE['de'] = 'und weitere';
NOTE['en'] = 'and others';
NOTE['es'] = 'y otros';
NOTE['fr'] = 'et plus';

// max shown hits
var MAX_HITS = 7;

// ouput elem id
var OUTPUT_ELEM_ID = 'autocomplete-country';

// Attach event
var searchCountryInput = document.getElementById('search-country');
if (searchCountryInput && (document.createElementNS || document.createElement) && document.createTextNode && document.insertBefore && document.appendChild && document.replaceChild) { // only if key features are supported
    searchCountryInput.onkeyup = autoCompleteCountry;
}

// Array, das aus den Treffern der 1. Suche erstellt und für die weiteren Suchen benutzt wird.
var database = new Array();

// Variable zur Überprüfung, ob ein Zeichen im Textfeld hinzugefügt oder entfernt wurde.
var y = 0;

function autoCompleteCountry(ev) {
    ev = (ev) ? ev : ((event) ? event : null);
    if (ev) {
        var elem = (ev.target) ? ev.target : ((ev.srcElement) ? ev.srcElement : null);
        if (elem && elem.value && elem.value.length > 0) {
        
            // temp array to hold matching items
            var matched = new Array();
        
            var anf = elem.value.trim();
            var zaehler = 0;
            var checksumme = '';
            var v = 0;
        
            // Wenn 1 Zeichen im Textfeld steht oder ein Zeichen gelöscht wurde land[] durchsuchen.
            // Nach der 1. Suche das Array database[] < land[] anstelle von land[] durchsuchen.
            if (anf.length == 1 || anf.length < y) {
                database = land;
            }
            y = anf.length;
            for (var i = 0; i < database.length; i++) {
                var checkeintrag = '//' + database[i][1].toLowerCase() + '//';
                for (var j = 1; j < database[i].length; j++) {
                    var Laendername = database[i][j];
                    if (Laendername.toLowerCase().indexOf(anf.toLowerCase()) == 0) {
                        if (matched.length == 0) {
                            matched[v] = database[i];
                            v++;
                        } else if (matched[(v - 1)] != database[i]) {
                            matched[v] = database[i];
                            v++;
                        }
                        if (checksumme.indexOf(checkeintrag) < 0) {
                            checksumme += checkeintrag;
                            zaehler++;
                            if (zaehler >= MAX_HITS) {
                                break;
                            }
                        }
                    }
                }
            }
            database = matched;
                
            if (matched.length > 0) {
                var ulNode = document.createElementNS ? document.createElementNS(XHTML_NS_URI, 'ul') : document.createElement('ul');
                ulNode.setAttribute('id', OUTPUT_ELEM_ID);
                ulNode.className = 'links';
                var liNode = document.createElementNS ? document.createElementNS(XHTML_NS_URI, 'li') : document.createElement('li');
                var aNode = document.createElementNS ? document.createElementNS(XHTML_NS_URI, 'a') : document.createElement('a');
                var textNode;
                for (var k = 0; k < Math.min(matched.length, MAX_HITS); k++) {
                    var dupLiNode = liNode.cloneNode(false);
                    var dupANode = aNode.cloneNode(false);
                    var url = matched[k][2];
                    dupANode.setAttribute('href', url);
                    textNode = document.createTextNode(matched[k][1]);
                    dupANode.appendChild(textNode);
                    dupLiNode.appendChild(dupANode);
                    ulNode.appendChild(dupLiNode);
                }
                if (matched.length >= MAX_HITS) {
                    var docLang = getDocumentLanguage();
                    var note = ((docLang.length > 0) ? NOTE[docLang] : NOTE[DEFAULT_LANG]) + '\u2026'; // '\u2026' is entity '&hellip';
                    textNode = document.createTextNode(note);                    
                    liNode.appendChild(textNode);
                    ulNode.appendChild(liNode);
                }
                if (document.getElementById(OUTPUT_ELEM_ID) != null) {
                    var oldNode = document.getElementById(OUTPUT_ELEM_ID);
                    oldNode.parentNode.replaceChild(ulNode, oldNode);
                } else {
                    var refNode = document.getElementById('country-autocomplete-js');
                    if (refNode) {
                        refNode.parentNode.insertBefore(ulNode, refNode);
                    }
                }
            }
        }
    }
}