/*
=========================================================
  Author: Christian Reuter <christian.reuter@nyx-it.de>
  Web: http://www.nyx-it.de
 
  Copyright (C)2009 Nyx
=========================================================
*/

var Suggest = new Class.create();

Suggest.prototype = 
{	
	////////////
	// Settings
	
	searchEngine: '/cgi-bin/shop/front/suggest.cgi',
	minSearchLength: 3,
	searchDelay: 0.4,
	lineHeight: 18,
	searchField: 'sbeg',
	outputObject: 'SuggestResult',
	suggestForm: 'SuggestForm',
	speed: 0.3,
	parentId: 'container_content',

/*
============================================
    DO NOT EDIT ANYTHING BELOW THIS LINE
============================================
*/

	suggestTimer: null,
	suggestResultOpen: false,

	initialize: function()
	{
		var node = Builder.node('div', { id: this.outputObject, style: 'display: none;' });
		
		if (this.parentId == '')
			$$('body')[0].appendChild(node);
		else
			$(this.parentId).appendChild(node);
		
		$(this.searchField).observe('keyup', (function() { this.SuggestStart(); }).bind(this));
	},

	SuggestStart: function()
	{
		if (this.suggestTimer)
		{
			clearTimeout(this.suggestTimer);
			this.SuggestShowResult(false);
		}
	
		this.suggestTimer = setTimeout((function() { this.SuggestDo(); }).bind(this), this.searchDelay * 1000);
	},
	
	SuggestDo: function()
	{
		if ($(this.searchField).value.length >= this.minSearchLength)
		{
			new Ajax.Request(this.searchEngine,
			{
				method: 'get',
				parameters: {q: $(this.searchField).value},
				onSuccess: (function(transport) { this.SuggestResult(transport); }).bind(this)
			});
		}	
	},
	
	SuggestResult: function(transport)
	{
	  $(this.outputObject).innerHTML = '';
	
		if (transport.responseText.length > 0)
		{
			var suggestString = transport.responseText.split("\n");
	
			for (i = 0; i < suggestString.length - 1; i++)
			{
	 	    $(this.outputObject).appendChild(Builder.node('div', [ 
	 	    	Builder.node('a', {
	 	    		id: 'suggestItem' + i,
	 	    		className: 'suggestItem',
	 	    		href: '#'
	 	    	})
	 	    ]));
	 	    
	 	    $('suggestItem' + i).innerHTML = suggestString[i];
	 	    $('suggestItem' + i).observe('click', (function(event) { this.SuggestSet(Event.element(event).innerHTML); }).bindAsEventListener(this));
			}		
			
			this.SuggestShowResult(true);
	  }
	  else
	  {
	  	this.SuggestShowResult(false);
	  }	
	},
	
	SuggestSet: function(set)
	{
		set = set.replace(/<[^>]+>/g, '');
	  $(this.searchField).value = set;
	  $(this.searchField).focus();
		
		this.SuggestShowResult(false);
		
		$(this.suggestForm).submit();
		
		return false;
	},
	
	SuggestShowResult: function(bool)
	{
		if (!this.suggestResultOpen && bool)
		{
			Effect.BlindDown(this.outputObject, {duration: this.speed, scaleMode: 'contents'});
			this.suggestResultOpen = true;
		} 
		else if (this.suggestResultOpen && !bool)
		{
			Effect.BlindUp(this.outputObject, {duration: this.speed, scaleMode: 'contents'});
			this.suggestResultOpen = false;
		}
	}
};

document.observe('dom:loaded', function() { new Suggest(); });