function html_entity_decode(str) {
  var ta=document.createElement("textarea");
  ta.innerHTML=str.replace(/</g,"&lt;").replace(/>/g,"&gt;");
  return ta.value;
}
 
$.widget( "custom.catcomplete", $.ui.autocomplete, {
       _renderMenu: function( ul, items ) {
             var self = this,
                    currentCategory = "";
             $.each( items, function( index, item ) {
                    if ( item.category != currentCategory ) {
                           item.category = html_entity_decode(item.category);
                           ul.append( "<li class='ui-autocomplete-category'>" + item.category + "</li>" );
                           currentCategory = item.category;
                    }
                    item.label = html_entity_decode(item.label);
                    self._renderItem( ul, item );
             });
       }
});
 
$(function() {
$("#searchbox").catcomplete({
                        source: function( request, response ) {
                                               request.term = escape(request.term);                                             
                                               var lastXhr = $.getJSON( "autocomplete.php", request, function( data, status, xhr ) {
                                               response( data );
                                        });
                                        },
                        minLength: 2,
                                        delay: 300,
                                        highlight: true,
                        select: function(event, ui) {
                          if (ui.item.value.indexOf("cat") === 0)
                          {
                            //category
                            location.href = "index.php?cPath=" + ui.item.value.substring(3);
                          }
                          else
                          {
                            //product
                            location.href = "product_info.php?products_id=" + ui.item.value;  
                          }
                          
                          return false;
                        }
                });
 
});
