(function($) {

	$.fn.suggestionBar = function(options) {

		this.nullfunc = function() {}

		// дефолтные значения
		var defaults = {
			el_name: this.attr('name'),
			inp_name: this.attr('name') + '_input',
			sug_name: this.attr('name') + '_suggest',
			bar_class: 'suggestion_bar', // имя класса для блока подсказок
			selectSuggest: this.nullfunc,
		}, 	opts = $.extend(defaults, options);

		this.attr('name', '');
		this.attr('id', opts['inp_name']);
		this.attr('autocomplete', 'off');
		this.attr('placeholder', '');
		this.attr('selected', '0');

		$('<input type="hidden" id="'+opts['el_name']+'" name="'+opts['el_name']+'" value="'+this.val()+'">').insertAfter(this);

		this.val('');

		$('<div style="display: none; position: absolute; z-index:1;" class="'+opts['bar_class']+'" id="'+opts['sug_name']+'"></div>').insertAfter(this);

		var user_email = '';

		var suggest_pos = 0;
		var suggest_count = 0;

		this.keyup( function(event) {

			switch(event.keyCode) {
				case 40:
				if (suggest_pos < suggest_count) suggest_pos++;
				renderSuggest();
				break;

				case 38:
				if (suggest_pos > 0) suggest_pos--;
				renderSuggest();
				break;

				case 13:
				opts['selectSuggest']( suggest_pos > 0 ? suggest_pos-1 : 0, opts['el_name']);
				return false;

				case 27:
				$('#'+opts['inp_name']).blur();
				break;

				default:
				var str = $(this).val();

				if (str != user_email) {

					user_email = str;
					$('#'+opts['el_name']).val('-');

					//if (str.length >= 2 || str.indexOf('@') != -1)
					//{
						$.get('/main/user_find_xml/?q='+str, function(response) {

							var output = '<table border="0" id="suggestion_list" width="100%">';

							var i = 0;
							$(response).find('s').each(function(){
								output += "<tr><td id='"+i+"' user_id='"+$(this).attr('user_id')+"'>"+$(this).text()+"</td></tr>";
								i++;
							});

							suggest_count = i;
							suggest_pos = 0;

							output += "</table>";

							if (suggest_count > 0) {
								$('#'+opts['sug_name']).css('display', 'block');
								$('#'+opts['sug_name']).html(output);
							}
							else {
								$('#'+opts['sug_name']).hide();
								$('#'+opts['sug_name']).html('');
								suggest_count = 0;
								suggest_pos = 0;
							}
						});
					//}
					//else {
					//	$('#'+opts['sug_name']).hide();
					//	$('#'+opts['sug_name']).html('');
					//	suggest_count = 0;
					//	suggest_pos = 0;
					//}
				}
				break;
			}
		});

		this.focus( function() {
			this.select();
		});


		this.blur( function(){
			$('#'+opts['sug_name']).hide();
			$('#'+opts['sug_name']).html('');
			suggest_count = 0;
			suggest_pos = 0;
		});

		$('table#suggestion_list td').live('mouseover', function () {
			var id = parseInt($(this).attr('id'));
			suggest_pos = id+1;
			renderSuggest();
		});

		$('table#suggestion_list td').live('mousedown', function () {
			opts['selectSuggest']( $(this).attr('id'), opts['el_name'] );
		});

		function renderSuggest() {
			//remove active status
			$('table#suggestion_list td').removeClass('active');

			//set new active line
			$('table#suggestion_list td#'+(suggest_pos-1)).addClass('active');
		};
	};

})(jQuery);



