var searchContext = {

	last_search_text: '',
	activeListItem: -1,
	block: null,

	onKeyDown:function(event, str)
	{
		str = searchContext.modifyWord(str);
		if(!searchContext.block)
		{
			searchContext.init();
		}
		event = event || window.event;
		if(event.keyCode == 38 || event.keyCode == 40)
		{
			searchContext.moveInList(event.keyCode == 38);
		}
		else if(event.keyCode == 13)
		{
			searchContext.sendActiveItem();
		}
		else
		{
			searchContext.getContext(str);
		}
	},

	moveInList: function(up)
	{
		var list = searchContext.block.firstChild;
		if(list)
		{
			item = list.firstChild;
			var countItems = 0;
			while(item)
			{
				if(item.tagName == "LI")
				{
					if(countItems == searchContext.activeListItem)
					{
						item.className = '';
					}
					if(up && countItems == searchContext.activeListItem - 1)
					{
						item.className = 'active';
					}
					if(!up && countItems == searchContext.activeListItem + 1)
					{
						item.className = 'active';
					}
					countItems++;
				}
				item = item.nextSibling;
			}
			if(up && searchContext.activeListItem >= -1) searchContext.activeListItem--;
			if(!up && searchContext.activeListItem < countItems) searchContext.activeListItem++;
		}
	},

	sendActiveItem:function()
	{
		var list = searchContext.block.firstChild;
		if(list)
		{
			item = list.firstChild;
			var j = 0;
			while(item)
			{
				if(item.tagName == "LI")
				{
					if(j == searchContext.activeListItem)
					{
						var f = document.getElementById('search_form_main');
						f[f.field_name.value].value = item.innerHTML;
						searchContext.hideList();
						f.submit();
					}
					j++;
				}
				item = item.nextSibling;
			}
		}
	},

	getContext: function (str)
	{
		str = trim(str);
		if(str.length >= 3)
		{
			if(searchContext.last_search_text != str)
			{
				searchContext.last_search_text = str;
				$.ajax({
					type: 'POST',
					dataType: 'text',
					url: 'catalog/get_search_context/',
					data: { word:str },
					complete: function( res, status )
					{
						if ( status === "success")
						{
							searchContext.showList(res.responseText);
						}    
					}
				});
			}
		}
		else
		{
			searchContext.hideList();
		}
	},

	showList: function (str)
	{
		var obj = document.getElementById('search_context');
		searchContext.activeListItem = -1;
		var arr = str.split("\n");
		var search_word = arr[0];
		var f = document.getElementById('search_form_main');
		if(arr.length > 1)
		{
			if(searchContext.modifyWord(f[f.field_name.value].value) == search_word)
			{
				var ul = document.createElement('ul');
				for(var i in arr)
				{
					if(i == 0)
					{
						continue;
					}
					var li = document.createElement('li');
					li.innerHTML = arr[i];
					li.onclick = function ()
					{
						var f = document.getElementById('search_form_main');
						f[f.field_name.value].value = this.innerHTML
						searchContext.hideList();
						f.submit();
					}
					ul.appendChild(li);
				}
				searchContext.hideList();
				searchContext.block.appendChild(ul);
				searchContext.block.style.display = '';
			}
		}
		else
		{
			searchContext.hideList();
		}
	},
	
	hideList: function()
	{
		if(searchContext.block.firstChild)
		{
			searchContext.block.removeChild(searchContext.block.firstChild);
		}
		searchContext.block.style.display = 'none';
	},

	init: function()
	{
		searchContext.block = document.getElementById('search_context');
	},

	modifyWord: function(str)
	{
		return str.replace('ё', 'е');
	}
};



function trim( str, charlist ) {	
	charlist = !charlist ? ' \s\xA0' : charlist.replace(/([\[\]\(\)\.\?\/\*\{\}\+\$\^\:])/g, '\$1');
	var re = new RegExp('^[' + charlist + ']+|[' + charlist + ']+$', 'g');
	return str.replace(re, '');
}

$(document).ready(function(){
	searchContext.init();
});

// Hide catalogs
(function($){
	$(document).ready(function(){
		var ul = $('ul#catalogs');
		ul.hide();
		$('#catalogs-title').show();
		$('#catalogs-title a').click(function(){
			var self = $(this).parent();
			if (ul.is(':visible')) {
				$(this).html('Показать  товарные категории');
			}
			else {
				$(this).html('Скрыть');
			}
			ul.slideToggle();
		});
	})
})(jQuery)

