
(function($) {
	var SELECT_ID = -1;
	var CLOSE = 0;
	var JSON = "";
	var URL = "/ajax-search?";
	var KEY = "";
	var TIMEOUT_ID;

	$.Setup = function($input, $parentdiv, $param, $count_letter, $field_name) 
	{ 
		eval("var "+$input+" = \""+$field_name+"\";");
		/* setup for div */
		var $div = $('<div class="auto_suggest"></div>');
		$div.attr('id','div_'+$input);
		$('div#'+$parentdiv).append($div);
		$div.hide();
		$div.hover( function() 
		{ 
			CLOSE = 0;
		}, 
		function()
		{ 
			CLOSE = 1;
		});
		/* setup for input element */
		eval('txt_'+$input+'="";');
		$element = $('input#'+$input);
		$element.bind("keyup",function(ev)
		{ 
			$.KeyUp($input, $param, $count_letter, ev) 
		});
		$element.bind("keypress",function(ev)
		{ 
			$.KeyPress($input, $param, $count_letter, ev) 
		});
        /*
		$element.bind("blur",function()
		{ 
			if( $(this).val()=="")
			{
				$(this).val(eval($input));
			}
			if (CLOSE == 1)
			{
				clear($input);
			}
		});
        */
		$element.bind("focus",function()
		{ 
			SELECT_ID = -1; 
		});
        /*
		$element.bind('click',function()
		{
			if( $(this).val()==eval($input))
			{
				$(this).val("");
			}
		});
		$element.val(eval($input));
        */
	}

	$.KeyUp = function($input, $param, $count_letter, ev) {
		var $key = (window.event) ? window.event.keyCode : ev.keyCode;
		var ARRUP = 38;
		var ARRDN = 40;
		var RETURN = 13;
		var TAB = 9;
		var ESC = 27;

		switch($key)
		{
			case RETURN:
			break;

			case ESC:
				if (KEY != $key)
				{
					clear($input);
				}
			break;

			case ARRUP:
				if (KEY != $key)
				{
					up();
				}
			break;

			case ARRDN:
				if (KEY != $key)
				{
					down($input);
				}
			break;
		
			default:
				clearTimeout(TIMEOUT_ID);
				TIMEOUT_ID = setTimeout(function(){ search($input, $param, $count_letter); }, 500);
//				search($input, $param, $count_letter);
			break;
		}
	}

	$.KeyPress = function($input, $param, $count_letter, ev) {
		var $key = (window.event) ? window.event.keyCode : ev.keyCode;
		var ARRUP = 38;
		var ARRDN = 40;
		var RETURN = 13;
		var TAB = 9;
		var ESC = 27;

		switch($key)
		{
			case RETURN:
				return_func($input, $param);
			break;

			case ESC:
				KEY = $key;
				clear($input);
			break;

			case ARRUP:
				KEY = $key;
				up();
			break;

			case ARRDN:
				KEY = $key;
				down();
			break;
		
			default:
			break;
		}
	}

	function clear_search($search)
	{
		var $tmp = $search;
//		var re = /[^A-z0-9\s]+/;
//		$tmp = $tmp.replace(re, "");
//		re = new RegExp('\\s+', 'g');
//		$tmp = $tmp.replace(re, "_");
		return $tmp;
	}

	function return_func($input, $param)
	{
		if (SELECT_ID == -1) 
		{
			if ($('#'+$input).val() == '') return false;
//			document.location = '/search?' + $param + '=' + $('#'+$input).val();
			$('.form-search').submit();
//			$('.form-search').attr('action', '/search?search=' + $('#search_mall_name').val()).submit();
			return false;
		}
		document.location = '/'+JSON[SELECT_ID].alias;
		clear($input);
		return false;
	}

	function clear($input) 
	{
		SELECT_ID = -1;
		var $div = $('div#div_'+$input);
		$div.hide();
		$div.html("");
	}

	function up() 
	{
		var $id = SELECT_ID;
		if ($id > 0 ) 
		{
			$id--;
		} 
		else 
		{
			$id = JSON.length-1;
		}
		light($id);
	}

	function down() 
	{
		var $id = SELECT_ID;
		if ($id < (JSON.length-1) ) 
		{
			$id++;
		} 
		else 
		{
			$id = 0;
		}
		light($id);
	}

	function light($id)
	{
		$('tr#'+SELECT_ID).removeClass('highlightedRow'); 
		SELECT_ID = $id;
		$('tr#'+SELECT_ID).addClass('highlightedRow'); 
	}

	function search($input, $param, $count_letter) 
	{
		var $div = $('div#div_'+$input);
		SELECT_ID = -1;
		var $element = $('input#'+$input);
		var $txt = jQuery.trim($element.attr('value'));
		var $flag = false;
		eval('if ($txt == txt_'+$input+') $flag = true');
		if ($flag) 
		{
			$div.show();
			return false;
		}

		eval('txt_'+$input+'=$txt;');
		if ($txt.length < $count_letter) 
		{
			clear($input);
			return;
		}

		$div.css("top",$element.offset().top+$element.outerHeight());
		$div.css("left",$element.offset().left); /*43*/
		$div.html("");
		var $table = $('<table class="asPopup"></table>');
		$table.css("position","relative");
//		$table.css("width",$element.outerWidth());
		var $tbody = $("<tbody></tbody>");
		$table.append($tbody);
		$div.append($table);
		$div.hide();

		var re = /\s/;
		var $search_array = clear_search($txt).split(re);
		var $search_send = "";
		for(var i=0; i<$search_array.length; i++)
		{
			if ($search_array[i].length >= $count_letter)
			{
				$search_send += $search_array[i]+' ';
			}
		}
		if ($search_send.length < $count_letter) return false;

		$.ajax({
			type: "POST",
			url: URL+$param+"="+$txt,//$search_send.substr(0, $search_send.length-1),
			data: "",
			success: function(msg)
			{
				var flag = false;
				if (msg != '') 
				{
					flag = true;
					JSON = '';
					JSON = eval('('+msg+')');
					if (JSON.length == 0) flag = false;
				}
				if (flag) 
				{
					var type = JSON[0].type;
					for (var i=0; i<JSON.length; i++) 
					{
						var $output = $v = JSON[i].title;
						for(var t=0;t<$search_array.length;t++)
						{
							re = new RegExp('('+$search_array[t]+')', 'ig');
							$output = $output.replace(re, "<em>$1</em>");
						}
						var $tr = $('<tr></tr>');
						$tr.attr('id',i);
						$tr.hover( function() 
						{ 
							light(this.id) 
						}, 
						function() 
						{
						} );
						$tr.bind('click', function() 
						{ 
							return_func($input, $param);
						} );
						$tr.html('<td>'+$output+'</td>');
						if (type != JSON[i].type && i != JSON.length)
						{
							type = JSON[i].type;
							$tr.html('<td style="border-top: 1px solid #8C8C8C;">'+$output+'</td>');
						}
						$tbody.append($tr);
					}
					$tbody.append($('<tr class="divider"><td colspan="3"></td></tr>'));
					$tbody.append($('<td colspan="3"><span class="link" id="close_'+$input+'">close</span></td>'));
				} 
				else 
				{
					$tbody.append($('<td colspan="3">No suggestions match</td>'));
					$tbody.append($('<tr class="divider"><td></td></tr>'));
					$tbody.append($('<td colspan="3"><span class="link" id="close_'+$input+'">close</span></td>'));
				}
				$div.show();
				$('span#close_'+$input).bind('click', function() 
				{ 
					clear($input); 
				} );
			}
		});
	}

})(jQuery);

