jQuery(document).ready(function ($) {

    $('#productSearchEntry')
        .autocomplete({
            searchCallback: function (query, resultHandler) {
                var data = { q: query };
                var callback = function (data) {
                    resultHandler.call(window, data);
                };
                $.get('search_suggest.php', data, callback, 'json');
            },
            fillCallback: function (container, value, query) {
                var product = value.product;
                var category = value.category;
                var i = 0;
                var lvalue = product.toLowerCase();
                var lquery = query.toLowerCase();
                var qlen = lquery.length;
                var parts = [];
                while (true) {
                    var ni = lvalue.indexOf(lquery, i);
                    parts[parts.length] = product.substring(i, ni == -1 ? product.length : ni);
                    if (ni < 0) {
                        break;
                    }
                    parts[parts.length] = product.substring(ni, ni + qlen);
                    i = ni + qlen;
                }
                var cat = $('<li class="category"></li>').text(value.category);
                var prod = $('<li class="product"></li>')
                $.each(parts, function (i, v) {
                    var even = i % 2 == 0;
                    prod.append($(even ? '<span></span>' : '<b></b>').text(v));
                });
                container
                    .append($('<ul class="product-suggest-entry"></ul>').append(prod).append(cat));
            },
            textCallback: function (value) {
                return value.product;
            }
        })

});

