﻿function initAutocomplete(textboxid, cultureid, initText, webservice, baseUrl, onselect, onnoresults) {
    var textbox = $('#' + textboxid);
    var LCID = (cultureid) ? cultureid : 1043;
    var WS = (webservice) ? webservice : 'medlist.ashx';
    var INITTEXT = (initText) ? initText : "";
    var baseUrl = (baseUrl) ? baseUrl : location.href.substring(0, location.href.lastIndexOf('/'));
    
    if (textbox.val() == "") {
        textbox.val(INITTEXT);
        textbox.change();
    }

    // Disable enter key to prevent SUBMIT when hit from within the autocomplete
    textbox.keypress(function (evt) {
        var evt = (evt) ? evt : ((event) ? event : null);
        var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
        if ((evt.keyCode == 13) && (node.type == "text") && (node.id == textboxid)) {
            return false;
        }
    });

    textbox.keydown(function (evt) {
        var evt = (evt) ? evt : ((event) ? event : null);
        var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
    });

    // On first click; empty the contents (like 'Selecteer een medicijn...' and emulate a keypress to activate the autocomplete
    textbox.click(function () {
        if ($(this).val() == INITTEXT) {
            $(this).val('');
            $(this).change();
        };
        o
        var e = jQuery.Event("keydown");
        e.which = 40;
        $(this).trigger(e);

        if (onnoresults != null) {
            onnoresults('');
        }
    });

    textbox.autocomplete({
        source: function (request, response) {
            var maxHits = 25;
            var url = baseUrl + '/' + WS + '?method=?&match=' + request.term + '&maxHits=' + maxHits + "&LCID=" + LCID;

            $.getJSON(url, function (results) {
                response($.map(results, function (item) {
                    var displayName = item.Name;
                    if (item.GnrcName != null && item.GnrcName.length > 0) {
                        displayName += ' (' + item.GnrcName + ')';
                    }
                    return {
                        label: displayName,
                        value: item.Name,
                        id: item.ID,
                        url: item.URL
                    }
                }));
                if (results.length == 0 && onnoresults != null) {
                    onnoresults(textbox.val());
                }
            });
        },
        minLength: 0,
        select: function (event, ui) {
            if ((ui.item) && (ui.item.id.length > 0)) {
                $(event.target).val(ui.item.value);
                if (onselect) {
                    onselect(ui.item);
                };
                return true;
            }
            else {
                return false;
            }
        },
        open: function () {
            //$(this).removeClass("ui-corner-all").addClass("ui-corner-top");
        },
        close: function () {
            //$(this).removeClass("ui-corner-top").addClass("ui-corner-all");
        }
    });
}

