/**
 * Boxalino/Guidyu CEM module for PrestaShop.
 *
 * (C) 2009-2010 - Boxalino AG, Guidyu Inc.
 *
 * author: nitro@boxalino.com
 *
 */

jQuery(document).ready(
	function() {
		// auto-completion
		jQuery("#search_query").autocomplete(
			cem.baseUrl + '/ac.php?sid=' + cem.sid + '&lang=' + cem.lang,
			{
				selectFirst: false,
				autoFill: false,
				cacheLength: 100,
				multiple: false,
				dataType: 'json',
				parse: function(data) {
//					cem.showAutocomplete = true;
					return jQuery.map(
						data,
						function(row) {
							switch (row.type) {
							case 'query':
								return {
									data: row,
									result: row.prefix + (row.prefix.length > 0 ? ' ' : '') + row.query + ' '
								};

							case 'content':
								return {
									data: row,
									result: row.content.title
								};
							}
							return "?";
						}
					);
				},
				formatItem: function(row) {
					switch (row.type) {
					case 'query':
						return (
							row.prefix + (row.prefix.length > 0 ? ' ' : '') + row.query + " (" + row.counter + ")"
						);

					case 'content':
						return (
							'<img src="' + row.content.image + '" width="45" height="45"/><div>' + row.content.title + '</div>'
						);
					}
					return "?";
				}
			}
		).result(
			function(e, row) {
//				cem.useAutocomplete = true;
				switch (row.type) {
				case 'content':
					window.location = cem.baseUrl + '/../../product.php?id_product=' + row.content.properties.externalId.value[0];
					break;
				}
			}
		);

		// recommendation overlay
		var previewCache = {};
		var renderEvent = function(href, items) {
			if (items.length > 0) {
				var trigger = jQuery(this);
				var html = [];
                
                html.push('<a href="#" id="cem-preview-window-close">X</a>');
				// TODO: format html here (PR::Item::Content)
				html.push('<ul>');
				for (var i = 0; i < items.length; i++) {
					var item = items[i];

					html.push('<li>');
                    //html.push('<a href="' + cem.baseUrl + '/../../product.php?id_product=' + item.content.properties.externalId.value[0] + '"><img src="' + item.content.image + '" width="45" height="45"/> ');
                    html.push('<a href="' + item.content.href + '"><img src="' + item.content.image + '" width="45" height="45"/> ');
                    html.push(item.content.title);
					html.push('</a></li>');
				}
				html.push('</ul>');
				html.push('<div class="line"><a href="' + href + '">Tous</a></div>');

				jQuery('#cem-preview-window')
					.html(html.join(''))
					.css( {
						left: trigger.position().left + trigger.width() + 5,
						top: trigger.position().top
					} )
					.stopTime('preview')
					.show(500);
                jQuery("#cem-preview-window-close").click(function(ev){
                    jQuery('#cem-preview-window').hide(200);
                    if(ev && ev.preventDefault) ev.preventDefault();
                    return false;
                });
			} else {
				jQuery('#cem-preview-window').hide(200);
			}
		};
		var showEvent = function() {
			var trigger = jQuery(this);
			var href = trigger.attr('href');
			var cgi = href.substring(href.indexOf('?') + 1);

			if (previewCache[cgi]) {
				renderEvent.call(this, href, previewCache[cgi]);
			} else {
				var el = this;

				jQuery.ajax( {
					dataType: "html",
					url: cem.baseUrl + '/r.php?ce=' + cem.ce + '&lang=' + cem.lang + '&' + cgi,
					processData: false,
					type: 'GET',
					success: function(data) {
						previewCache[cgi] = eval('(' + data + ')');
						renderEvent.call(el, href, previewCache[cgi]);
					}
				} );
			}
		};
		var hideEvent = function() {
			jQuery('#cem-preview-window')
				.oneTime(
					1000,
					'preview',
					function() {
						jQuery(this).hide(200);
					}
				);
		};
		var cancelEvent = function() {
			jQuery(this).stopTime('preview');
		};

		jQuery("body").append('<div id="cem-preview-window"/>');
		jQuery(".cem-preview").hover(showEvent, hideEvent);
		jQuery('#cem-preview-window').hover(cancelEvent, hideEvent);

		// escalation
		jQuery(".escalationblock .button").click(
			function() {
				// TODO: check

				jQuery(".escalationblock form").submit();
			}
		);
	}
);
