/**
 * Search suggestions facility
 */

(function ($) {

	$(function () {

		var cache = [];

		$.extend($.ui.autocomplete.prototype, {

			_resizeMenu: function() {
				var ul = this.menu.element;
				//ul.outerWidth(this.element.outerWidth);
				ul.outerWidth(258);
			},

			_renderItem: function(ul, item, column) {

				var addclass = '';
				var label = $("<span>" + item.label + "</span>");

				if (item.image) {

					var img = $("<img style='display: inline-block;' src='" + item.image + "' " + " class='ui-menu-image' align='top' />");

					if (item.image_w)
						img.width(parseInt(item.image_w));

					if (item.image_h)
						img.height(parseInt(item.image_h));

					var price_buy_row = "<div class='price'><div class='prices'>";
					if (item.list_price) {
						price_buy_row += "<span class='old'><span class='currency'>$" + item.list_price + "</span></span> | ";
					}
					if (item.price) {
						price_buy_row += "<span class='currency current'>$" + item.price + "</span>";
					}
					price_buy_row += "</div>";
					if (item.avail > 0) {
						price_buy_row += "<span class='buy'></span>";
					} else {
						price_buy_row += "<span class='notify' ></span>";
					}
					price_buy_row += "</div>";

					label = $("<div class='ui-menu-image-container'><table width='100%' cellpadding='0' cellspacing='0'><tr><td width='1' rowspan='2' style='vertical-align: top;'>" + img.clone().wrap('<div>').parent().html() + "</td><td style='vertical-align: top;'>" + label.addClass('ui-menu-image-text').clone().wrap('<div>').parent().html() + "</td></tr><tr><td style='vertical-align: bottom;'>" + price_buy_row + "</td></tr></table></div>");
				}

				if (item.add_autosubmit)
					label = label.append($("<div class='ui-menu-submit-btn' onclick='window.location = \"" + xcart_web_dir + "/search.php?mode=search&page=1&substring=" + item.value + "\";'></div>"));

				var li = $("<li " + addclass + "></li>");

				if (item.last_item)
					li.addClass('ui-menu-item-last');

				if (item.autosubmit_item)
					li.addClass('ui-menu-item-autosubmit');

				if (item.spelling_suggestion)
					li.addClass('ui-menu-item-spelling-suggestion');

				var autocomplete = this;
				$('.buy', label).click(function (event) {

					autocomplete.close();

					buy(item.id);

					if (event.stopPropagation)
						event.stopPropagation();
					else if (window.event)
						window.event.cancelBubble = true;

					return false;
					
				});

				$('.notify', label).click(function (event) {

					autocomplete.close();

					window.location = 'stock_notify.php?productid=' + item.id;

					if (event.stopPropagation)
						event.stopPropagation();
					else if (window.event)
						window.event.cancelBubble = true;

					return false;
					
				});

				if (item.href) {
					return li.data("item.autocomplete", item).append($("<a href='" + item.href + "'></a>").append(label)).appendTo(ul).addClass('menuitem');
				} else {
					return li.data("item.autocomplete", item).append($("<a></a>").append(label)).appendTo(ul).addClass('menuitem');
				}

			},

			_renderMenu: function(ul, items) {

				var self = this;

				$.each(items, function(index, item) {

					if (item.separator) {

						if (item.search_all) {
							ul.prepend("<li class='ui-menu-header'><div class='autocomplete_search_all'>" + item.label + " <img style='vertical-align: middle;' src='skin/common_files/images/ss_arrow_grey.png' /></div></li>");
						} else {
							ul.append("<li class='ui-menu-separator'><span>" + item.label + "</span></li>");
						}

						$('.autocomplete_search_all', ul).click(function () {
							search_field.closest('form').submit();
						});

					} else {
						self._renderItem( ul, item );
					}

				});

			}

		});

		var search_field = $("form[name='productsearchform'] input[name='posted_data[substring]']");
		//search_field.parent().append('<div id="quick_search_loader"></div>');

		search_field.removeAttr('autocomplete');
		search_field.autocomplete({

			source: function(request, response) {

				var term = request.term.toLowerCase();

				if (term in cache) {
					setTimeout(function() {
						response(cache[term]);
					}, 0);

				} else {

					search_field.addClass('search-waiting');
					lastXhr = $.getJSON(xcart_web_dir + "/suggest.php", request, function(data, status, xhr) {
						cache[term] = data;
						if (xhr === lastXhr) {
							response(data);

							search_field.removeClass('search-waiting');
						}
					});
				}

			},

			position: {
				my: "left top",
				at: "left bottom",
				collision: "none",
				offset: "0 1"
			},

			minLength: Search_Suggestions['minLength'],
			delay: Search_Suggestions['delay'],

			select: function(event, ui) {

				if (ui.item.href)
					window.location = ui.item.href;

				if (ui.item.autosubmit)
					$(this).closest('form').submit();

				if (ui.item.reopen) {
					search_field.autocomplete('search', ui.item.value);
				}

			}

		});

	});

})(jQuery);

